第3章 Thumb-2指令系統(tǒng)4H_第1頁(yè)
第3章 Thumb-2指令系統(tǒng)4H_第2頁(yè)
第3章 Thumb-2指令系統(tǒng)4H_第3頁(yè)
第3章 Thumb-2指令系統(tǒng)4H_第4頁(yè)
第3章 Thumb-2指令系統(tǒng)4H_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

EmbeddedSystemDevelopment聊城大學(xué)理工學(xué)院曹銀杰caoyinjie@

嵌入式系統(tǒng)與應(yīng)用

第3章Thumb-2指令系統(tǒng)3.1Thumb-2指令集簡(jiǎn)介3.2Cortex-M3八種尋址方式3.3簡(jiǎn)單的Thumb匯編程序3.4Thumb-2指令基本格式3.5

Cortex-M3常用的Thumb-2指令集3.1Thumb-2指令集簡(jiǎn)介Cortex-M3處理器使用的是Thumb-2指令集的子集,它的指令工作狀態(tài)只有Thumb-2狀態(tài)。Thumb-2繼承了傳統(tǒng)的Thumb指令集和ARM指令集的各自優(yōu)點(diǎn),并不是Thumb的升級(jí),包含16-bit指令集和32-bit指令集兩種長(zhǎng)度的指令子集。Thumb-2指令集體系架構(gòu),無(wú)需處理器進(jìn)行工作狀態(tài)的顯示切換,就可運(yùn)行16位與32位混合代碼,并由同一匯編器對(duì)其進(jìn)行匯編。第3章Thumb-2指令系統(tǒng)3.1Thumb-2指令集簡(jiǎn)介3.2Cortex-M3八種尋址方式3.3簡(jiǎn)單的Thumb匯編程序3.4Thumb-2指令基本格式3.2Cortex-M3八種尋址方式尋址方式是根據(jù)指令中給出的地址碼字段來(lái)實(shí)現(xiàn)尋找真實(shí)操作數(shù)地址的方式。指令的簡(jiǎn)單格式:<opcode><Rd>,<Rn>[,<Operand2>]

<指令碼><目標(biāo)寄存器>,<第一操作數(shù)>[,<第二操作數(shù)>]Cortex-M3處理器支持8種基本尋址方式:1、寄存器尋址2、立即尋址3、寄存器移位尋址4、寄存器間接尋址5、基址尋址6、多寄存器尋址7、堆棧尋址8、相對(duì)尋址指令中的地址碼字段(第一或第二操作數(shù))給出的是寄存器編號(hào),操作數(shù)的值在寄存器中,指令執(zhí)行時(shí)直接取出寄存器值來(lái)操作。例:MOVR1,R2;將R2的值存入R11、寄存器尋址SUBR0,R1,R2;將R1的值減去R2的值,結(jié)果存R00xAA0x55R2R1MOVR1,R20xAA地址碼字段(第一或第二操作數(shù))直接給出是一整數(shù)(稱立即數(shù)),例:SUBSR0,R0,#1;R0減1結(jié)果放入R0,影響標(biāo)志位2、立即尋址MOVR0,#0xFF000;將立即數(shù)0xFF000裝入R00x55R0MOVR0,#0xFF00程序存儲(chǔ)0xFF00從代碼中獲得數(shù)據(jù)地址碼字段(第一或第二操作數(shù))在操作之前,先進(jìn)行移位操作。例:MOV R0,R2,LSL#3;R2的值左移3位,結(jié)果存R0, ;即是R0=R2×83、寄存器移位尋址ANDS R1,R1,R2,LSLR3;R2的值左移R3位,再和R1相“與”操作,結(jié)果放入R10x55R0R20x01MOVR0,R2,LSL#30x080x08邏輯左移3位可采用的移位操作LSL邏輯左移(LogicalShiftLeft):寄存器中數(shù)據(jù)位低端空出的位補(bǔ)0;LSR邏輯右移(LogicalShiftRight):寄存器中數(shù)據(jù)位高端空出的位補(bǔ)0;ASR算術(shù)右移(ArithmeticShiftRight):移位過(guò)程中保持符號(hào)位不變,即若源操作數(shù)為正數(shù),則數(shù)據(jù)位的高端空出的位補(bǔ)0,否則補(bǔ)1;可采用的移位操作ROR循環(huán)右移(RtateRight):由數(shù)據(jù)位的低端移出的位填入數(shù)據(jù)位的高端空出的位;RRX帶擴(kuò)展的循環(huán)右移(RotateRighteXtendedby1place):操作數(shù)右移一位,高端空出的位用原C標(biāo)志值填充。地址碼段(第一或第二操作數(shù))給出的是一個(gè)通用寄存器的編號(hào),所需的操作數(shù)保存在寄存器指定地址的存儲(chǔ)單元中,即寄存器為操作數(shù)的地址指針,例:LDRR1,[R2];將R2指向的存儲(chǔ)單元的數(shù)據(jù)讀出存R1

0x55R1R20x400000000xAA0x400000004、寄存器間接尋址LDRR1,[R2]0xAA就是將基址寄存器的內(nèi)容與給出的偏移量相加,形成操作數(shù)的有效地址。用于查表、數(shù)組操作、功能部件寄存器訪問(wèn)等。例:

LDR R2,[R3,#0x0C];讀R3+0x0C地址上的存儲(chǔ)單元的值存R25、基址尋址0x55R2R30x400000000xAA0x4000000CLDRR2,[R3,#0x0C]0xAA將R3+0x0C作為地址裝載數(shù)據(jù)多寄存器尋址一次可傳送幾個(gè)寄存器值,允許一條指令傳送16個(gè)寄存器的任何子集或所有寄存器。例:

LDMIAR1!,{R2-R4,R6};將R1指向單元中的數(shù)據(jù)存到 ;R2~R4、R6中(R1自動(dòng)加4)0x40000000R1R20x??0x010x400000000x??R3R40x??R60x??0x020x030x040x400000040x400000080x4000000C存儲(chǔ)器6、多寄存器尋址LDMIAR1!,{R2-R4,R6}0x010x020x030x040x40000010STMIA R0!,{R2-R7,R12};將寄存器R2~R7、R12的值

;存到R0指向的存儲(chǔ)單元中

;(R0自動(dòng)加4)7、堆棧尋址堆棧是一個(gè)按特定順序進(jìn)行存取的存儲(chǔ)區(qū),后進(jìn)先出。堆棧尋址是隱含的,使用一個(gè)專門的寄存器--堆棧指針SP,指向堆棧的存儲(chǔ)單元即棧頂,2種堆棧方式:向上生長(zhǎng)與向下生長(zhǎng)的堆棧:棧底棧頂棧區(qū)SP堆棧存儲(chǔ)區(qū)棧頂棧底棧區(qū)SP0x12345678向下增長(zhǎng)0x12345678向上增長(zhǎng)0x123456780x12345678壓棧壓棧堆棧尋址堆棧指針指向最后壓入的有效數(shù)據(jù)項(xiàng),稱為滿堆棧;棧頂SP棧頂SP棧底空堆棧棧底滿堆棧0x123456780x12345678棧頂SP0x12345678棧頂SP壓棧壓棧堆棧指針指向下一個(gè)待壓入數(shù)據(jù)的空位置,稱為空堆棧。堆棧尋址所以可以組合出四種類型的堆棧方式:向上生長(zhǎng)的滿棧、向上生長(zhǎng)的空棧、

向下生長(zhǎng)的滿棧、向下生長(zhǎng)的空棧。Cortex-M3向下生長(zhǎng)的滿棧模型。例:STMDBSP!,{R1-R7,LR};將R1~R7、LR入棧LDMIASP!,{R1-R7,PC};出棧,到R1~R7、LR寄存器8、相對(duì)尋址相對(duì)尋址是基址尋址的一種變通。由程序計(jì)數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。例:BWAITA;跳轉(zhuǎn)到WAITA標(biāo)號(hào)處,跳轉(zhuǎn)范圍+16MBBLSUBR1;調(diào)用到SUBR1子程序,并存儲(chǔ)返回地

;址到LR中,其跳轉(zhuǎn)范圍為+16MB

…SUBR1…WAITA…第3章Thumb-2指令系統(tǒng)3.1Thumb-2指令集簡(jiǎn)介3.2Cortex-M3八種尋址方式3.3簡(jiǎn)單的Thumb匯編程序3.4Thumb-2指令基本格式3.3簡(jiǎn)單的Thumb匯編程序;文件名:TEST1.S

AREA|test1.s|,CODE,READONLY;聲明只讀代碼段THUMBDCD__Vectors DCDReset_HandlerEXPORT__Vectors EXPORTReset_Handler__Vectors Reset_HandlerPROC ;PROC/ENDP函數(shù)起始STARTMOVR0,#15;R0=15 MOVR1,#8;R1=8 ADDSR0,R0,R1;R0=R0+R1 B START

ENDP;此處函數(shù)起始標(biāo)記可省END使用“;”進(jìn)行注釋標(biāo)號(hào)頂格寫實(shí)際代碼段聲明文件結(jié)束第3章Thumb-2指令系統(tǒng)3.1Thumb-2指令集簡(jiǎn)介3.2Cortex-M3八種尋址方式3.3簡(jiǎn)單的Thumb匯編程序3.4Thumb-2指令基本格式3.5

Cortex-M3常用的Thumb-2指令集3.4Thumb-2指令基本格式1、指令基本格式:<opcode>{<cond>}{S}{.N|.W}<Rd>,<Rn>{,<Operand2>}<>號(hào)內(nèi)的項(xiàng)是必需的,{}號(hào)內(nèi)的項(xiàng)是可選的;Opcode指令助記符,如LDR、STR等;Cond指令執(zhí)行條件碼,不選為AL(無(wú)條件執(zhí)行);S有S則運(yùn)算結(jié)果影響APSR寄存器的標(biāo)志位;.N|.W.N為16位編碼指令,.W為32位編碼指令,建議不選該項(xiàng)讓系統(tǒng)自動(dòng)選擇編碼類型;Rd目的寄存器;Rn第1個(gè)操作數(shù)的寄存器;Operand2第2個(gè)操作數(shù)。例:LDR.NR1,[R2,#0x10];16位指令,立即數(shù)范圍為0-124;讀R2+0x10存儲(chǔ)單元的內(nèi)容,存到R12、指令執(zhí)行條件碼使用指令條件碼可以實(shí)現(xiàn)高效的邏輯操作,提高代碼的執(zhí)行效率。不選為AL。條件碼標(biāo)志含義EQZ==1相等NEZ==0不相等,與EQ相反CS/HSC==1進(jìn)位(無(wú)符號(hào)數(shù)大于或等于)CC/LOC==0未進(jìn)位(無(wú)符號(hào)數(shù)小于)MIN==1負(fù)數(shù)PLN==0非負(fù)數(shù)VSV==1溢出VCV==0沒(méi)有溢出HIC==1&&Z==0無(wú)符號(hào)數(shù)大于LSC==0||Z==1無(wú)符號(hào)數(shù)小于或等于GEN==V有符號(hào)數(shù)大于或等于LTN!=V有符號(hào)數(shù)小于GTZ==0&&N==V有符號(hào)數(shù)大于LEZ==1||N!=V有符號(hào)數(shù)小于或等于AL—無(wú)條件執(zhí)行指令執(zhí)行條件碼在Cortex-M3中,只有分支轉(zhuǎn)移指令(B指令)才可以隨意使用條件碼。例:

BEQlabel;當(dāng)Z==1時(shí),程序轉(zhuǎn)移到label對(duì)于其它指令,只有在IF-THEN(IT)指令塊中(最多4條)才能加條件碼,且必須加條件碼。IT已經(jīng)帶了一個(gè)T,最多再帶3個(gè)T或E(與T相反的條件),T、E排列無(wú)順序。例:…CMPR0,R1;比較R0和R1的值,影響標(biāo)志位ITTEEGT;下帶4條指令,如R0>R1既GT成立,否則LE成立MOVGTR2,R0;GT成立,則R2=R0MOVGTR3,R1;GT成立,則R3=R1MOVLER2,R1;LE成立,則R2=R1MOVLER3,R0;LE成立,則R3=R0…3、影響標(biāo)志位的指令在Cortex-M3中,下列指令將會(huì)更新APSR中的標(biāo)志位:16位算術(shù)邏輯指令;32位帶S后綴的算術(shù)邏輯指令;比較指令(如CMP/CMN)和測(cè)試指令(如TST/TEQ);直接操作PSR/APSR指令(MRS讀和MSR寫指令)。4、第2個(gè)操作數(shù)的格式立即數(shù):#immN,3、5、8、12、16位長(zhǎng)度的常數(shù)表達(dá)式,如:

MOVWR1,#0x1234;操作數(shù)為#imm16,范圍為0~65535由一個(gè)8位數(shù)左移任意位而形成的常數(shù),如:0x3FC(0xFF<<2);重復(fù)半字形式0x00XY00XY、0xXY00XY00、0xXYXYXYXY;Rm寄存器方式:操作數(shù)即為寄存器的數(shù)值,例:SUBR1,R1,R2;R1減R2,保存到R1中寄存器移位方式:Rm,Shift,將寄存器的移位結(jié)果作為操作數(shù),例移位方法如下:ASR#n算術(shù)右移n位(1<<n<<32);例:ADDR1,R1,R1,LSL#3;邏輯左移R1=R1+R1×8第3章Thumb-2指令系統(tǒng)3.1Thumb-2指令集簡(jiǎn)介3.2Cortex-M3八種尋址方式3.3簡(jiǎn)單的Thumb匯編程序3.4Thumb-2指令基本格式3.5

Cortex-M3常用的Thumb-2指令集3.5

Cortex-M3常用的Thumb-2指令集1、數(shù)據(jù)傳送指令2、存儲(chǔ)器訪問(wèn)指令3、算術(shù)運(yùn)算指令4、邏輯運(yùn)算指令5、移位和循環(huán)指令6、符號(hào)擴(kuò)展指令7、字節(jié)調(diào)序指令8、位域處理指令9、子程序調(diào)用與無(wú)條件轉(zhuǎn)移指令10、飽和運(yùn)算指令1、數(shù)據(jù)傳送指令

指令功能描述MOV<Rd>,#<immed_8>將8位立即數(shù)傳到目標(biāo)寄存器MOV<Rd>,<Rn>將寄存器值傳給低目標(biāo)寄存器MVN<Rd>,<Rm>寄存器值取反后傳給目標(biāo)寄存器MOV{S}.W<Rd>,#<immed_12>將12位立即數(shù)傳送到寄存器中MOV{S}.W<Rd>,<Rm>{,<shift>}將移位后的寄存器值傳到寄存器MOVT.W<Rd>,#<immed_16>將16位立即數(shù)傳送到寄存器的高半字[31:16]MOVW.W<Rd>,#<immed_16>16位立即數(shù)傳到寄存器的低半字[15:0],將高半字[31:16]清零MRS<Rd>,<SReg>讀特殊功能寄存器SRegMSR<SReg>,<Rn>寫特殊功能寄存器SReg數(shù)據(jù)傳送指令例利用MOVW和MOVT指令的配合來(lái)完成32位立即數(shù)的傳輸:MOVWR1,#0x1234;R1=0x1234,此指令的立即數(shù)為16位MOVTR1,#0x5678;

此指令的立即數(shù)為16位兩條指令執(zhí)行后,R1=0x56781234,相當(dāng)于:R1=(R1&0x0000FFFF)|0x56780000為什么先用MOVW后用MOVW?顛倒順序結(jié)果如何?MRS/MSR用于特權(quán)級(jí)別條件下訪問(wèn)特殊功能寄存器:2、存儲(chǔ)器訪問(wèn)指令Cortex-M3處理器對(duì)存儲(chǔ)器的訪問(wèn)只能通過(guò)加載LDR和存儲(chǔ)STR指令來(lái)實(shí)現(xiàn)。LDR是把存儲(chǔ)器中的內(nèi)容加載到寄存器中,STR則是把寄存器內(nèi)容存儲(chǔ)至存儲(chǔ)器中,數(shù)據(jù)類型:字節(jié)、半字、字和雙字;LDM/STM多寄存器加載和存儲(chǔ)指令可以實(shí)現(xiàn)一條指令加載和存儲(chǔ)多個(gè)寄存器的內(nèi)容,且大大高數(shù)據(jù)操作效率。四種傳輸模式:IA:每次傳送后地址加4;DB:每次傳送前地址減4;FD:滿遞減堆棧;EA:空遞增堆棧。存儲(chǔ)器訪問(wèn)指令

指令格式功能說(shuō)明LDRRd,addressing加載存儲(chǔ)器字到Rd寄存器LDRHRd,addressing加載存儲(chǔ)器半字[15:0]到RdLDRBRd,addressing加載存儲(chǔ)器字節(jié)[7:0]到RdLDRSHRd,addressing加載有符號(hào)半字到Rd,并對(duì)其符號(hào)擴(kuò)展LDRSBRd,addressing加載有符號(hào)字節(jié)到Rd,并對(duì)其符號(hào)擴(kuò)展LDRDRd1,Rd2,addre從連續(xù)的地址空間加載雙字到2個(gè)寄存器LDM<IA/FD/DB/EA>Rn{!},reglist連續(xù)加載多個(gè)存儲(chǔ)器字到多個(gè)寄存器STRRd,addressing把一個(gè)寄存器按字存儲(chǔ)到存儲(chǔ)器STRHRd,addressing把一個(gè)寄存器按半字[15:0]存儲(chǔ)到存儲(chǔ)器STRBRd,addressing把一個(gè)寄存器按字節(jié)[7:0]存儲(chǔ)到存儲(chǔ)器STRDRd1,Rd2,addre存儲(chǔ)2個(gè)寄存器組成的雙字到連續(xù)的空間STM<IA/EA/DB/FD>Rn{!},reglist連續(xù)存儲(chǔ)多個(gè)寄存器字到存儲(chǔ)器PUSH{reglist[,LR]}將多個(gè)寄存器值壓棧POP{reglist[,PC]}從棧中彈出多個(gè)值到寄存器中存儲(chǔ)器訪問(wèn)指令STM/LDM與PUSH/POP的區(qū)別:STM/LDM能對(duì)任意的地址空間進(jìn)行操作,而PUSH/POP只能對(duì)堆棧空間進(jìn)行操作;STM/LDM的生長(zhǎng)方式可以支持向上和向下兩種方式,而PUSH/POP只能支持向下生長(zhǎng);當(dāng)兩對(duì)指令的操作數(shù)都為SP時(shí),STM/LDM可以選擇是否回寫修改SP值,而PUSH/POP指令會(huì)自動(dòng)修改SP值。STMDBSP!,{R4-R7,LR};現(xiàn)場(chǎng)保護(hù),R4-R7、LR入棧等價(jià)于:

PUSH{R4-R7,LR};LDMIASP!,{R4-R7,PC};恢復(fù)現(xiàn)場(chǎng),R4-R7、LR入棧等價(jià)于:

POP{R4-R7,PC};3、算術(shù)運(yùn)算指令A(yù)DDRd,Rn,Rm;Rd=Rn+Rm常規(guī)加法ADDRd,Rm;Rd+=RmADDRd,#imm;Rd+=immim8(16位指令)或im12(32位指令)ADCRd,Rn,Rm;Rd=Rn+Rm+C帶進(jìn)位的加法,Im8或im12ADCRd,Rm;Rd+=Rm+CADCRd,#imm;Rd+=imm+CSUBRd,Rn;Rd-=Rn常規(guī)減法SUBRd,Rn,#imm3;Rd=Rn-imm3SUBRd,#imm8;Rd-=imm8SUBRd,Rn,Rm;Rd=Rm-RmSBCRd,Rm;Rd-=Rm+C帶借位的減法SBC.WRd,Rn,#imm12;Rd=Rn-imm12-CSBC.WRd,Rn,Rm;Rd=Rn-Rm-C算術(shù)運(yùn)算指令除法中,為捕捉被零除的非法操作,可在NVIC的配置控制寄存器中置位DIVBZERO位。如出現(xiàn)了被零除的情況,將會(huì)引發(fā)一個(gè)用法fault異常。如沒(méi)有任何措施,Rd將在除數(shù)為零時(shí)被清零。RSB.WRd,Rn,#imm12;Rd=imm12-Rn反向減法RSB.WRd,Rn,Rm;Rd=Rm-RnMULRd,Rm;Rd*=Rm常規(guī)乘法MUL.WRd,Rn,Rm;Rd=Rn*RmMLARd,Rm,Rn,Ra;Rd=Ra+Rm*Rn乘加MLSRd,Rm,Rn,Ra;Rd=Ra-Rm*Rn乘減UDIVRd,Rn,Rm;Rd=Rn/Rm無(wú)符號(hào)除法硬件支持的除法,余數(shù)被丟棄SDIVRd,Rn,Rm;Rd=Rn/Rm帶符號(hào)除法SMULLRL,RH,Rm,Rn;[RH:RL]=Rm*Rn帶符號(hào)的64位乘法SMLALRL,RH,Rm,Rn;[RH:RL]+=Rm*RnUMULLRL,RH,Rm,Rn;[RH:RL]=Rm*Rn無(wú)符號(hào)的64位乘法SMLALRL,RH,Rm,Rn;[RH:RL]+=Rm*Rn算術(shù)運(yùn)算指令以加法為例說(shuō)明16bit、32bit的算術(shù)四則運(yùn)算指令:ADDR0,R1

;R0+=R1ADDR0,#0x12

;R0+=12ADD.WR0,R1,R2

;R0=R1+R2當(dāng)使用16位加法時(shí),會(huì)自動(dòng)更新APSR中的標(biāo)志位。在使用了“.W”顯式指定了32位指令后,就可以通過(guò)“S”后綴控制對(duì)APSR的更新:ADD.WR0,R1,R2

;不更新標(biāo)志位ADDS.WR0,R1,R2

;更新標(biāo)志位4、邏輯運(yùn)算指令A(yù)NDRd,Rn

;Rd&=RnAND.WRd,Rn,#imm12

;Rd=Rn&imm12AND.WRd,Rm,Rn

;Rd=Rm&Rn按位與ORRRd,Rn

;Rd|=RnORR.WRd,Rn,#imm12

;Rd=Rn|imm12ORR.WRd,Rm,Rn

;Rd=Rm|Rn按位或BICRd,Rn

;Rd&=~RnBIC.WRd,Rn,#imm12

;Rd=Rn&~imm12BIC.WRd,Rm,Rn

;Rd=Rm&~Rn

位清零Rn與operand2的反碼按位邏輯與ORN.WRd,Rn,#imm12

;Rd=Rn|~imm12ORN.WRd,Rm,Rn

;Rd=Rm|~Rn

按位或反碼EORRd,Rn

;Rd^=RnEOR.WRd,Rn,#imm12

;Rd=Rn^imm12EOR.WRd,Rm,Rn

;Rd=Rm^Rn(按位)異或,異或總是按位的5、移位和循環(huán)指令LSLRd,Rn,#imm5

;Rd=Rn<<imm5LSLRd,Rn

;Rd<<=RnLSL.WRd,Rm,Rn

;Rd=Rm<<Rn邏輯左移LSRRd,Rn,#imm5

;Rd=Rn>>imm5LSRRd,Rn

;Rd>>=RnLSR.WRd,Rm,Rn

;Rd=Rm>>Rn邏輯右移ASRRd,Rn,#imm5

;Rd=Rn·>>imm5ASRRd,Rn

;Rd·>>=RnASR.WRd,Rm,Rn

;Rd=Rm·>>Rn算術(shù)右移RORRd,Rn

;Rd>>=RnROR.WRd,Rm,Rn

;Rd=Rm>>Rn循環(huán)右移RRX.WRd,Rn

;Rd=(Rn>>1)+(C<<31)

帶進(jìn)位的右移一位如果是16位Thumb-2指令,則總是更新C的。如果在指令上加上“S”后綴,會(huì)更新進(jìn)位位C。6、符號(hào)擴(kuò)展指令二進(jìn)制補(bǔ)碼表示法中,最高位是符號(hào)位。把一個(gè)8位或16位負(fù)數(shù)擴(kuò)展成32位時(shí):對(duì)于負(fù)數(shù),必須把所有高位全填1,其數(shù)值不變;至于正數(shù)或無(wú)符號(hào)數(shù),則只需簡(jiǎn)單地把高位清0。指令功能描述SXTB

Rd,Rm

;Rd=Rm帶符號(hào)擴(kuò)展

把帶符號(hào)字節(jié)整數(shù)擴(kuò)展到

32位SXTH

Rd,Rm

;Rd=Rm帶符號(hào)擴(kuò)展把帶符號(hào)半字整數(shù)擴(kuò)展到

32位7、字節(jié)調(diào)序指令REV.WRd,Rn在字中調(diào)整字節(jié)序REV16.WRd,Rn在高低半字中調(diào)整字節(jié)序REVSH.W在低半字中調(diào)整字節(jié)序,并帶符號(hào)擴(kuò)展例:R0=0x12345678REVR1,R0;REVHR2,R0;REV16R3,R0;

則R1=0x78563412,R2=0x12347856,R3=0x34127856。例:R0=0x33448899

REVSHR1,R0;

后R1=0xFFFF9988。8、位域處理指令例1:

LDRR0,=0x1234FFFF;

BFCR0,#4,#10;結(jié)果:R0=0x1234C00F。指令功能描述BFC.WRd,#<lsb>,#<width>位域清零:第lsb位開始的width寬度BFI.WRd,Rn,#<lsb>,#<width>將寄存器的位域插入另一個(gè)寄存器中CLZ.WRd,Rn計(jì)算前導(dǎo)0的數(shù)目RBIT.WRd,Rn按位旋轉(zhuǎn)180度SBFX.WRd,Rn,#<lsb>,#<width>拷貝位域,并帶符號(hào)擴(kuò)展到32位UBFX.WRd,Rn,#<lsb>,#<width>拷貝位域,并無(wú)符號(hào)擴(kuò)展到32位例2:LDRR0,=0x12345678

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論