版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、金城學院自動化系金城學院自動化系第三章第三章 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指令集指令集3.1 ARM3.1 ARM指令集指令集3.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,表示該指令只有當,表示該指令只有當CPSRCPSR中中Z Z標標志置位時才執(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,表示,表示該指令只有當該指令只有當CPSR中中Z標志置位時才執(zhí)行,目的寄存標志置位時才執(zhí)行,目的寄存器器Rd為為R0,第一個操作數(shù)
4、寄存器第一個操作數(shù)寄存器Rn為為R1,第二個操作,第二個操作數(shù)數(shù)op2為為R12;執(zhí)行的結(jié)果為;執(zhí)行的結(jié)果為R0=R1+R2,S表示將影表示將影響響CPSR寄存器的值。寄存器的值。v該指令的編碼格式為:該指令的編碼格式為: 3128272524212019161512110cond opcodeSRnRdop200000010100100010000000000000010條件域條件域v 當處理器工作在當處理器工作在ARM狀態(tài)時,幾乎所有的指令均根據(jù)狀態(tài)時,幾乎所有的指令均根據(jù)CPSR中條件標志位的狀態(tài)和指令的條件域有條件的執(zhí)中條件標志位的狀態(tài)和指令的條件域有條件的執(zhí)行。當指令的執(zhí)行條件滿足時
5、,指令被執(zhí)行,否則指令行。當指令的執(zhí)行條件滿足時,指令被執(zhí)行,否則指令被忽略。被忽略。v 每一條每一條ARM指令包含指令包含4位的條件碼位的條件碼,位于指令的最高,位于指令的最高4位位31:28。條件碼共有。條件碼共有16種,每種條件碼可用兩個字符種,每種條件碼可用兩個字符表示,這兩個字符可以添加在指令助記符的后面和指令表示,這兩個字符可以添加在指令助記符的后面和指令同時使用。同時使用。例如:例如:跳轉(zhuǎn)指令跳轉(zhuǎn)指令B可以加上后綴可以加上后綴EQ變?yōu)樽優(yōu)锽EQ表示表示“相等則相等則跳轉(zhuǎn)跳轉(zhuǎn)”,即當,即當CPSR中的中的Z標志置位時發(fā)生跳轉(zhuǎn)。標志置位時發(fā)生跳轉(zhuǎn)。v 在在16種條件標志碼中,只有種條
6、件標志碼中,只有15種可以使用。種可以使用。條件碼條件碼條件碼條件碼助記符后綴助記符后綴標標 志志含含 義義0000EQZ置位置位相等相等0001NEZ清零清零不相等不相等0010CSC置位置位無符號數(shù)大于或等于無符號數(shù)大于或等于0011CCC清零清零無符號數(shù)小于無符號數(shù)小于0100MIN置位置位負數(shù)負數(shù)0101PLN清零清零正數(shù)或零正數(shù)或零0110VSV置位置位溢出溢出0111VCV清零清零未溢出未溢出1000HIC置位置位Z清零清零無符號數(shù)大于無符號數(shù)大于1001LSC清零清零Z置位置位無符號數(shù)小于或等于無符號數(shù)小于或等于1010GEN等于等于V帶符號數(shù)大于或等于帶符號數(shù)大于或等于1011
7、LTN不等于不等于V帶符號數(shù)小于帶符號數(shù)小于1100GTZ清零且(清零且(N等于等于V)帶符號數(shù)大于帶符號數(shù)大于1101LEZ置位或(置位或(N不等于不等于V)帶符號數(shù)小于或等于帶符號數(shù)小于或等于1110AL忽略忽略無條件執(zhí)行無條件執(zhí)行C代碼:代碼:if(a b) a+;else b+;對應的匯編代碼:對應的匯編代碼: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/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) 存儲器存儲器寄存器(寄存器(R0-R15R0-R15)ARMARM微處理器微處理器外圍模塊或芯片外圍模塊或芯片存儲存儲加載加載1 1、單一數(shù)據(jù)加
9、載單一數(shù)據(jù)加載/存儲指令存儲指令vLDRLDR和和STR STR 字:字:3232位字加載寄存器(位字加載寄存器(LDRLDR)和存儲和存儲寄存器(寄存器(STRSTR)指令。指令。vLDRLDR和和STRSTR指令都有以下指令都有以下4 4種句法形式:種句法形式: opcondopcond Rd,RnRd,Rn 零偏移零偏移 opcondopcond Rd,Rn,FlexoffsetRd,Rn,Flexoffset! ! 前索引偏移前索引偏移 opcondopcond Rd,labelRd,label 程序相對偏移程序相對偏移 opcondopcond Rd,Rn,FlexoffsetRd,
10、Rn,Flexoffset 后索引偏移后索引偏移vlabel label 程序相對偏移表達式。偏移量必須是在當前程序相對偏移表達式。偏移量必須是在當前指令的上下指令的上下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 FlexoffsetFlexoff
11、set 加到加到RnRn上的靈活偏移量。該偏移量可以是下面上的靈活偏移量。該偏移量可以是下面兩種形式之一:兩種形式之一: # #exprexpr 是取值范圍為是取值范圍為-4095+4095-4095+4095的整數(shù),經(jīng)常是常量的整數(shù),經(jīng)常是常量或常量表達式?;虺A勘磉_式。 - -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位,帶擴展。位,帶擴展。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲指令存儲指令(1)LDR指令指令格式為:格式為:LDR條件條件 目的寄存器,目的寄存器,LDR指令是指令是字加載指令字加載指令,用于從存儲器中將一個,用于從存儲器中將一個32位的字數(shù)據(jù)傳送到目的寄存器中。位的字數(shù)據(jù)傳送到目的寄存器中。0 x55R3R4 0 x400000000
13、 x123456780 x400000000 x40000000存儲器存儲器地址地址應用示例:應用示例:LDR R3,R4;將將R4指向地址的字數(shù)據(jù)存入指向地址的字數(shù)據(jù)存入R30 x12345678示例示例示例示例v 指令示例:指令示例:LDR R3,R4 ;將存儲器地址為;將存儲器地址為R4的字數(shù)據(jù)讀入寄存器的字數(shù)據(jù)讀入寄存器R3。LDR R3,R1,R2 ;將存儲器地址為;將存儲器地址為R1+R2的字數(shù)據(jù)讀入寄存器的字數(shù)據(jù)讀入寄存器R3。LDR R3,R1,8 ;將存儲器地址為;將存儲器地址為R1+8的字數(shù)據(jù)讀入寄存器的字數(shù)據(jù)讀入寄存器R3。LDR R3,R1,R2!;將存儲器地址為;將存
14、儲器地址為R1+R2的字數(shù)據(jù)讀入寄存器的字數(shù)據(jù)讀入寄存器R3,并將新地址,并將新地址R1R2寫入寫入R1。LDR R3,R1,8 ?。粚⒋鎯ζ鞯刂窞?;將存儲器地址為R1+8的字數(shù)據(jù)讀入寄存器的字數(shù)據(jù)讀入寄存器R3,并將新地址,并將新地址R18寫入寫入R1。示例示例LDR R3,R1,R2;將存儲器地址為;將存儲器地址為R1的字數(shù)據(jù)讀入寄存器的字數(shù)據(jù)讀入寄存器R3,并,并將新地址將新地址R1R2寫入寫入R1。LDR R3,R1,R2,LSL3?。粚⒋鎯ζ鞯刂窞?;將存儲器地址為R1R28的字數(shù)據(jù)讀入寄存的字數(shù)據(jù)讀入寄存器器R3,并將新地址,并將新地址R1R28寫入寫入R1。LDR R3,R1,R2
15、,LSL3;將存儲器地址為;將存儲器地址為R1的字數(shù)據(jù)讀入寄存器的字數(shù)據(jù)讀入寄存器R3,并,并將新地址將新地址R1R28寫入寫入R1。注:注:R15不可以作為偏移寄存器使用。不可以作為偏移寄存器使用。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲指令存儲指令(2)STR指令指令格式為:格式為:STR條件條件 源寄存器,源寄存器, STR指令是指令是字存儲指令字存儲指令,用于從源寄存器,用于從源寄存器中將一個中將一個32位的字數(shù)據(jù)傳送到存儲器中。使用方位的字數(shù)據(jù)傳送到存儲器中。使用方式可參考指令式可參考指令LDR。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲指令存儲指令指令示例:指令示例:STRR3,R1,8
16、;將;將R3中的字數(shù)據(jù)寫入以中的字數(shù)據(jù)寫入以R1為地址的存儲器中為地址的存儲器中,并將新地址,并將新地址R18寫入寫入R1。STRR3,R1,8;將;將R3中的字數(shù)據(jù)寫入以中的字數(shù)據(jù)寫入以R18為地址的存儲為地址的存儲器中。器中。8B/16B/8B/16B/雙字的操作雙字的操作v單一數(shù)據(jù)加載單一數(shù)據(jù)加載/ /存儲指令還可以完成帶符號和無符存儲指令還可以完成帶符號和無符號的號的8 8位字節(jié)位字節(jié), ,帶符號和無符號的帶符號和無符號的1616位半字以及雙位半字以及雙字操作。字操作。v對于帶符號加載時是帶符號擴展到對于帶符號加載時是帶符號擴展到3232位,無符號位,無符號加載時是用加載時是用“0 0
17、” 擴展到擴展到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 程序相對偏移程序相對偏移 Op Op condcond type type RdRd,RnRn,offsetoffset 后索引偏移后索引偏移其中:其中:type type 必須是下面所
18、列的形式之一:必須是下面所列的形式之一:vH H 無符號半字;無符號半字;vSH SH 帶符號半字(僅對帶符號半字(僅對LDRLDR););vB B 無符號字節(jié);無符號字節(jié);vSB SB 帶符號字節(jié)(僅對帶符號字節(jié)(僅對LDRLDR);vD D 雙字;雙字;例如例如v LDRH R1LDRH R1,R0R0,#22 #22 ;R1R0+22R1R0+22,加載加載1616位半字,位半字,0 0擴展到擴展到3232位位v LDREQSH R11LDREQSH R11,R6 R6 ;R11R6R11R6,加載加載1616位半字,帶符號擴展到位半字,帶符號擴展到3232位位v STRH R4STRH
19、 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 目的寄存器,目的寄存器, LDRB指令是指令是字節(jié)加載指令字節(jié)加載指令,
20、用于從存儲器,用于從存儲器中將一個中將一個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ù)據(jù)加載單一數(shù)據(jù)加載/存儲指令存儲指令(4)LDRH指令指令格
21、式為:格式為:LDR條件條件H 目的寄存器,目的寄存器,LDRH指令是指令是無符號半字加載指令無符號半字加載指令,用于從,用于從存儲器中將一個存儲器中將一個16位的半字數(shù)據(jù)傳送到目的寄存位的半字數(shù)據(jù)傳送到目的寄存器中,同時將寄存器的高器中,同時將寄存器的高16位清零。位清零。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲指令存儲指令指令示例:指令示例:LDRH R3,R1;將存儲器地址為;將存儲器地址為R1的半字數(shù)據(jù)讀入寄存器的半字數(shù)據(jù)讀入寄存器R3,并將并將R3的高的高16位清零。位清零。LDRH R3,R1,8 ;將存儲器地址為;將存儲器地址為R18的半字數(shù)據(jù)讀入寄存器的半字數(shù)據(jù)讀入寄存器R3,并
22、將,并將R3的高的高16位清零。位清零。LDRH R3,R1,R2 ;將存儲器地址為;將存儲器地址為R1R2的半字數(shù)據(jù)讀入寄存的半字數(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;將內(nèi)存中起始地址為將內(nèi)存中起始地址為R1的一個字節(jié)數(shù)據(jù)裝入
23、的一個字節(jié)數(shù)據(jù)裝入R0中中,R0的高的高24位設(shè)置成該字節(jié)數(shù)據(jù)的符號位位設(shè)置成該字節(jié)數(shù)據(jù)的符號位 1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲指令存儲指令(6) LDRSH 有符號的半字數(shù)據(jù)加載指令有符號的半字數(shù)據(jù)加載指令v格式:格式:LDRSH ,v功能:功能:同同LDRH指令,但該指令將寄存器指令,但該指令將寄存器Rd的高的高16位設(shè)置成所裝載的半字數(shù)據(jù)符號位的值。位設(shè)置成所裝載的半字數(shù)據(jù)符號位的值。v例如:例如:vLDRSH R0,R1v;將內(nèi)存中起始地址為將內(nèi)存中起始地址為R1的一個的一個16位半字數(shù)據(jù)裝入位半字數(shù)據(jù)裝入R0中,中,R0的高的高16位設(shè)置成該半字數(shù)據(jù)的符號位位設(shè)置成該半字數(shù)據(jù)
24、的符號位 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為地址的存為地址的存儲器中。儲器中。STRB R3,R1,8;將寄存器;將寄存器
25、R3中的字節(jié)數(shù)據(jù)寫入以中的字節(jié)數(shù)據(jù)寫入以R18為地址為地址的存儲器中。的存儲器中。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲指令存儲指令(8)STRH指令指令格式為:格式為: STR條件條件H 源寄存器,源寄存器, STRH指令是指令是無符號半字存儲指令無符號半字存儲指令,用于從,用于從源寄存器中將一個源寄存器中將一個16位的半字數(shù)據(jù)傳送到存儲位的半字數(shù)據(jù)傳送到存儲器中。該半字數(shù)據(jù)為源寄存器中的低器中。該半字數(shù)據(jù)為源寄存器中的低16位。位。1 1、單一數(shù)據(jù)加載單一數(shù)據(jù)加載/存儲指令存儲指令指令示例:指令示例:STRH R3,R1 ;將寄存器;將寄存器R3中的半字數(shù)據(jù)寫入以中的半字數(shù)據(jù)寫入以R1為地
26、址的存為地址的存儲器中。儲器中。STRH R3,R1,8 ;將寄存器;將寄存器R3中的半字數(shù)據(jù)寫入以中的半字數(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ù)傳送到多個寄存器,批量數(shù)據(jù)存儲指令則完成相據(jù)傳送到多個寄存器,批量數(shù)據(jù)存儲
27、指令則完成相反的操作。反的操作。2.2.多數(shù)據(jù)加載多數(shù)據(jù)加載/ /存儲指令(存儲指令( LDM LDM和和STM STM )常用的加載存儲指令如下:常用的加載存儲指令如下:LDM(或(或STM)指令)指令格式為:格式為:LDM(或(或STM)條件條件類型類型 基址寄存器基址寄存器!,寄存器列表,寄存器列表 LDM(或(或STM)指令用于從由基址寄存器所指示的)指令用于從由基址寄存器所指示的一片連續(xù)存儲器到寄存器列表所指示的多個寄存器之間傳一片連續(xù)存儲器到寄存器列表所指示的多個寄存器之間傳送數(shù)據(jù),該指令的常見用途是將多個寄存器的內(nèi)容入棧或送數(shù)據(jù),該指令的常見用途是將多個寄存器的內(nèi)容入棧或出棧。出
28、棧。v !為可選后綴,若選用該后綴,則當數(shù)據(jù)傳送完畢之后,將為可選后綴,若選用該后綴,則當數(shù)據(jù)傳送完畢之后,將最后的地址寫入基址寄存器,否則基址寄存器的內(nèi)容不改變。最后的地址寫入基址寄存器,否則基址寄存器的內(nèi)容不改變。v為可選后綴,這是一個只是在數(shù)據(jù)塊傳送中使用的后綴,為可選后綴,這是一個只是在數(shù)據(jù)塊傳送中使用的后綴,不允許在用戶模式或系統(tǒng)模式下使用。不允許在用戶模式或系統(tǒng)模式下使用。 當指令為當指令為LDM且寄存器列表中包含且寄存器列表中包含R15,選用該后綴時表示:除,選用該后綴時表示:除了正常的數(shù)據(jù)傳送之外,還將了正常的數(shù)據(jù)傳送之外,還將SPSR復制到復制到CPSR。 同時,該后綴還表示
29、傳入或傳出的是用戶模式下的寄存器,而不同時,該后綴還表示傳入或傳出的是用戶模式下的寄存器,而不是當前模式下的寄存器。是當前模式下的寄存器。v 基址寄存器不允許為基址寄存器不允許為R15。v 寄存器列表可以為寄存器列表可以為R0R15的任意組合,若使用連續(xù)的的任意組合,若使用連續(xù)的寄存器時,可以使用寄存器時,可以使用“-”表示省略。表示省略。2.2.多數(shù)據(jù)加載多數(shù)據(jù)加載/ /存儲指令(存儲指令( 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 存儲器訪問指令存儲器訪問指令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ù)加載/ /存儲指令(存儲指令( 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ù)加載/ /存儲指令(存儲指令( 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)存中正向增長。2.2.多數(shù)據(jù)加載多數(shù)據(jù)加載/ /存儲指令(存儲指令( LDM LDM和和STM S
33、TM )指令示例:指令示例:STMFD R13!,R0,R4-R12,LR;將寄存器列表中的寄存器(;將寄存器列表中的寄存器(R0,R4到到R12,LR)存入)存入堆棧。堆棧。.LDMFD R13!,R0,R4-R12,PC;將堆棧內(nèi)容恢復到寄存器(;將堆棧內(nèi)容恢復到寄存器(R0,R4到到R12,PC)。)。3.交換指令交換指令(SWP)格式為:格式為: SWP條件條件 Rd,Rm,Rn SWP指令是數(shù)據(jù)指令是數(shù)據(jù)字交換字交換指令,用于將源寄存器指令,用于將源寄存器Rn所指向的存儲器中的字數(shù)據(jù)傳送到目的寄存器中,所指向的存儲器中的字數(shù)據(jù)傳送到目的寄存器中,同時將源寄存器同時將源寄存器Rm中的字
34、數(shù)據(jù)傳送到源寄存器中的字數(shù)據(jù)傳送到源寄存器Rn所指向的存儲器中。所指向的存儲器中。 RdRn,RnRm 當源寄存器當源寄存器Rm和目的寄存器為同一個寄存器時,和目的寄存器為同一個寄存器時,指令交換該寄存器和存儲器的內(nèi)容。指令交換該寄存器和存儲器的內(nèi)容。3.交換指令交換指令(SWP)指令示例:指令示例:SWP R1,R2,R3 ;將將R3所指向的存儲器中的字數(shù)據(jù)傳送到所指向的存儲器中的字數(shù)據(jù)傳送到R1,同時,同時;將;將R2中的字數(shù)據(jù)傳送到中的字數(shù)據(jù)傳送到R3所指向的存儲單元。所指向的存儲單元。SWPEQ R1,R1,R2 ;Z=1時,完成將時,完成將R2所指向的存儲器中的字數(shù)據(jù)與所指向的存儲器
35、中的字數(shù)據(jù)與;R1中的字數(shù)據(jù)交換。中的字數(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.交換指令交換指令(SWP)指令示例:指令示例:SWPB R1,R2
36、,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)容進行操作,不允許對存儲器不允許對存儲器中的數(shù)據(jù)進行操作,也中的數(shù)據(jù)進行操作,也不允許不允許指指令令直接
37、使用存儲器直接使用存儲器的數(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é)果保存在目的寄存器中,在目的寄存器中,同時同時更新更新CPSR中的相應中
38、的相應條件標志位條件標志位。v比較指令比較指令是完成對指定的兩個寄存器(或是完成對指定的兩個寄存器(或1個寄個寄存器,存器,1個立即數(shù))進行比較,個立即數(shù))進行比較,不保存不保存運算結(jié)果,運算結(jié)果,只影響只影響CPSR中相應的中相應的條件標志位條件標志位。1.1.算術(shù)指令算術(shù)指令(1)ADD,SUB,RSB,ADC,SBC和和RSC指令指令v加、減和反減指令,前三個不帶進位或借位,后加、減和反減指令,前三個不帶進位或借位,后三個帶進位或借位。三個帶進位或借位。v其句法是:其句法是:opcondS Rd,Op1,Op21.1.算術(shù)指令算術(shù)指令ADDADD加法指令加法指令(Addition) AD
39、DS , 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, R2, R3,LSL#1 ; R0 = R2 + (R3 1) R0
40、= R2 + (R3 1) 451.1.算術(shù)指令算術(shù)指令ADCADC帶進位加法指令帶進位加法指令 (Addition with Carry)ADCS ,v 功能:將寄存器功能:將寄存器RnRn、操作數(shù)、操作數(shù)op2op2表示的值以及進位標志位表示的值以及進位標志位三者相加,然后把結(jié)果存入目的寄存器三者相加,然后把結(jié)果存入目的寄存器RdRd中。它使用一中。它使用一個進位標志位,這樣就可以做比個進位標志位,這樣就可以做比3232位大的加法。位大的加法。 Rd= op1 + op2 + carry 進位標志值進位標志值 461.1.算術(shù)指令算術(shù)指令 ADCv 下列例子將完成兩個下列例子將完成兩個12
41、8位數(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注意:注意:相加時,不要忘記設(shè)置相加時,不要忘記設(shè)置S S后綴來更改進位標志。
42、后綴來更改進位標志。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 - 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表示的值,再減表示的值,再減去進位標志取反的值,然后把結(jié)果存入目的寄存器去進位標志取反的值,然后把結(jié)果存入目的寄存器RdRd中。中。它使用進位標志來表示借位,這樣就可以做大于它使用進位標志來表示借位,這樣就可以做大于 32 32 位位
44、的減法。的減法。 Rd= op1 - op2 - !carry lSBCSBC生成進位標志時如果需要借位則清除進位標志。所以,生成進位標志時如果需要借位則清除進位標志。所以,指令要對進位標志進行一個非操作指令要對進位標志進行一個非操作, ,在指令執(zhí)行期間自動的在指令執(zhí)行期間自動的反轉(zhuǎn)此位。反轉(zhuǎn)此位。1.1.算術(shù)指令算術(shù)指令 SBCv 例如:例如: 第一個第一個6464位操作數(shù)存放在寄存器位操作數(shù)存放在寄存器R2R2,R3R3中;中; 第二個第二個6464位操作數(shù)存放在寄存器位操作數(shù)存放在寄存器R4R4,R5R5中;中;6464位結(jié)果存放在位結(jié)果存放在R0R0,R1R1中。中。 SUBS R0,
45、R2,R4; 低低32位相減,位相減,S表示結(jié)果影響條表示結(jié)果影響條件標志位的值件標志位的值 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可以是一個寄存器,被移位的寄存器,或一個立可以是一個寄存器,被移位的寄存器,或一個立即數(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,但倒換了兩個操作數(shù)的前后位置。,但倒換了兩個操作數(shù)的前后位置。 Rd = op2 - op1 - !carry l例如:第一個例如:第一個6464位操作數(shù)存放在寄存器位操作數(shù)存
47、放在寄存器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.邏輯指令邏輯指令ANDAND邏輯與指令邏輯與指令(logical AND) ANDS ,v 功能:功能:AND AND 將在兩個操作數(shù)上按位進行邏輯與,把結(jié)果放置將在兩個操作數(shù)上按位進行邏輯與,把結(jié)果放置到目的寄存器中:到
48、目的寄存器中: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é)果放置將在兩個操作數(shù)上按位進行邏輯或,把結(jié)果放置到目的寄存器中,到目的寄存器中
49、,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ù)上按位進行邏輯異或,把結(jié)果放將在兩個操作數(shù)上按位進行邏輯異或,把結(jié)果放置
50、到目的寄存器中,置到目的寄存器中,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 是在一個字中是在一個字中清除位清除位的一種方法,與的一種方法,與 OR OR 位設(shè)置是相位設(shè)置是相反的操作反的操作
51、。Rd = op1 AND (!op2) vop2op2是一個是一個3232位位位掩碼位掩碼(mask)(mask)。如果在掩碼中設(shè)置了某。如果在掩碼中設(shè)置了某一位,則清除一位,則清除op1中的這一位。未設(shè)置的掩碼位指示中的這一位。未設(shè)置的掩碼位指示op1中此位保持不變。中此位保持不變。BICS R0,R2,0 x80000000 ;清除;清除 R2 中的位中的位 31,其余的位保持不變,刷新標志位。,其余的位保持不變,刷新標志位。563.3.傳送指令傳送指令MOVMOV57MOV數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 (Move) MOVS , v 功能:從另一個寄存器、被移位的寄存器、或一個立即數(shù)功能:
52、從另一個寄存器、被移位的寄存器、或一個立即數(shù)裝載一個值到目的寄存器裝載一個值到目的寄存器; Rdop1 。l指定指定RdRd和和op1op1為同一寄存器,實現(xiàn)為同一寄存器,實現(xiàn)NOPNOP指令的效果,或可以實指令的效果,或可以實現(xiàn)移位操作?,F(xiàn)移位操作。 MOV R0, R0 ; R0 = R0 = R0R0. NOP. NOPMOV R0, R0, LSL #3 ; R0 = R0 = R0R0 * * 8 8l如果如果R15R15是目的寄存器,將修改程序計數(shù)器或標志。用于返是目的寄存器,將修改程序計數(shù)器或標志。用于返回到調(diào)用代碼,方法是把連接寄存器的內(nèi)容傳送到回到調(diào)用代碼,方法是把連接寄存器
53、的內(nèi)容傳送到 R15:R15: MOV PC, R14 ; 退出到調(diào)用者退出到調(diào)用者MOVS PC, R14 ;退出到調(diào)用者并恢復標志位退出到調(diào)用者并恢復標志位3.傳送指令傳送指令MVNMVN數(shù)據(jù)取反傳送指令數(shù)據(jù)取反傳送指令(Move Negative) MVNS ,v 功能:功能:MVN從另一個寄存器、被移位的寄存器、或一個從另一個寄存器、被移位的寄存器、或一個立即值裝載一個被取反的值到目的寄存器;立即值裝載一個被取反的值到目的寄存器; Rd = !op1v 實際是邏輯非操作:取反的值加實際是邏輯非操作:取反的值加1 1才是它的取負的值才是它的取負的值. . MVN R0, #4 ; R0
54、=-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.乘法指令乘法指令MUL(32位)位)MUL32MUL32位乘法指令位乘法指令(Mu
55、ltiplication)(Multiplication) MULS ,v 功能:功能:MULMUL提供提供3232位整數(shù)乘法。該指令根據(jù)位整數(shù)乘法。該指令根據(jù)S S標志,決定標志,決定操作是否影響操作是否影響CPSRCPSR的值。的值。RnRn和和op2op2的值為的值為3232位的有符號數(shù)位的有符號數(shù)或無符號數(shù)?;驘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,這在這在求總和求總和時有用時有用l Rn Rn、op2op2和和op3op3的值為的值為3232位的有符號數(shù)或無符號數(shù)。位的有符號數(shù)或無符號數(shù)。 例如:例如: MLA R0,R1,R2,R3; R0 R0R1R1R2R2R3 R3 1.CMP比較指令比較指令 (Compare) CMP ,v 功能:將寄存器功能:將寄存器RnRn的值
57、和操作數(shù)的值和操作數(shù)op2op2所表示的值進行比較,所表示的值進行比較,根據(jù)結(jié)果更新根據(jù)結(jié)果更新CPSRCPSR中條件標志位的值。中條件標志位的值。 status = Rn - op2的結(jié)果的結(jié)果 l 該指令進行一次減法運算,但該指令進行一次減法運算,但不存儲結(jié)果,只更改條件標志不存儲結(jié)果,只更改條件標志位位,后面的指令就可以根據(jù)條件標志位來決定是否執(zhí)行。該指令,后面的指令就可以根據(jù)條件標志位來決定是否執(zhí)行。該指令不需要顯式的指定不需要顯式的指定S S后綴來更改狀態(tài)標志。后綴來更改狀態(tài)標志。l 操作數(shù)操作數(shù)op1op1為寄存器或立即數(shù)。為寄存器或立即數(shù)。CMP R0,5; 計算計算R0R0-5
58、 5,根據(jù)結(jié)果設(shè)置條件標志位根據(jù)結(jié)果設(shè)置條件標志位ADDGT R0,R0,5; 如果如果R05R05,則執(zhí)行則執(zhí)行ADDGTADDGT指令指令3.1.3 比較指令比較指令3.1.3比較指令比較指令2.CMN取負比較指令取負比較指令CMN ,v CMN指令是指令是比較非指令比較非指令,也是做一次減法運算,用第,也是做一次減法運算,用第1操操作數(shù)減去第作數(shù)減去第2操作數(shù)的負值,結(jié)果不保存,只是刷新條件操作數(shù)的負值,結(jié)果不保存,只是刷新條件標志位,對條件標志位的影響和比較指令標志位,對條件標志位的影響和比較指令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位測試指令位測試指令(Test bits) TST ,v 功能:將寄存器功能:將寄存器RnRn的值和操作數(shù)的值和操作數(shù)op2op2所表示的值按位做邏所表示的值按位做邏輯與操作,根據(jù)結(jié)果更新輯與操作,根據(jù)結(jié)果更新CPSRCPSR中條件標志位的值,但不中條件標志位的值,但不儲存結(jié)果。儲存結(jié)果。用于檢查寄存器用于檢查寄存器RnRn是否設(shè)置了是否設(shè)置
60、了op2op2中相應的位中相應的位。 Status = Rn AND op2 64v 操作數(shù)操作數(shù)RnRn是要測試的數(shù)據(jù)字而操作數(shù)是要測試的數(shù)據(jù)字而操作數(shù)op2op2是一個位掩碼。是一個位掩碼。經(jīng)過測試后,設(shè)置經(jīng)過測試后,設(shè)置ZeroZero標志。不需要指定標志。不需要指定S S后綴。后綴。 TST R0,5; 測試測試R0R0中第中第0 0位和第位和第2 2位是否為位是否為1 13.1.3比較指令比較指令4.TEQ指令指令TEQ ,v TEQ指令是指令是測試指令測試指令,用于把一個寄存器的內(nèi)容和另一,用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)進行按位的異或運算,并根據(jù)運個寄存器的內(nèi)容
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度航空航天器零部件制造合同范本共3篇
- 二零二五年度機動車牌照出租與車輛事故處理協(xié)議2篇
- 2024版管材買賣簡單的合同范本
- 《科室品管圈》課件
- 山西財經(jīng)大學《常微分方程緒論》2023-2024學年第一學期期末試卷
- 2025年度物業(yè)托管與洗衣房運營管理合同3篇
- 二零二五年度外墻乳膠漆材料供應協(xié)議2篇
- 2025年度文化藝術(shù)活動承辦與合作合同3篇
- 2024建設(shè)工程施工合同范本謝謝
- 2025屆高考化學一輪復習課時作業(yè)29物質(zhì)的分離提純和檢驗含解析魯科版
- 九年級化學課程綱要
- 人教版六年級口算題大全(打印版)
- 胸痛中心護理相關(guān)知識培訓
- 家長學?!鞍咐虒W”《父母課堂》教學設(shè)計五篇
- 什么是冠狀動脈左主干狹窄心電圖的“6+2”現(xiàn)象
- 商業(yè)模式畫布模板
- 園林景觀工程施工組織設(shè)計-投標書范本
- 智能語音機器人解決方案
- 歷史論述題匯總
- 領(lǐng)導干部實績報告表表樣
- 鋼結(jié)構(gòu)起重機行車軌道安裝工程檢驗批質(zhì)量驗收記錄表
評論
0/150
提交評論