第3章 ARM9指令系統(tǒng)_第1頁
第3章 ARM9指令系統(tǒng)_第2頁
第3章 ARM9指令系統(tǒng)_第3頁
第3章 ARM9指令系統(tǒng)_第4頁
第3章 ARM9指令系統(tǒng)_第5頁
已閱讀5頁,還剩159頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

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

7、11LTN不等于不等于V帶符號數(shù)小于帶符號數(shù)小于1100GTZ清零且(清零且(N等于等于V)帶符號數(shù)大于帶符號數(shù)大于1101LEZ置位或(置位或(N不等于不等于V)帶符號數(shù)小于或等于帶符號數(shù)小于或等于1110AL忽略忽略無條件執(zhí)行無條件執(zhí)行C代碼:代碼:if(a b) a+;else b+;對應(yīng)的匯編代碼:對應(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 寄存器裝載及存儲指令寄存器裝載及存儲指令9v Load/St

8、ore指令用于寄存器和內(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) 存儲器存儲器寄存器(寄存器(R0-R15R0-R15)ARMARM微處理器微處理器外圍模塊或芯片外圍模塊或芯片存儲存儲加載加載1 1、單一數(shù)

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

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

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

12、32););LSL n 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位,帶擴展。位,帶擴展。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲指令存儲指令(1)LDR指令指令格式為:格式為:LDR條件條件 目的寄存器,目的寄存器,LDR指令是指令是字加載指令字加載指令,用于從存儲器中將一個,用于從存儲器中將一個32位的字?jǐn)?shù)據(jù)傳送到目的寄存器中。位的字?jǐn)?shù)據(jù)傳送到目的寄存器中。0 x55R3R4

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

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

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

16、:指令示例:STRR3,R1,8;將;將R3中的字?jǐn)?shù)據(jù)寫入以中的字?jǐn)?shù)據(jù)寫入以R1為地址的存儲器中為地址的存儲器中,并將新地址,并將新地址R18寫入寫入R1。STRR3,R1,8;將;將R3中的字?jǐn)?shù)據(jù)寫入以中的字?jǐn)?shù)據(jù)寫入以R18為地址的存儲為地址的存儲器中。器中。188B/16B/8B/16B/雙字的操作雙字的操作v單一數(shù)據(jù)加載單一數(shù)據(jù)加載/ /存儲指令還可以完成帶符號和無符存儲指令還可以完成帶符號和無符號的號的8 8位字節(jié)位字節(jié), ,帶符號和無符號的帶符號和無符號的1616位半字以及雙位半字以及雙字操作。字操作。v對于帶符號加載時是帶符號擴展到對于帶符號加載時是帶符號擴展到3232位,無符號位

17、,無符號加載時是用加載時是用“0 0” 擴展到擴展到3232位。位。v該組該組LDRLDR和和STRSTR指令也都有以下指令也都有以下4 4種句法形式:種句法形式: Op cond type RdOp cond type Rd,Rn Rn 零偏移零偏移 op cond type Rdop cond type Rd,RnRn,offset!offset!前索引偏移前索引偏移 Op cond type RdOp cond type Rd,label label 程序相對偏移程序相對偏移 Op cond type RdOp cond type Rd,RnRn,offset offset 后索引偏移后

18、索引偏移19其中:其中:type type 必須是下面所列的形式之一:必須是下面所列的形式之一:vH H 無符號半字;無符號半字;vSH SH 帶符號半字(僅對帶符號半字(僅對LDRLDR););vB B 無符號字節(jié);無符號字節(jié);vSB SB 帶符號字節(jié)(僅對帶符號字節(jié)(僅對LDRLDR);vD D 雙字;雙字;20例如例如v LDRH R1LDRH R1,R0R0,#22 #22 ;R1R0+22R1R0+22,加載加載1616位半字,位半字,0 0擴展到擴展到3232位位v LDREQSH R11LDREQSH R11,R6 R6 ;R11R6R11R6,加載加載1616位半字,帶符號擴展

19、到位半字,帶符號擴展到3232位位v STRH R4STRH R4,R0R0,R1R1! ;R4R0+R1R4R0+R1,存儲最低的有效半到存儲最低的有效半到R0+R1R0+R1所指的地址開所指的地址開始的兩個字節(jié)處,地址寫回始的兩個字節(jié)處,地址寫回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ù)加載/存儲指令存儲指令(3)LDRB指令指令 格式為:格式為:LDR條件條件B 目的寄存器,

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

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

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

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

24、R0的高的高16位設(shè)置成該半字?jǐn)?shù)據(jù)的符號位位設(shè)置成該半字?jǐn)?shù)據(jù)的符號位 1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲指令存儲指令(7)STRB指令指令格式為:格式為: STR條件條件B 源寄存器,源寄存器, STRB指令是指令是無符號字節(jié)存儲指令無符號字節(jié)存儲指令,用于從,用于從源寄存器中將一個源寄存器中將一個8位的字節(jié)數(shù)據(jù)傳送到存儲器位的字節(jié)數(shù)據(jù)傳送到存儲器中。該字節(jié)數(shù)據(jù)為源寄存器中的低中。該字節(jié)數(shù)據(jù)為源寄存器中的低8位。位。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲指令存儲指令指令示例:指令示例:STRB R3,R1 ;將寄存器;將寄存器R3中的字節(jié)數(shù)據(jù)寫入以中的字節(jié)數(shù)據(jù)寫入以R1為地址的存為地址的存

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

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

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

28、或送數(shù)據(jù),該指令的常見用途是將多個寄存器的內(nèi)容入?;虺鰲?。出棧。v !為可選后綴,若選用該后綴,則當(dāng)數(shù)據(jù)傳送完畢之后,將為可選后綴,若選用該后綴,則當(dāng)數(shù)據(jù)傳送完畢之后,將最后的地址寫入基址寄存器,否則基址寄存器的內(nèi)容不改變。最后的地址寫入基址寄存器,否則基址寄存器的內(nèi)容不改變。v為可選后綴,這是一個只是在數(shù)據(jù)塊傳送中使用的后綴,為可選后綴,這是一個只是在數(shù)據(jù)塊傳送中使用的后綴,不允許在用戶模式或系統(tǒng)模式下使用。不允許在用戶模式或系統(tǒng)模式下使用。 當(dāng)指令為當(dāng)指令為LDM且寄存器列表中包含且寄存器列表中包含R15,選用該后綴時表示:除,選用該后綴時表示:除了正常的數(shù)據(jù)傳送之外,還將了正常的數(shù)據(jù)傳送

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

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

31、R0!,R1,R2,R3指令執(zhí)行前指令執(zhí)行前指令執(zhí)行后指令執(zhí)行后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ù)加載/ /存儲指令(存儲指令( LDM LDM和和STM STM )v 例如例如 LDMIA/IB/DA/DB R13!,R0-R1,R3;v

32、各指令執(zhí)行完后,結(jié)果如圖所示。各指令執(zhí)行完后,結(jié)果如圖所示。 IB DA DB2.2.多數(shù)據(jù)加載多數(shù)據(jù)加載/ /存儲指令(存儲指令( LDM LDM和和STM STM )v FD、ED、FA和和EA指定是滿棧還是空棧,是升序棧還是降序指定是滿棧還是空棧,是升序棧還是降序棧,用于堆棧尋址。棧,用于堆棧尋址。v 一個滿棧的棧指針指向上次寫的最后一個數(shù)據(jù)單元一個滿棧的棧指針指向上次寫的最后一個數(shù)據(jù)單元.v 空棧的棧指針指向第一個空閑單元??諚5臈V羔樦赶虻谝粋€空閑單元。v 一個降序棧是在內(nèi)存中反向增長而升序棧在內(nèi)存中正向增長。一個降序棧是在內(nèi)存中反向增長而升序棧在內(nèi)存中正向增長。372.2.多數(shù)據(jù)加

33、載多數(shù)據(jù)加載/ /存儲指令(存儲指令( LDM LDM和和STM STM )指令示例:指令示例: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所指向的存儲器中的字?jǐn)?shù)據(jù)傳送到目的寄存器中,所指向的存儲器

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

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

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

37、儲器中的數(shù)據(jù)進行操作,也中的數(shù)據(jù)進行操作,也不允許不允許指指令令直接使用存儲器直接使用存儲器的數(shù)據(jù)或在的數(shù)據(jù)或在寄存器與存儲器寄存器與存儲器之之間傳送數(shù)據(jù)。間傳送數(shù)據(jù)。v算術(shù)和邏輯算術(shù)和邏輯指令可分為指令可分為3大類:大類: 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 算術(shù)邏輯運算指令算術(shù)邏輯運算指令 比較指令比較指令3.1.2 3.1.2 算術(shù)和邏輯指令算術(shù)和邏輯指令v數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令用于在用于在寄存器和寄存器之間寄存器和寄存器之間進行數(shù)進行數(shù)據(jù)的傳輸。據(jù)的傳輸。v算術(shù)邏輯運算指令算術(shù)邏輯運算指令完成常用的算術(shù)與邏輯的運算,完成常用的算術(shù)與邏輯的運算,該類指令不但將運算該類指令不但將運算結(jié)果保存結(jié)果保

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

39、術(shù)指令算術(shù)指令A(yù)DDADD加法指令加法指令(Addition) ADDS , v功能:功能:ADDADD將把兩個操作數(shù)加起來,把結(jié)果放置將把兩個操作數(shù)加起來,把結(jié)果放置到目的寄存器中。到目的寄存器中。 Rd = op1 + op2l 操作數(shù)操作數(shù)1 1是一個寄存器;是一個寄存器;l 操作數(shù)操作數(shù)2 2可以是一個寄存器,被移位的寄存器,或一個可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。立即數(shù)。例:例:ADD R0, R1, R2 ; R0 = R1 + R2R0 = R1 + R2 ADD R0, R1, #256 ; R0 = R1 + 256R0 = R1 + 256 ADD R0, R

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

41、算術(shù)指令算術(shù)指令 ADCv 下列例子將完成兩個下列例子將完成兩個128位數(shù)的相加。位數(shù)的相加。128 位結(jié)果位結(jié)果:寄存器寄存器 0、1、2、和、和 3;第一個第一個 128 位數(shù)位數(shù): 寄存器寄存器 4、5、6、和、和 7;第二個第二個 128 位數(shù)位數(shù): 寄存器寄存器 8、9、10、和、和 11。 ADDS R0, R4, R8 ; 加低端的字加低端的字 ADCS R1, R5, R9 ; 加下一個字,帶進位加下一個字,帶進位 ADCS R2, R6, R10 ; 加第三個字,帶進位加第三個字,帶進位 ADCS R3, R7, R11 ; 加高端的字,帶進位加高端的字,帶進位47注意:注意

42、:相加時,不要忘記設(shè)置相加時,不要忘記設(shè)置S S后綴來更改進位標(biāo)志。后綴來更改進位標(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是一個寄存器,是一個寄存器,l 操作數(shù)操作數(shù)2 2可以是一個寄存器,被移位的寄存器,或一個立可以是一個寄存器,被移位的寄存器,或一個立即數(shù)即數(shù): : SUB R0, R1, R2 ;R0 = R1 - R2 R0 = R1

43、- R2 SUB R0, R1, #256 ; R0 = R1 - 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表示的值,再減表示的值,再減去進位標(biāo)志取反的值,然后把結(jié)果存入目的寄存器去進位標(biāo)志取反的值,然后把結(jié)果存入目的寄存器RdRd中。中。它使用進位標(biāo)志來表示借位,這樣就可

44、以做大于它使用進位標(biāo)志來表示借位,這樣就可以做大于 32 32 位位的減法。的減法。 Rd= op1 - op2 - !carry lSBCSBC生成進位標(biāo)志時如果需要借位則清除進位標(biāo)志。所以,生成進位標(biāo)志時如果需要借位則清除進位標(biāo)志。所以,指令要對進位標(biāo)志進行一個非操作指令要對進位標(biāo)志進行一個非操作, ,在指令執(zhí)行期間自動的在指令執(zhí)行期間自動的反轉(zhuǎn)此位。反轉(zhuǎn)此位。1.1.算術(shù)指令算術(shù)指令 SBCv 例如:例如: 第一個第一個6464位操作數(shù)存放在寄存器位操作數(shù)存放在寄存器R2R2,R3R3中;中; 第二個第二個6464位操作數(shù)存放在寄存器位操作數(shù)存放在寄存器R4R4,R5R5中;中;6464

45、位結(jié)果存放在位結(jié)果存放在R0R0,R1R1中。中。 SUBS R0,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是一個寄存器,是一個寄存器,l 操作數(shù)操作數(shù)2 2可以是一個寄存器,被移位的寄存器,或一

46、個立可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。即數(shù)。 RSB 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,但倒換了兩個操作數(shù)的前后位置。,但倒換了兩個操作數(shù)的前后位置。 Rd = op2 - op1 - !carr

47、y l例如:第一個例如:第一個6464位操作數(shù)存放在寄存器位操作數(shù)存放在寄存器R2R2,R3R3中;中; 第二個第二個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 將在兩個操作數(shù)上按位進行邏輯與,把

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

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

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

51、,與的一種方法,與 OR OR 位設(shè)置是相位設(shè)置是相反的操作反的操作。Rd = op1 AND (!op2) vop2op2是一個是一個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) MOV

52、S , v 功能:從另一個寄存器、被移位的寄存器、或一個立即數(shù)功能:從另一個寄存器、被移位的寄存器、或一個立即數(shù)裝載一個值到目的寄存器裝載一個值到目的寄存器; Rdop1 。l指定指定RdRd和和op1op1為同一寄存器,實現(xiàn)為同一寄存器,實現(xiàn)NOPNOP指令的效果,或可以實指令的效果,或可以實現(xiàn)移位操作。現(xiàn)移位操作。 MOV R0, R0 ; R0 = R0. NOPR0 = R0. NOPMOV R0, R0, LSL #3 ; R0 = R0 R0 = R0 * * 8 8l如果如果R15R15是目的寄存器,將修改程序計數(shù)器或標(biāo)志。用于返是目的寄存器,將修改程序計數(shù)器或標(biāo)志。用于返回到調(diào)

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

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

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

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

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

58、器或立即數(shù)。為寄存器或立即數(shù)。CMP R0,5; 計算計算R0R0-5 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指令是指令是比較非指令比較非指令,也是做一次減法運算,用第,也是做一次減法運算,用第1操操作數(shù)減去第作數(shù)減去第2操作數(shù)的負(fù)值,結(jié)果不保存,只是刷新條件操作數(shù)的負(fù)值,結(jié)果不保存,只是刷新條件標(biāo)志位,對條件標(biāo)志位的影響和比較指令標(biāo)志位,對條件標(biāo)志位的影響和比較指令CMP相同。相同。v

59、status = Rn ( op2)的結(jié)果的結(jié)果例:例:CMNR1,#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位測試指令位測試指令(Test bits) TST ,v 功能:將寄存器功能:將寄存器RnRn的值和操作數(shù)的值和操作數(shù)op2op2所表示的值按位做邏所表示的值按位做邏輯與操作,根據(jù)結(jié)果更新輯與操作,根據(jù)結(jié)果更新CPSRCPSR中條件標(biāo)志位的值,但不中條件標(biāo)志位的值,但不儲存

60、結(jié)果。儲存結(jié)果。用于檢查寄存器用于檢查寄存器RnRn是否設(shè)置了是否設(shè)置了op2op2中相應(yīng)的位中相應(yīng)的位。 Status = Rn AND op2 64v 操作數(shù)操作數(shù)RnRn是要測試的數(shù)據(jù)字而操作數(shù)是要測試的數(shù)據(jù)字而操作數(shù)op2op2是一個位掩碼。是一個位掩碼。經(jīng)過測試后,設(shè)置經(jīng)過測試后,設(shè)置ZeroZero標(biāo)志。不需要指定標(biāo)志。不需要指定S S后綴。后綴。 TST R0,5; 測試測試R0R0中第中第0 0位和第位和第2 2位是否為位是否為1 13.1.3比較指令比較指令4.TEQ指令指令TEQ ,v TEQ指令是指令是測試指令測試指令,用于把一個寄存器的內(nèi)容和另一,用于把一個寄存器的內(nèi)容

溫馨提示

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

評論

0/150

提交評論