第3章 ARM9指令系統(tǒng)_第1頁(yè)
第3章 ARM9指令系統(tǒng)_第2頁(yè)
第3章 ARM9指令系統(tǒng)_第3頁(yè)
第3章 ARM9指令系統(tǒng)_第4頁(yè)
第3章 ARM9指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩159頁(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)介

1、金城學(xué)院自動(dòng)化系金城學(xué)院自動(dòng)化系第三章第三章 ARM9 ARM9指令系統(tǒng)指令系統(tǒng)vARM9指令集,包括指令集,包括ARM指令集指令集Thumb指令集。指令集。vARM微處理器的指令集是微處理器的指令集是加載加載/存儲(chǔ)型存儲(chǔ)型的的. 即指令集僅能處理寄存器中的數(shù)據(jù),處理結(jié)即指令集僅能處理寄存器中的數(shù)據(jù),處理結(jié)果仍要放回寄存器中,而對(duì)果仍要放回寄存器中,而對(duì)系統(tǒng)存儲(chǔ)器的訪問(wèn)則系統(tǒng)存儲(chǔ)器的訪問(wèn)則需要通過(guò)專門的加載需要通過(guò)專門的加載/存儲(chǔ)指令來(lái)完成存儲(chǔ)指令來(lái)完成。3.1 ARM3.1 ARM指令集指令集3.1 ARM3.1 ARM指令集指令集3.1 ARM3.1 ARM指令集指令集4vARM指令的助記

2、符指令的助記符 ARM指令在匯編程序中用助記符表示,一般指令在匯編程序中用助記符表示,一般ARM指令的助指令的助記符格式為:記符格式為: S , , 例:ADDEQS R1,R2,#5操作碼操作碼決定指令執(zhí)行的條件域決定指令執(zhí)行的條件域決定指令執(zhí)行是否影響決定指令執(zhí)行是否影響CPSRCPSR寄存器的值寄存器的值第一個(gè)操作數(shù),為寄存器第一個(gè)操作數(shù),為寄存器目的寄存器目的寄存器第二個(gè)操作數(shù)第二個(gè)操作數(shù)其中操作碼其中操作碼opcodeopcode為為ADDADD,條件域,條件域condcond為為EQEQ,表示該指令只有當(dāng),表示該指令只有當(dāng)CPSRCPSR中中Z Z標(biāo)標(biāo)志置位時(shí)才執(zhí)行,目的寄存器志置

3、位時(shí)才執(zhí)行,目的寄存器RdRd為為R1,R1,第一個(gè)操作數(shù)寄存器第一個(gè)操作數(shù)寄存器RnRn為為R2R2,第二,第二個(gè)操作數(shù)個(gè)操作數(shù)op2op2為為5 5;執(zhí)行的結(jié)果為;執(zhí)行的結(jié)果為R1=R2+5R1=R2+5,S S表示將影響表示將影響CPSRCPSR寄存器的值。寄存器的值。3.1 ARM3.1 ARM指令集指令集v實(shí)際指令語(yǔ)法格式為:實(shí)際指令語(yǔ)法格式為: ADDEQS R0,R1,R2; 其中操作碼其中操作碼opcode為為ADD,條件域,條件域cond為為EQ,表示,表示該指令只有當(dāng)該指令只有當(dāng)CPSR中中Z標(biāo)志置位時(shí)才執(zhí)行,目的寄存標(biāo)志置位時(shí)才執(zhí)行,目的寄存器器Rd為為R0,第一個(gè)操作數(shù)

4、寄存器第一個(gè)操作數(shù)寄存器Rn為為R1,第二個(gè)操作,第二個(gè)操作數(shù)數(shù)op2為為R12;執(zhí)行的結(jié)果為;執(zhí)行的結(jié)果為R0=R1+R2,S表示將影表示將影響響CPSR寄存器的值。寄存器的值。v該指令的編碼格式為:該指令的編碼格式為: 3128272524212019161512110cond opcodeSRnRdop200000010100100010000000000000010條件域條件域v 當(dāng)處理器工作在當(dāng)處理器工作在ARM狀態(tài)時(shí),幾乎所有的指令均根據(jù)狀態(tài)時(shí),幾乎所有的指令均根據(jù)CPSR中條件標(biāo)志位的狀態(tài)和指令的條件域有條件的執(zhí)中條件標(biāo)志位的狀態(tài)和指令的條件域有條件的執(zhí)行。當(dāng)指令的執(zhí)行條件滿足時(shí)

5、,指令被執(zhí)行,否則指令行。當(dāng)指令的執(zhí)行條件滿足時(shí),指令被執(zhí)行,否則指令被忽略。被忽略。v 每一條每一條ARM指令包含指令包含4位的條件碼位的條件碼,位于指令的最高,位于指令的最高4位位31:28。條件碼共有。條件碼共有16種,每種條件碼可用兩個(gè)字符種,每種條件碼可用兩個(gè)字符表示,這兩個(gè)字符可以添加在指令助記符的后面和指令表示,這兩個(gè)字符可以添加在指令助記符的后面和指令同時(shí)使用。同時(shí)使用。例如:例如:跳轉(zhuǎn)指令跳轉(zhuǎn)指令B可以加上后綴可以加上后綴EQ變?yōu)樽優(yōu)锽EQ表示表示“相等則相等則跳轉(zhuǎn)跳轉(zhuǎn)”,即當(dāng),即當(dāng)CPSR中的中的Z標(biāo)志置位時(shí)發(fā)生跳轉(zhuǎn)。標(biāo)志置位時(shí)發(fā)生跳轉(zhuǎn)。v 在在16種條件標(biāo)志碼中,只有種條

6、件標(biāo)志碼中,只有15種可以使用。種可以使用。條件碼條件碼條件碼條件碼助記符后綴助記符后綴標(biāo)標(biāo) 志志含含 義義0000EQZ置位置位相等相等0001NEZ清零清零不相等不相等0010CSC置位置位無(wú)符號(hào)數(shù)大于或等于無(wú)符號(hào)數(shù)大于或等于0011CCC清零清零無(wú)符號(hào)數(shù)小于無(wú)符號(hào)數(shù)小于0100MIN置位置位負(fù)數(shù)負(fù)數(shù)0101PLN清零清零正數(shù)或零正數(shù)或零0110VSV置位置位溢出溢出0111VCV清零清零未溢出未溢出1000HIC置位置位Z清零清零無(wú)符號(hào)數(shù)大于無(wú)符號(hào)數(shù)大于1001LSC清零清零Z置位置位無(wú)符號(hào)數(shù)小于或等于無(wú)符號(hào)數(shù)小于或等于1010GEN等于等于V帶符號(hào)數(shù)大于或等于帶符號(hào)數(shù)大于或等于1011

7、LTN不等于不等于V帶符號(hào)數(shù)小于帶符號(hào)數(shù)小于1100GTZ清零且(清零且(N等于等于V)帶符號(hào)數(shù)大于帶符號(hào)數(shù)大于1101LEZ置位或(置位或(N不等于不等于V)帶符號(hào)數(shù)小于或等于帶符號(hào)數(shù)小于或等于1110AL忽略忽略無(wú)條件執(zhí)行無(wú)條件執(zhí)行C代碼:代碼:if(a b) a+;else b+;對(duì)應(yīng)的匯編代碼:對(duì)應(yīng)的匯編代碼:CMP R0,R1;R0與與R1比較比較ADDHI R0,R0,#1;若若R0R1,則,則R0=R0+1ADDLS R1,R1,#1;若若R0R1,則,則R1=R1+1示例:示例:條件碼條件碼3.1.1 3.1.1 寄存器裝載及存儲(chǔ)指令寄存器裝載及存儲(chǔ)指令9v Load/Stor

8、e指令用于寄存器和內(nèi)存間數(shù)據(jù)的傳送指令用于寄存器和內(nèi)存間數(shù)據(jù)的傳送.v Load用于把內(nèi)存中的數(shù)據(jù)裝載到寄存器中用于把內(nèi)存中的數(shù)據(jù)裝載到寄存器中v Store則用于把寄存器中的數(shù)據(jù)存入內(nèi)存。則用于把寄存器中的數(shù)據(jù)存入內(nèi)存。 Load/Store指令分為三類:指令分為三類:(1)單一數(shù)據(jù)傳送指令()單一數(shù)據(jù)傳送指令(LDR和和STR等)等)(2)多數(shù)據(jù)傳送指令()多數(shù)據(jù)傳送指令(LDM和和STM)(3)數(shù)據(jù)交換指令()數(shù)據(jù)交換指令(SWP和和SWPB) 存儲(chǔ)器存儲(chǔ)器寄存器(寄存器(R0-R15R0-R15)ARMARM微處理器微處理器外圍模塊或芯片外圍模塊或芯片存儲(chǔ)存儲(chǔ)加載加載1 1、單一數(shù)據(jù)加

9、載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令vLDRLDR和和STR STR 字:字:3232位字加載寄存器(位字加載寄存器(LDRLDR)和存儲(chǔ)和存儲(chǔ)寄存器(寄存器(STRSTR)指令。指令。vLDRLDR和和STRSTR指令都有以下指令都有以下4 4種句法形式:種句法形式: opcondopcond Rd,RnRd,Rn 零偏移零偏移 opcondopcond Rd,Rn,FlexoffsetRd,Rn,Flexoffset! ! 前索引偏移前索引偏移 opcondopcond Rd,labelRd,label 程序相對(duì)偏移程序相對(duì)偏移 opcondopcond Rd,Rn,FlexoffsetRd,

10、Rn,Flexoffset 后索引偏移后索引偏移vlabel label 程序相對(duì)偏移表達(dá)式。偏移量必須是在當(dāng)前程序相對(duì)偏移表達(dá)式。偏移量必須是在當(dāng)前指令的上下指令的上下4 4KBKB范圍內(nèi)。范圍內(nèi)。v! ! 可選后綴。若有可選后綴。若有“!”,則將包含偏移量的地,則將包含偏移量的地址寫(xiě)回到址寫(xiě)回到RnRn,若若RnRn是是R15R15,則不能使用該后綴。則不能使用該后綴。后面所用時(shí)意義相同。后面所用時(shí)意義相同。v 表示括號(hào)內(nèi)的內(nèi)容是可選的。后面所用時(shí)意義表示括號(hào)內(nèi)的內(nèi)容是可選的。后面所用時(shí)意義相同。相同。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令v FlexoffsetFlexoff

11、set 加到加到RnRn上的靈活偏移量。該偏移量可以是下面上的靈活偏移量。該偏移量可以是下面兩種形式之一:兩種形式之一: # #exprexpr 是取值范圍為是取值范圍為-4095+4095-4095+4095的整數(shù),經(jīng)常是常量的整數(shù),經(jīng)常是常量或常量表達(dá)式?;虺A勘磉_(dá)式。 - -Rm,shiftRm,shift RmRm是內(nèi)含偏移量的寄存器,它不能是是內(nèi)含偏移量的寄存器,它不能是R15R15。shiftshift是是RmRm的可選移位方法,可以是下列形式中的一種。的可選移位方法,可以是下列形式中的一種。ASR n ASR n 算術(shù)右移算術(shù)右移n n位(位(11n32n32););LSL n

12、LSL n 邏輯左移邏輯左移n n位(位(00n31n31););LSR n LSR n 邏輯右移邏輯右移n n位(位(11n32n32););ROR n ROR n 循環(huán)右移循環(huán)右移n n位(位(11n31n31););RRX RRX 循環(huán)右移循環(huán)右移1 1位,帶擴(kuò)展。位,帶擴(kuò)展。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令(1)LDR指令指令格式為:格式為:LDR條件條件 目的寄存器,目的寄存器,LDR指令是指令是字加載指令字加載指令,用于從存儲(chǔ)器中將一個(gè),用于從存儲(chǔ)器中將一個(gè)32位的字?jǐn)?shù)據(jù)傳送到目的寄存器中。位的字?jǐn)?shù)據(jù)傳送到目的寄存器中。0 x55R3R4 0 x400000000

13、 x123456780 x400000000 x40000000存儲(chǔ)器存儲(chǔ)器地址地址應(yīng)用示例:應(yīng)用示例:LDR R3,R4;將將R4指向地址的字?jǐn)?shù)據(jù)存入指向地址的字?jǐn)?shù)據(jù)存入R30 x12345678示例示例示例示例v 指令示例:指令示例:LDR R3,R4 ;將存儲(chǔ)器地址為;將存儲(chǔ)器地址為R4的字?jǐn)?shù)據(jù)讀入寄存器的字?jǐn)?shù)據(jù)讀入寄存器R3。LDR R3,R1,R2 ;將存儲(chǔ)器地址為;將存儲(chǔ)器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器的字?jǐn)?shù)據(jù)讀入寄存器R3。LDR R3,R1,8 ;將存儲(chǔ)器地址為;將存儲(chǔ)器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器的字?jǐn)?shù)據(jù)讀入寄存器R3。LDR R3,R1,R2!;將存儲(chǔ)器地址為;將存

14、儲(chǔ)器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器的字?jǐn)?shù)據(jù)讀入寄存器R3,并將新地址,并將新地址R1R2寫(xiě)入寫(xiě)入R1。LDR R3,R1,8 ??;將存儲(chǔ)器地址為;將存儲(chǔ)器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器的字?jǐn)?shù)據(jù)讀入寄存器R3,并將新地址,并將新地址R18寫(xiě)入寫(xiě)入R1。示例示例LDR R3,R1,R2;將存儲(chǔ)器地址為;將存儲(chǔ)器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器的字?jǐn)?shù)據(jù)讀入寄存器R3,并,并將新地址將新地址R1R2寫(xiě)入寫(xiě)入R1。LDR R3,R1,R2,LSL3!;將存儲(chǔ)器地址為;將存儲(chǔ)器地址為R1R28的字?jǐn)?shù)據(jù)讀入寄存的字?jǐn)?shù)據(jù)讀入寄存器器R3,并將新地址,并將新地址R1R28寫(xiě)入寫(xiě)入R1。LDR R3,R1,R2

15、,LSL3;將存儲(chǔ)器地址為;將存儲(chǔ)器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器的字?jǐn)?shù)據(jù)讀入寄存器R3,并,并將新地址將新地址R1R28寫(xiě)入寫(xiě)入R1。注:注:R15不可以作為偏移寄存器使用。不可以作為偏移寄存器使用。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令(2)STR指令指令格式為:格式為:STR條件條件 源寄存器,源寄存器, STR指令是指令是字存儲(chǔ)指令字存儲(chǔ)指令,用于從源寄存器,用于從源寄存器中將一個(gè)中將一個(gè)32位的字?jǐn)?shù)據(jù)傳送到存儲(chǔ)器中。使用方位的字?jǐn)?shù)據(jù)傳送到存儲(chǔ)器中。使用方式可參考指令式可參考指令LDR。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令指令示例:指令示例:STRR3,R1,8

16、;將;將R3中的字?jǐn)?shù)據(jù)寫(xiě)入以中的字?jǐn)?shù)據(jù)寫(xiě)入以R1為地址的存儲(chǔ)器中為地址的存儲(chǔ)器中,并將新地址,并將新地址R18寫(xiě)入寫(xiě)入R1。STRR3,R1,8;將;將R3中的字?jǐn)?shù)據(jù)寫(xiě)入以中的字?jǐn)?shù)據(jù)寫(xiě)入以R18為地址的存儲(chǔ)為地址的存儲(chǔ)器中。器中。8B/16B/8B/16B/雙字的操作雙字的操作v單一數(shù)據(jù)加載單一數(shù)據(jù)加載/ /存儲(chǔ)指令還可以完成帶符號(hào)和無(wú)符存儲(chǔ)指令還可以完成帶符號(hào)和無(wú)符號(hào)的號(hào)的8 8位字節(jié)位字節(jié), ,帶符號(hào)和無(wú)符號(hào)的帶符號(hào)和無(wú)符號(hào)的1616位半字以及雙位半字以及雙字操作。字操作。v對(duì)于帶符號(hào)加載時(shí)是帶符號(hào)擴(kuò)展到對(duì)于帶符號(hào)加載時(shí)是帶符號(hào)擴(kuò)展到3232位,無(wú)符號(hào)位,無(wú)符號(hào)加載時(shí)是用加載時(shí)是用“0 0

17、” 擴(kuò)展到擴(kuò)展到3232位。位。v該組該組LDRLDR和和STRSTR指令也都有以下指令也都有以下4 4種句法形式:種句法形式: Op Op condcond type type RdRd,RnRn 零偏移零偏移 op op condcond type type RdRd,RnRn,offsetoffset!前索引偏移前索引偏移 Op Op condcond type type RdRd,labellabel 程序相對(duì)偏移程序相對(duì)偏移 Op Op condcond type type RdRd,RnRn,offsetoffset 后索引偏移后索引偏移其中:其中:type type 必須是下面所

18、列的形式之一:必須是下面所列的形式之一:vH H 無(wú)符號(hào)半字;無(wú)符號(hào)半字;vSH SH 帶符號(hào)半字(僅對(duì)帶符號(hào)半字(僅對(duì)LDRLDR););vB B 無(wú)符號(hào)字節(jié);無(wú)符號(hào)字節(jié);vSB SB 帶符號(hào)字節(jié)(僅對(duì)帶符號(hào)字節(jié)(僅對(duì)LDRLDR);vD D 雙字;雙字;例如例如v LDRH R1LDRH R1,R0R0,#22 #22 ;R1R0+22R1R0+22,加載加載1616位半字,位半字,0 0擴(kuò)展到擴(kuò)展到3232位位v LDREQSH R11LDREQSH R11,R6 R6 ;R11R6R11R6,加載加載1616位半字,帶符號(hào)擴(kuò)展到位半字,帶符號(hào)擴(kuò)展到3232位位v STRH R4STRH

19、 R4,R0R0,R1R1! ;R4R0+R1R4R0+R1,存儲(chǔ)最低的有效半到存儲(chǔ)最低的有效半到R0+R1R0+R1所指的地址開(kāi)所指的地址開(kāi)始的兩個(gè)字節(jié)處,地址寫(xiě)回始的兩個(gè)字節(jié)處,地址寫(xiě)回R0R0v LDRD R6LDRD R6,R11 R11 ;R6R11R6R11,R7R11+4R7R11+4v STRD R4STRD R4,R9R9,#24 #24 ;R4R9+24R4R9+24,R5R9+28R5R9+281 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令(3)LDRB指令指令 格式為:格式為:LDR條件條件B 目的寄存器,目的寄存器, LDRB指令是指令是字節(jié)加載指令字節(jié)加載指令,

20、用于從存儲(chǔ)器,用于從存儲(chǔ)器中將一個(gè)中將一個(gè)8位的字節(jié)數(shù)據(jù)傳送到目的寄存器中,位的字節(jié)數(shù)據(jù)傳送到目的寄存器中,同時(shí)將寄存器的高同時(shí)將寄存器的高24位清零。位清零。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令指令示例:指令示例:LDRB R3,R1 ;將存儲(chǔ)器地址為;將存儲(chǔ)器地址為R1的字節(jié)數(shù)據(jù)讀入寄存器的字節(jié)數(shù)據(jù)讀入寄存器R0,并將并將R3的高的高24位清零。位清零。LDRB R3,R1,8 ;將存儲(chǔ)器地址為;將存儲(chǔ)器地址為R18的字節(jié)數(shù)據(jù)讀入寄存器的字節(jié)數(shù)據(jù)讀入寄存器R3,并將,并將R3的高的高24位清零。位清零。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令(4)LDRH指令指令格

21、式為:格式為:LDR條件條件H 目的寄存器,目的寄存器,LDRH指令是指令是無(wú)符號(hào)半字加載指令無(wú)符號(hào)半字加載指令,用于從,用于從存儲(chǔ)器中將一個(gè)存儲(chǔ)器中將一個(gè)16位的半字?jǐn)?shù)據(jù)傳送到目的寄存位的半字?jǐn)?shù)據(jù)傳送到目的寄存器中,同時(shí)將寄存器的高器中,同時(shí)將寄存器的高16位清零。位清零。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令指令示例:指令示例:LDRH R3,R1;將存儲(chǔ)器地址為;將存儲(chǔ)器地址為R1的半字?jǐn)?shù)據(jù)讀入寄存器的半字?jǐn)?shù)據(jù)讀入寄存器R3,并將并將R3的高的高16位清零。位清零。LDRH R3,R1,8 ;將存儲(chǔ)器地址為;將存儲(chǔ)器地址為R18的半字?jǐn)?shù)據(jù)讀入寄存器的半字?jǐn)?shù)據(jù)讀入寄存器R3,并

22、將,并將R3的高的高16位清零。位清零。LDRH R3,R1,R2 ;將存儲(chǔ)器地址為;將存儲(chǔ)器地址為R1R2的半字?jǐn)?shù)據(jù)讀入寄存的半字?jǐn)?shù)據(jù)讀入寄存器器R3,并將,并將R3的高的高16位清零。位清零。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令(5) LDRSB 有符號(hào)的字節(jié)數(shù)據(jù)加載指令有符號(hào)的字節(jié)數(shù)據(jù)加載指令v格式:格式:LDRSB ,v功能:功能:同同LDRB指令,但該指令將寄存器指令,但該指令將寄存器Rd的高的高24位設(shè)置成所裝載的字節(jié)數(shù)據(jù)符號(hào)位的值。位設(shè)置成所裝載的字節(jié)數(shù)據(jù)符號(hào)位的值。v例如:例如:vLDRSB R0,R1v;將內(nèi)存中起始地址為將內(nèi)存中起始地址為R1的一個(gè)字節(jié)數(shù)據(jù)裝入

23、的一個(gè)字節(jié)數(shù)據(jù)裝入R0中中,R0的高的高24位設(shè)置成該字節(jié)數(shù)據(jù)的符號(hào)位位設(shè)置成該字節(jié)數(shù)據(jù)的符號(hào)位 1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令(6) LDRSH 有符號(hào)的半字?jǐn)?shù)據(jù)加載指令有符號(hào)的半字?jǐn)?shù)據(jù)加載指令v格式:格式:LDRSH ,v功能:功能:同同LDRH指令,但該指令將寄存器指令,但該指令將寄存器Rd的高的高16位設(shè)置成所裝載的半字?jǐn)?shù)據(jù)符號(hào)位的值。位設(shè)置成所裝載的半字?jǐn)?shù)據(jù)符號(hào)位的值。v例如:例如:vLDRSH R0,R1v;將內(nèi)存中起始地址為將內(nèi)存中起始地址為R1的一個(gè)的一個(gè)16位半字?jǐn)?shù)據(jù)裝入位半字?jǐn)?shù)據(jù)裝入R0中,中,R0的高的高16位設(shè)置成該半字?jǐn)?shù)據(jù)的符號(hào)位位設(shè)置成該半字?jǐn)?shù)據(jù)

24、的符號(hào)位 1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令(7)STRB指令指令格式為:格式為: STR條件條件B 源寄存器,源寄存器, STRB指令是指令是無(wú)符號(hào)字節(jié)存儲(chǔ)指令無(wú)符號(hào)字節(jié)存儲(chǔ)指令,用于從,用于從源寄存器中將一個(gè)源寄存器中將一個(gè)8位的字節(jié)數(shù)據(jù)傳送到存儲(chǔ)器位的字節(jié)數(shù)據(jù)傳送到存儲(chǔ)器中。該字節(jié)數(shù)據(jù)為源寄存器中的低中。該字節(jié)數(shù)據(jù)為源寄存器中的低8位。位。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令指令示例:指令示例:STRB R3,R1 ;將寄存器;將寄存器R3中的字節(jié)數(shù)據(jù)寫(xiě)入以中的字節(jié)數(shù)據(jù)寫(xiě)入以R1為地址的存為地址的存儲(chǔ)器中。儲(chǔ)器中。STRB R3,R1,8;將寄存器;將寄存器

25、R3中的字節(jié)數(shù)據(jù)寫(xiě)入以中的字節(jié)數(shù)據(jù)寫(xiě)入以R18為地址為地址的存儲(chǔ)器中。的存儲(chǔ)器中。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令(8)STRH指令指令格式為:格式為: STR條件條件H 源寄存器,源寄存器, STRH指令是指令是無(wú)符號(hào)半字存儲(chǔ)指令無(wú)符號(hào)半字存儲(chǔ)指令,用于從,用于從源寄存器中將一個(gè)源寄存器中將一個(gè)16位的半字?jǐn)?shù)據(jù)傳送到存儲(chǔ)位的半字?jǐn)?shù)據(jù)傳送到存儲(chǔ)器中。該半字?jǐn)?shù)據(jù)為源寄存器中的低器中。該半字?jǐn)?shù)據(jù)為源寄存器中的低16位。位。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令指令示例:指令示例:STRH R3,R1 ;將寄存器;將寄存器R3中的半字?jǐn)?shù)據(jù)寫(xiě)入以中的半字?jǐn)?shù)據(jù)寫(xiě)入以R1為地

26、址的存為地址的存儲(chǔ)器中。儲(chǔ)器中。STRH R3,R1,8 ;將寄存器;將寄存器R3中的半字?jǐn)?shù)據(jù)寫(xiě)入以中的半字?jǐn)?shù)據(jù)寫(xiě)入以R18為地址為地址的存儲(chǔ)器中。的存儲(chǔ)器中。2.2.多數(shù)據(jù)加載多數(shù)據(jù)加載/ /存儲(chǔ)指令(存儲(chǔ)指令( LDM LDM和和STM STM ) ARM微處理器所支持微處理器所支持批量數(shù)據(jù)加載批量數(shù)據(jù)加載/存儲(chǔ)指令存儲(chǔ)指令可以一次在可以一次在一片連續(xù)的一片連續(xù)的存儲(chǔ)器單元和存儲(chǔ)器單元和多個(gè)寄存器多個(gè)寄存器之之間傳送數(shù)據(jù)。間傳送數(shù)據(jù)。 批量加載指令用于將一片連續(xù)的存儲(chǔ)器中的數(shù)批量加載指令用于將一片連續(xù)的存儲(chǔ)器中的數(shù)據(jù)傳送到多個(gè)寄存器,批量數(shù)據(jù)存儲(chǔ)指令則完成相據(jù)傳送到多個(gè)寄存器,批量數(shù)據(jù)存儲(chǔ)

27、指令則完成相反的操作。反的操作。2.2.多數(shù)據(jù)加載多數(shù)據(jù)加載/ /存儲(chǔ)指令(存儲(chǔ)指令( LDM LDM和和STM STM )常用的加載存儲(chǔ)指令如下:常用的加載存儲(chǔ)指令如下:LDM(或(或STM)指令)指令格式為:格式為:LDM(或(或STM)條件條件類型類型 基址寄存器基址寄存器!,寄存器列表,寄存器列表 LDM(或(或STM)指令用于從由基址寄存器所指示的)指令用于從由基址寄存器所指示的一片連續(xù)存儲(chǔ)器到寄存器列表所指示的多個(gè)寄存器之間傳一片連續(xù)存儲(chǔ)器到寄存器列表所指示的多個(gè)寄存器之間傳送數(shù)據(jù),該指令的常見(jiàn)用途是將多個(gè)寄存器的內(nèi)容入?;蛩蛿?shù)據(jù),該指令的常見(jiàn)用途是將多個(gè)寄存器的內(nèi)容入棧或出棧。出

28、棧。v !為可選后綴,若選用該后綴,則當(dāng)數(shù)據(jù)傳送完畢之后,將為可選后綴,若選用該后綴,則當(dāng)數(shù)據(jù)傳送完畢之后,將最后的地址寫(xiě)入基址寄存器,否則基址寄存器的內(nèi)容不改變。最后的地址寫(xiě)入基址寄存器,否則基址寄存器的內(nèi)容不改變。v為可選后綴,這是一個(gè)只是在數(shù)據(jù)塊傳送中使用的后綴,為可選后綴,這是一個(gè)只是在數(shù)據(jù)塊傳送中使用的后綴,不允許在用戶模式或系統(tǒng)模式下使用。不允許在用戶模式或系統(tǒng)模式下使用。 當(dāng)指令為當(dāng)指令為L(zhǎng)DM且寄存器列表中包含且寄存器列表中包含R15,選用該后綴時(shí)表示:除,選用該后綴時(shí)表示:除了正常的數(shù)據(jù)傳送之外,還將了正常的數(shù)據(jù)傳送之外,還將SPSR復(fù)制到復(fù)制到CPSR。 同時(shí),該后綴還表示

29、傳入或傳出的是用戶模式下的寄存器,而不同時(shí),該后綴還表示傳入或傳出的是用戶模式下的寄存器,而不是當(dāng)前模式下的寄存器。是當(dāng)前模式下的寄存器。v 基址寄存器不允許為基址寄存器不允許為R15。v 寄存器列表可以為寄存器列表可以為R0R15的任意組合,若使用連續(xù)的的任意組合,若使用連續(xù)的寄存器時(shí),可以使用寄存器時(shí),可以使用“-”表示省略。表示省略。2.2.多數(shù)據(jù)加載多數(shù)據(jù)加載/ /存儲(chǔ)指令(存儲(chǔ)指令( LDM LDM和和STM STM )其中,其中,類型類型為以下幾種情況:為以下幾種情況:v IA 每次傳送后地址加每次傳送后地址加1,遞增方式;,遞增方式;v IB 每次傳送前地址加每次傳送前地址加1,

30、遞增方式;,遞增方式;v DA 每次傳送后地址減每次傳送后地址減1,遞減方式;,遞減方式;v DB 每次傳送前地址減每次傳送前地址減1,遞減方式;,遞減方式;v FD 滿遞減堆棧;滿遞減堆棧;v ED 空遞減堆棧;空遞減堆棧;v FA 滿遞增堆棧;滿遞增堆棧;v EA 空遞增堆棧;空遞增堆棧;3.2.3 ARM 存儲(chǔ)器訪問(wèn)指令存儲(chǔ)器訪問(wèn)指令STMIBSTMIB R0R0!,R1,R2,R3R1,R2,R3指令執(zhí)行前指令執(zhí)行前指令執(zhí)行后指令執(zhí)行后R0R0R3R3R2R2R1R1R0R0STMIA R0!,R1,R2,R3STMIA R0!,R1,R2,R3指令執(zhí)行前指令執(zhí)行前指令執(zhí)行后指令執(zhí)行后

31、R0R0R3R3R2R2R1R1R0R0地址增地址增STMDA R0!,R1,R2,R3STMDA R0!,R1,R2,R3指令執(zhí)行前指令執(zhí)行前指令執(zhí)行后指令執(zhí)行后R0R0R3R3R2R2R1R1R0R0STMDB R0!,R1,R2,R3STMDB R0!,R1,R2,R3指令執(zhí)行前指令執(zhí)行前指令執(zhí)行后指令執(zhí)行后R0R0R3R3R2R2R1R1R0R0地址減地址減2.2.多數(shù)據(jù)加載多數(shù)據(jù)加載/ /存儲(chǔ)指令(存儲(chǔ)指令( LDM LDM和和STM STM )v 例如例如 LDMIA/IB/DA/DB R13!,R0-R1,R3;v 各指令執(zhí)行完后,結(jié)果如圖所示。各指令執(zhí)行完后,結(jié)果如圖所示。 I

32、B DA DB2.2.多數(shù)據(jù)加載多數(shù)據(jù)加載/ /存儲(chǔ)指令(存儲(chǔ)指令( LDM LDM和和STM STM )v FD、ED、FA和和EA指定是滿棧還是空棧,是升序棧還是降序指定是滿棧還是空棧,是升序棧還是降序棧,用于堆棧尋址。棧,用于堆棧尋址。v 一個(gè)滿棧的棧指針指向上次寫(xiě)的最后一個(gè)數(shù)據(jù)單元一個(gè)滿棧的棧指針指向上次寫(xiě)的最后一個(gè)數(shù)據(jù)單元.v 空棧的棧指針指向第一個(gè)空閑單元。空棧的棧指針指向第一個(gè)空閑單元。v 一個(gè)降序棧是在內(nèi)存中反向增長(zhǎng)而升序棧在內(nèi)存中正向增長(zhǎng)。一個(gè)降序棧是在內(nèi)存中反向增長(zhǎng)而升序棧在內(nèi)存中正向增長(zhǎng)。2.2.多數(shù)據(jù)加載多數(shù)據(jù)加載/ /存儲(chǔ)指令(存儲(chǔ)指令( LDM LDM和和STM S

33、TM )指令示例:指令示例:STMFD R13!,R0,R4-R12,LR;將寄存器列表中的寄存器(;將寄存器列表中的寄存器(R0,R4到到R12,LR)存入)存入堆棧。堆棧。.LDMFD R13!,R0,R4-R12,PC;將堆棧內(nèi)容恢復(fù)到寄存器(;將堆棧內(nèi)容恢復(fù)到寄存器(R0,R4到到R12,PC)。)。3.交換指令交換指令(SWP)格式為:格式為: SWP條件條件 Rd,Rm,Rn SWP指令是數(shù)據(jù)指令是數(shù)據(jù)字交換字交換指令,用于將源寄存器指令,用于將源寄存器Rn所指向的存儲(chǔ)器中的字?jǐn)?shù)據(jù)傳送到目的寄存器中,所指向的存儲(chǔ)器中的字?jǐn)?shù)據(jù)傳送到目的寄存器中,同時(shí)將源寄存器同時(shí)將源寄存器Rm中的字

34、數(shù)據(jù)傳送到源寄存器中的字?jǐn)?shù)據(jù)傳送到源寄存器Rn所指向的存儲(chǔ)器中。所指向的存儲(chǔ)器中。 RdRn,RnRm 當(dāng)源寄存器當(dāng)源寄存器Rm和目的寄存器為同一個(gè)寄存器時(shí),和目的寄存器為同一個(gè)寄存器時(shí),指令交換該寄存器和存儲(chǔ)器的內(nèi)容。指令交換該寄存器和存儲(chǔ)器的內(nèi)容。3.交換指令交換指令(SWP)指令示例:指令示例:SWP R1,R2,R3 ;將將R3所指向的存儲(chǔ)器中的字?jǐn)?shù)據(jù)傳送到所指向的存儲(chǔ)器中的字?jǐn)?shù)據(jù)傳送到R1,同時(shí),同時(shí);將;將R2中的字?jǐn)?shù)據(jù)傳送到中的字?jǐn)?shù)據(jù)傳送到R3所指向的存儲(chǔ)單元。所指向的存儲(chǔ)單元。SWPEQ R1,R1,R2 ;Z=1時(shí),完成將時(shí),完成將R2所指向的存儲(chǔ)器中的字?jǐn)?shù)據(jù)與所指向的存儲(chǔ)器

35、中的字?jǐn)?shù)據(jù)與;R1中的字?jǐn)?shù)據(jù)交換。中的字?jǐn)?shù)據(jù)交換。3.交換指令交換指令(SWP)SWPB指令指令格式為:格式為:SWP條件條件B 目的寄存器,源寄存器目的寄存器,源寄存器1,源寄存器源寄存器2SWPB指令是指令是字節(jié)交換指令字節(jié)交換指令,用于將源寄存器,用于將源寄存器2所所指向的存儲(chǔ)器中的字節(jié)數(shù)據(jù)傳送到目的寄存器中,指向的存儲(chǔ)器中的字節(jié)數(shù)據(jù)傳送到目的寄存器中,目的寄存器的高目的寄存器的高24位清零,同時(shí)將源寄存器位清零,同時(shí)將源寄存器1中的中的字節(jié)數(shù)據(jù)傳送到源寄存器字節(jié)數(shù)據(jù)傳送到源寄存器2所指向的存儲(chǔ)器中。所指向的存儲(chǔ)器中。3.交換指令交換指令(SWP)指令示例:指令示例:SWPB R1,R2

36、,R3;將;將R3所指向的存儲(chǔ)器中的字節(jié)數(shù)據(jù)傳送到所指向的存儲(chǔ)器中的字節(jié)數(shù)據(jù)傳送到R1,R1的高的高24位清零,同時(shí)將位清零,同時(shí)將R2中的低中的低8位數(shù)據(jù)傳位數(shù)據(jù)傳送到送到R3所指向的存儲(chǔ)單元。所指向的存儲(chǔ)單元。SWPB R1,R1,R2;該指令完成將;該指令完成將R2所指向的存儲(chǔ)器中的字節(jié)數(shù)據(jù)所指向的存儲(chǔ)器中的字節(jié)數(shù)據(jù)與與R1中的低中的低8位數(shù)據(jù)交換。位數(shù)據(jù)交換。3.1.2 3.1.2 算術(shù)和邏輯指令算術(shù)和邏輯指令v算術(shù)和邏輯算術(shù)和邏輯指令只能對(duì)寄存器的內(nèi)容進(jìn)行操作,指令只能對(duì)寄存器的內(nèi)容進(jìn)行操作,不允許對(duì)存儲(chǔ)器不允許對(duì)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行操作,也中的數(shù)據(jù)進(jìn)行操作,也不允許不允許指指令令直接

37、使用存儲(chǔ)器直接使用存儲(chǔ)器的數(shù)據(jù)或在的數(shù)據(jù)或在寄存器與存儲(chǔ)器寄存器與存儲(chǔ)器之之間傳送數(shù)據(jù)。間傳送數(shù)據(jù)。v算術(shù)和邏輯算術(shù)和邏輯指令可分為指令可分為3大類:大類: 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 算術(shù)邏輯運(yùn)算指令算術(shù)邏輯運(yùn)算指令 比較指令比較指令3.1.2 3.1.2 算術(shù)和邏輯指令算術(shù)和邏輯指令v數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令用于在用于在寄存器和寄存器之間寄存器和寄存器之間進(jìn)行數(shù)進(jìn)行數(shù)據(jù)的傳輸。據(jù)的傳輸。v算術(shù)邏輯運(yùn)算指令算術(shù)邏輯運(yùn)算指令完成常用的算術(shù)與邏輯的運(yùn)算,完成常用的算術(shù)與邏輯的運(yùn)算,該類指令不但將運(yùn)算該類指令不但將運(yùn)算結(jié)果保存結(jié)果保存在目的寄存器中,在目的寄存器中,同時(shí)同時(shí)更新更新CPSR中的相應(yīng)中

38、的相應(yīng)條件標(biāo)志位條件標(biāo)志位。v比較指令比較指令是完成對(duì)指定的兩個(gè)寄存器(或是完成對(duì)指定的兩個(gè)寄存器(或1個(gè)寄個(gè)寄存器,存器,1個(gè)立即數(shù))進(jìn)行比較,個(gè)立即數(shù))進(jìn)行比較,不保存不保存運(yùn)算結(jié)果,運(yùn)算結(jié)果,只影響只影響CPSR中相應(yīng)的中相應(yīng)的條件標(biāo)志位條件標(biāo)志位。1.1.算術(shù)指令算術(shù)指令(1)ADD,SUB,RSB,ADC,SBC和和RSC指令指令v加、減和反減指令,前三個(gè)不帶進(jìn)位或借位,后加、減和反減指令,前三個(gè)不帶進(jìn)位或借位,后三個(gè)帶進(jìn)位或借位。三個(gè)帶進(jìn)位或借位。v其句法是:其句法是:opcondS Rd,Op1,Op21.1.算術(shù)指令算術(shù)指令A(yù)DDADD加法指令加法指令(Addition) AD

39、DS , v功能:功能:ADDADD將把兩個(gè)操作數(shù)加起來(lái),把結(jié)果放置將把兩個(gè)操作數(shù)加起來(lái),把結(jié)果放置到目的寄存器中。到目的寄存器中。 Rd = op1 + op2l 操作數(shù)操作數(shù)1 1是一個(gè)寄存器;是一個(gè)寄存器;l 操作數(shù)操作數(shù)2 2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。立即數(shù)。例:例:ADD R0, R1, R2 ; R0 = R1 + R2R0 = R1 + R2 ADD R0, R1, #256 ; R0 = R1 + 256R0 = R1 + 256 ADD R0, R2, R3,LSL#1 ; R0 = R2 + (R3 1) R0

40、= R2 + (R3 1) 451.1.算術(shù)指令算術(shù)指令A(yù)DCADC帶進(jìn)位加法指令帶進(jìn)位加法指令 (Addition with Carry)ADCS ,v 功能:將寄存器功能:將寄存器RnRn、操作數(shù)、操作數(shù)op2op2表示的值以及進(jìn)位標(biāo)志位表示的值以及進(jìn)位標(biāo)志位三者相加,然后把結(jié)果存入目的寄存器三者相加,然后把結(jié)果存入目的寄存器RdRd中。它使用一中。它使用一個(gè)進(jìn)位標(biāo)志位,這樣就可以做比個(gè)進(jìn)位標(biāo)志位,這樣就可以做比3232位大的加法。位大的加法。 Rd= op1 + op2 + carry 進(jìn)位標(biāo)志值進(jìn)位標(biāo)志值 461.1.算術(shù)指令算術(shù)指令 ADCv 下列例子將完成兩個(gè)下列例子將完成兩個(gè)12

41、8位數(shù)的相加。位數(shù)的相加。128 位結(jié)果位結(jié)果:寄存器寄存器 0、1、2、和、和 3;第一個(gè)第一個(gè) 128 位數(shù)位數(shù): 寄存器寄存器 4、5、6、和、和 7;第二個(gè)第二個(gè) 128 位數(shù)位數(shù): 寄存器寄存器 8、9、10、和、和 11。 ADDS R0, R4, R8 ; 加低端的字加低端的字 ADCS R1, R5, R9 ; 加下一個(gè)字,帶進(jìn)位加下一個(gè)字,帶進(jìn)位 ADCS R2, R6, R10 ; 加第三個(gè)字,帶進(jìn)位加第三個(gè)字,帶進(jìn)位 ADCS R3, R7, R11 ; 加高端的字,帶進(jìn)位加高端的字,帶進(jìn)位47注意:注意:相加時(shí),不要忘記設(shè)置相加時(shí),不要忘記設(shè)置S S后綴來(lái)更改進(jìn)位標(biāo)志。

42、后綴來(lái)更改進(jìn)位標(biāo)志。1.1.算術(shù)指令算術(shù)指令 SUB48SUB減法指令減法指令(Subtraction)SUBS ,v 功能:功能:SUB SUB 用操作數(shù)用操作數(shù)op1減去操作數(shù)減去操作數(shù)op2 ,把結(jié)果放置,把結(jié)果放置到目的寄存器中。到目的寄存器中。 Rd = op1 - op2 l 操作數(shù)操作數(shù)1 1是一個(gè)寄存器,是一個(gè)寄存器,l 操作數(shù)操作數(shù)2 2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)即數(shù): : SUB R0, R1, R2 ;R0 = R1 - R2 R0 = R1 - R2 SUB R0, R1, #256 ; R0 = R1 -

43、256 R0 = R1 - 256 SUB R0, R2, R3,LSL#1 ; R0 = R2 - (R3 R0 = R2 - (R3 左移左移1 1位位) )1.1.算術(shù)指令算術(shù)指令 SBC49SBC帶借位減法指令帶借位減法指令:(Subtraction with Carry)SBCS ,v 功能:用寄存器功能:用寄存器op1的值減去操作數(shù)的值減去操作數(shù)op2表示的值,再減表示的值,再減去進(jìn)位標(biāo)志取反的值,然后把結(jié)果存入目的寄存器去進(jìn)位標(biāo)志取反的值,然后把結(jié)果存入目的寄存器RdRd中。中。它使用進(jìn)位標(biāo)志來(lái)表示借位,這樣就可以做大于它使用進(jìn)位標(biāo)志來(lái)表示借位,這樣就可以做大于 32 32 位位

44、的減法。的減法。 Rd= op1 - op2 - !carry lSBCSBC生成進(jìn)位標(biāo)志時(shí)如果需要借位則清除進(jìn)位標(biāo)志。所以,生成進(jìn)位標(biāo)志時(shí)如果需要借位則清除進(jìn)位標(biāo)志。所以,指令要對(duì)進(jìn)位標(biāo)志進(jìn)行一個(gè)非操作指令要對(duì)進(jìn)位標(biāo)志進(jìn)行一個(gè)非操作, ,在指令執(zhí)行期間自動(dòng)的在指令執(zhí)行期間自動(dòng)的反轉(zhuǎn)此位。反轉(zhuǎn)此位。1.1.算術(shù)指令算術(shù)指令 SBCv 例如:例如: 第一個(gè)第一個(gè)6464位操作數(shù)存放在寄存器位操作數(shù)存放在寄存器R2R2,R3R3中;中; 第二個(gè)第二個(gè)6464位操作數(shù)存放在寄存器位操作數(shù)存放在寄存器R4R4,R5R5中;中;6464位結(jié)果存放在位結(jié)果存放在R0R0,R1R1中。中。 SUBS R0,

45、R2,R4; 低低32位相減,位相減,S表示結(jié)果影響條表示結(jié)果影響條件標(biāo)志位的值件標(biāo)志位的值 SBC R1,R3,R5;高高32位相減位相減501.1.算術(shù)指令算術(shù)指令 RSB51RSB反向減法指令反向減法指令(Reverse Subtraction) RSBS ,v 功能:功能:SUBSUB用操作數(shù)用操作數(shù)op2減去操作數(shù)減去操作數(shù)op1,把結(jié)果放置到目的,把結(jié)果放置到目的寄存器中寄存器中 。Rd = op2 op1l 操作數(shù)操作數(shù)1 1是一個(gè)寄存器,是一個(gè)寄存器,l 操作數(shù)操作數(shù)2 2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。即數(shù)。 RSB

46、R0, R1, R2 ; R0=R2-R1R0=R2-R1 RSB R0, R1, #256 ; R0=256-R1 R0=256-R1 RSB R0, R2, R3,LSL#1 ; R0=(R31)-R2R0=(R31)-R21.1.算術(shù)指令算術(shù)指令 RSC52RSC帶借位的反向減法指令帶借位的反向減法指令(Reverse Subtraction with Carry)RSCS ,v 功能:同于功能:同于SBCSBC,但倒換了兩個(gè)操作數(shù)的前后位置。,但倒換了兩個(gè)操作數(shù)的前后位置。 Rd = op2 - op1 - !carry l例如:第一個(gè)例如:第一個(gè)6464位操作數(shù)存放在寄存器位操作數(shù)存

47、放在寄存器R2R2,R3R3中;中; 第二個(gè)第二個(gè)6464位操作數(shù)存放在寄存器位操作數(shù)存放在寄存器R4R4,R5R5中;中; 64 64位結(jié)果存放在位結(jié)果存放在R0R0,R1R1中。中。 SUBS R0,R2,R4; 低低3232位相減,位相減,S S表示結(jié)果影響表示結(jié)果影響 寄存器寄存器CPSRCPSR的值的值 RSC R1, R5,R3; 高高3232位相減位相減2.2.邏輯指令邏輯指令A(yù)NDAND邏輯與指令邏輯與指令(logical AND) ANDS ,v 功能:功能:AND AND 將在兩個(gè)操作數(shù)上按位進(jìn)行邏輯與,把結(jié)果放置將在兩個(gè)操作數(shù)上按位進(jìn)行邏輯與,把結(jié)果放置到目的寄存器中:到

48、目的寄存器中:Rd = op1 AND op2。v 用于清除特定的位;用于清除特定的位; 操作數(shù)操作數(shù)1 1是一個(gè)寄存器是一個(gè)寄存器 操作數(shù)操作數(shù)2 2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)即數(shù) 例如:例如:AND R0, R0, #3 ; 保持保持 R0 R0 的位的位0 0和和1 1,其余位清,其余位清0 0532.2.邏輯指令邏輯指令ORRORR邏輯或指令邏輯或指令(logical OR) ORRS ,v 功能:功能:OROR將在兩個(gè)操作數(shù)上按位進(jìn)行邏輯或,把結(jié)果放置將在兩個(gè)操作數(shù)上按位進(jìn)行邏輯或,把結(jié)果放置到目的寄存器中,到目的寄存器中

49、,Rd = op1 OR op2 ;v 將特定的位將特定的位置置1 1。 操作數(shù)操作數(shù)1 1是一個(gè)寄存器是一個(gè)寄存器 操作數(shù)操作數(shù)2 2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。立即數(shù)。例如:例如: ORR R0, R0, #3 ; 設(shè)置設(shè)置 R0 R0 中位中位 0 0 和和 1 ,1 ,其余位不變其余位不變 542.2.邏輯指令邏輯指令EOREOR邏輯異或指令邏輯異或指令(logical Exclusive OR) EORS ,v 功能:功能:EOR EOR 將在兩個(gè)操作數(shù)上按位進(jìn)行邏輯異或,把結(jié)果放將在兩個(gè)操作數(shù)上按位進(jìn)行邏輯異或,把結(jié)果放置

50、到目的寄存器中,置到目的寄存器中,Rd = op1 EOR op2 ;v 將特定的位將特定的位反轉(zhuǎn)反轉(zhuǎn)。 操作數(shù)操作數(shù)1 1是一個(gè)寄存器是一個(gè)寄存器 操作數(shù)操作數(shù)2 2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)即數(shù)例如:例如:EOR R0, R0, #3 ; 反轉(zhuǎn)反轉(zhuǎn) R0 R0 中的位中的位0 0和和1 1552.2.邏輯指令邏輯指令BICBIC位清除指令位清除指令(Bit Clear) BICS ,;v 功能:功能:BIC BIC 是在一個(gè)字中是在一個(gè)字中清除位清除位的一種方法,與的一種方法,與 OR OR 位設(shè)置是相位設(shè)置是相反的操作反的操作

51、。Rd = op1 AND (!op2) vop2op2是一個(gè)是一個(gè)3232位位位掩碼位掩碼(mask)(mask)。如果在掩碼中設(shè)置了某。如果在掩碼中設(shè)置了某一位,則清除一位,則清除op1中的這一位。未設(shè)置的掩碼位指示中的這一位。未設(shè)置的掩碼位指示op1中此位保持不變。中此位保持不變。BICS R0,R2,0 x80000000 ;清除;清除 R2 中的位中的位 31,其余的位保持不變,刷新標(biāo)志位。,其余的位保持不變,刷新標(biāo)志位。563.3.傳送指令傳送指令MOVMOV57MOV數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 (Move) MOVS , v 功能:從另一個(gè)寄存器、被移位的寄存器、或一個(gè)立即數(shù)功能:

52、從另一個(gè)寄存器、被移位的寄存器、或一個(gè)立即數(shù)裝載一個(gè)值到目的寄存器裝載一個(gè)值到目的寄存器; Rdop1 。l指定指定RdRd和和op1op1為同一寄存器,實(shí)現(xiàn)為同一寄存器,實(shí)現(xiàn)NOPNOP指令的效果,或可以實(shí)指令的效果,或可以實(shí)現(xiàn)移位操作。現(xiàn)移位操作。 MOV R0, R0 ; R0 = R0 = R0R0. NOP. NOPMOV R0, R0, LSL #3 ; R0 = R0 = R0R0 * * 8 8l如果如果R15R15是目的寄存器,將修改程序計(jì)數(shù)器或標(biāo)志。用于返是目的寄存器,將修改程序計(jì)數(shù)器或標(biāo)志。用于返回到調(diào)用代碼,方法是把連接寄存器的內(nèi)容傳送到回到調(diào)用代碼,方法是把連接寄存器

53、的內(nèi)容傳送到 R15:R15: MOV PC, R14 ; 退出到調(diào)用者退出到調(diào)用者M(jìn)OVS PC, R14 ;退出到調(diào)用者并恢復(fù)標(biāo)志位退出到調(diào)用者并恢復(fù)標(biāo)志位3.傳送指令傳送指令MVNMVN數(shù)據(jù)取反傳送指令數(shù)據(jù)取反傳送指令(Move Negative) MVNS ,v 功能:功能:MVN從另一個(gè)寄存器、被移位的寄存器、或一個(gè)從另一個(gè)寄存器、被移位的寄存器、或一個(gè)立即值裝載一個(gè)被取反的值到目的寄存器;立即值裝載一個(gè)被取反的值到目的寄存器; Rd = !op1v 實(shí)際是邏輯非操作:取反的值加實(shí)際是邏輯非操作:取反的值加1 1才是它的取負(fù)的值才是它的取負(fù)的值. . MVN R0, #4 ; R0

54、=-5 R0 =-5 MVN R0, #0 ; R0 =-1 R0 =-1 584.乘法指令乘法指令v 乘法指令與普通算術(shù)指令在對(duì)操作數(shù)的限制上有所不同乘法指令與普通算術(shù)指令在對(duì)操作數(shù)的限制上有所不同: 給出的所有操作數(shù)和目的寄存器必須為簡(jiǎn)單的寄存器。給出的所有操作數(shù)和目的寄存器必須為簡(jiǎn)單的寄存器。 操作數(shù)操作數(shù) 2不能使用立即數(shù)或被移位的寄存器。不能使用立即數(shù)或被移位的寄存器。 目的寄存器和操作數(shù)目的寄存器和操作數(shù)1必須是不同的寄存器。必須是不同的寄存器。 不能指定不能指定R15為目的寄存器。為目的寄存器。4.乘法指令乘法指令MUL(32位)位)MUL32MUL32位乘法指令位乘法指令(Mu

55、ltiplication)(Multiplication) MULS ,v 功能:功能:MULMUL提供提供3232位整數(shù)乘法。該指令根據(jù)位整數(shù)乘法。該指令根據(jù)S S標(biāo)志,決定標(biāo)志,決定操作是否影響操作是否影響CPSRCPSR的值。的值。RnRn和和op2op2的值為的值為3232位的有符號(hào)數(shù)位的有符號(hào)數(shù)或無(wú)符號(hào)數(shù)。或無(wú)符號(hào)數(shù)。 Rd=Rn*op2 例如:例如: MULS R0,R1,R2 ;R0R0R1R1R2R2,結(jié)果影響寄結(jié)果影響寄 ;存器;存器CPSRCPSR的值的值 604.乘法指令乘法指令 MLA(32位)位)61MLA 32位乘加指令位乘加指令 (Multiplication w

56、ith Accumulate) MLAS ,v 功能:功能:MLAMLA的行為同于的行為同于MULMUL,但它把操作數(shù),但它把操作數(shù)3 3的值加到結(jié)果上,的值加到結(jié)果上,其中其中op2op2,op3op3必須為寄存器必須為寄存器 。 Rd=(Rn*op2)+op3,這在這在求總和求總和時(shí)有用時(shí)有用l Rn Rn、op2op2和和op3op3的值為的值為3232位的有符號(hào)數(shù)或無(wú)符號(hào)數(shù)。位的有符號(hào)數(shù)或無(wú)符號(hào)數(shù)。 例如:例如: MLA R0,R1,R2,R3; R0 R0R1R1R2R2R3 R3 1.CMP比較指令比較指令 (Compare) CMP ,v 功能:將寄存器功能:將寄存器RnRn的值

57、和操作數(shù)的值和操作數(shù)op2op2所表示的值進(jìn)行比較,所表示的值進(jìn)行比較,根據(jù)結(jié)果更新根據(jù)結(jié)果更新CPSRCPSR中條件標(biāo)志位的值。中條件標(biāo)志位的值。 status = Rn - op2的結(jié)果的結(jié)果 l 該指令進(jìn)行一次減法運(yùn)算,但該指令進(jìn)行一次減法運(yùn)算,但不存儲(chǔ)結(jié)果,只更改條件標(biāo)志不存儲(chǔ)結(jié)果,只更改條件標(biāo)志位位,后面的指令就可以根據(jù)條件標(biāo)志位來(lái)決定是否執(zhí)行。該指令,后面的指令就可以根據(jù)條件標(biāo)志位來(lái)決定是否執(zhí)行。該指令不需要顯式的指定不需要顯式的指定S S后綴來(lái)更改狀態(tài)標(biāo)志。后綴來(lái)更改狀態(tài)標(biāo)志。l 操作數(shù)操作數(shù)op1op1為寄存器或立即數(shù)。為寄存器或立即數(shù)。CMP R0,5; 計(jì)算計(jì)算R0R0-5

58、 5,根據(jù)結(jié)果設(shè)置條件標(biāo)志位根據(jù)結(jié)果設(shè)置條件標(biāo)志位ADDGT R0,R0,5; 如果如果R05R05,則執(zhí)行則執(zhí)行ADDGTADDGT指令指令3.1.3 比較指令比較指令3.1.3比較指令比較指令2.CMN取負(fù)比較指令取負(fù)比較指令CMN ,v CMN指令是指令是比較非指令比較非指令,也是做一次減法運(yùn)算,用第,也是做一次減法運(yùn)算,用第1操操作數(shù)減去第作數(shù)減去第2操作數(shù)的負(fù)值,結(jié)果不保存,只是刷新條件操作數(shù)的負(fù)值,結(jié)果不保存,只是刷新條件標(biāo)志位,對(duì)條件標(biāo)志位的影響和比較指令標(biāo)志位,對(duì)條件標(biāo)志位的影響和比較指令CMP相同。相同。vstatus = Rn ( op2)的結(jié)果的結(jié)果例:例:CMNR1,#

59、0 x00;比較;比較R1和和0 xFFFFFFFFADDCS R5,R5,#0 x20;如果;如果C=1,則,則R5=R5+0 x20ADDCC R5,R5,#0 x10;如果;如果C=0,則,則R5=R5+0 x103.1.3比較指令比較指令3.TST位測(cè)試指令位測(cè)試指令(Test bits) TST ,v 功能:將寄存器功能:將寄存器RnRn的值和操作數(shù)的值和操作數(shù)op2op2所表示的值按位做邏所表示的值按位做邏輯與操作,根據(jù)結(jié)果更新輯與操作,根據(jù)結(jié)果更新CPSRCPSR中條件標(biāo)志位的值,但不中條件標(biāo)志位的值,但不儲(chǔ)存結(jié)果。儲(chǔ)存結(jié)果。用于檢查寄存器用于檢查寄存器RnRn是否設(shè)置了是否設(shè)置

60、了op2op2中相應(yīng)的位中相應(yīng)的位。 Status = Rn AND op2 64v 操作數(shù)操作數(shù)RnRn是要測(cè)試的數(shù)據(jù)字而操作數(shù)是要測(cè)試的數(shù)據(jù)字而操作數(shù)op2op2是一個(gè)位掩碼。是一個(gè)位掩碼。經(jīng)過(guò)測(cè)試后,設(shè)置經(jīng)過(guò)測(cè)試后,設(shè)置ZeroZero標(biāo)志。不需要指定標(biāo)志。不需要指定S S后綴。后綴。 TST R0,5; 測(cè)試測(cè)試R0R0中第中第0 0位和第位和第2 2位是否為位是否為1 13.1.3比較指令比較指令4.TEQ指令指令TEQ ,v TEQ指令是指令是測(cè)試指令測(cè)試指令,用于把一個(gè)寄存器的內(nèi)容和另一,用于把一個(gè)寄存器的內(nèi)容和另一個(gè)寄存器的內(nèi)容或立即數(shù)進(jìn)行按位的異或運(yùn)算,并根據(jù)運(yùn)個(gè)寄存器的內(nèi)容

溫馨提示

  • 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)論