微處理器系統(tǒng)結(jié)構(gòu)與嵌入式系統(tǒng)設(shè)計(jì)課件:chap8 ARM匯編指令_第1頁
微處理器系統(tǒng)結(jié)構(gòu)與嵌入式系統(tǒng)設(shè)計(jì)課件:chap8 ARM匯編指令_第2頁
微處理器系統(tǒng)結(jié)構(gòu)與嵌入式系統(tǒng)設(shè)計(jì)課件:chap8 ARM匯編指令_第3頁
微處理器系統(tǒng)結(jié)構(gòu)與嵌入式系統(tǒng)設(shè)計(jì)課件:chap8 ARM匯編指令_第4頁
微處理器系統(tǒng)結(jié)構(gòu)與嵌入式系統(tǒng)設(shè)計(jì)課件:chap8 ARM匯編指令_第5頁
已閱讀5頁,還剩107頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1第八章 ARM匯編指令4學(xué)時(shí)第八章 ARM匯編指令8.1 ARM指令格式(掌握)ARM指令的一般編碼格式ARM指令的條件域指令的第二源操作數(shù)8.2 ARM尋址方式(掌握)寄存器直接尋址立即尋址寄存器移位尋址寄存器間接尋址基址變址尋址多寄存器直接尋址相對尋址堆棧尋址2第八章 ARM匯編指令8.3 ARM指令集(掌握)數(shù)據(jù)處理指令轉(zhuǎn)移指令程序狀態(tài)寄存器訪問指令加載/存儲(chǔ)指令異常產(chǎn)生指令偽指令348.1 ARM指令格式ARM指令長度指令集可以是以下任一種32 bits 長 (ARM狀態(tài))16 bits 長 (Thumb 狀態(tài))ARM一般支持3種數(shù)據(jù)類型字節(jié) (8-bit)半字 (16-bit)字

2、(32-bit)字必須被排成4個(gè)字節(jié)邊界對齊,半字必須被排列成2個(gè)字節(jié)邊界對齊Load-store 結(jié)構(gòu)*load/store 從存儲(chǔ)器中讀某個(gè)值,操作完后再將其放回存儲(chǔ)器中只對存放在寄存器的數(shù)據(jù)進(jìn)行處理對于存儲(chǔ)器中的數(shù)據(jù),只能使用load/store指令進(jìn)行存取5 ARM是三地址指令格式,指令的基本格式如下:ARM指令基本指令格式 S , 其中號內(nèi)的項(xiàng)是必須的,號內(nèi)的項(xiàng)是可選的。各項(xiàng)的說明如下:opcode:指令助記符;cond:執(zhí)行條件;S:是否影響CPSR寄存器的值;Rd:目標(biāo)寄存器; Rn:第1個(gè)操作數(shù)的寄存器;operand2:第2個(gè)操作數(shù);指令語法目標(biāo)寄存器(Rd)源寄存器1(Rn

3、)源寄存器2(Rm)ADD r3,r1,r2r3r1r2例:6指令集介紹 ARM指令集指令格式7操作碼條件助記符標(biāo)志含義0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1無符號數(shù)大于或等于0011CC/LOC=0無符號數(shù)小于0100MIN=1負(fù)數(shù)0101PLN=0正數(shù)或零0110VSV=1溢出0111VCV=0沒有溢出1000HIC=1,Z=0無符號數(shù)大于1001LSC=0,Z=1無符號數(shù)小于或等于1010GEN=V有符號數(shù)大于或等于 1011LTN!=V有符號數(shù)小于 1100GTZ=0,N=V有符號數(shù)大于 1101LEZ=1,N!=V有符號數(shù)小于或等于 1110AL任何無

4、條件執(zhí)行 (指令默認(rèn)條件) 1111NV任何從不執(zhí)行(不要使用) 指令條件碼表所有的ARM指令都可以條件執(zhí)行,而Thumb指令只有B(跳轉(zhuǎn))指令具有條件執(zhí)行功能如果指令不標(biāo)明條件代碼,將默認(rèn)為無條件(AL)執(zhí)行8指令條件碼C代碼:If(a b)a+;Elseb+;對應(yīng)的匯編代碼:CMPR0,R1 ;R0(a)與R1(b)比較ADDHIR0,R0,#1 ;若R0R1,則R0=R0+1ADDLSR1,R1,#1 ;若R0R1,則R1=R1+1示例:9 ARM指令的基本格式如下:ARM指令的第2個(gè)操作數(shù) S , 靈活的使用第2個(gè)操作數(shù)“operand2”能夠提高代碼效率。它有如下的形式:#immed

5、_8r常數(shù)表達(dá)式;Rm寄存器方式;Rm,shift寄存器移位方式;0 x12000100100 x00000000000 x00000000000 x00000000000 x00000000000 x00000000000 x80100000000 x04000001008位常數(shù)循環(huán)右移10位該常數(shù)是一個(gè)8位的常數(shù)通過循環(huán)右移偶數(shù)位得到10ARM指令的第2個(gè)操作數(shù)Rm,shift寄存器移位方式 將寄存器的移位結(jié)果作為操作數(shù)(移位操作不消耗額外的時(shí)間),但Rm值保持不變ALU桶形移位器Rd結(jié)果N預(yù)處理未預(yù)處理RmRn11 桶形移位器操作助記符說明移位操作結(jié)果Y值LSL邏輯左移x LSL yxy

6、#1-32 or RsASR算術(shù)右移x ASR y(signed)xY#1-32 or RsROR算術(shù)左移x ROR y(unsigned)xy|(x32-y)#1-31 or RsRRX擴(kuò)展的循環(huán)右移x RRX y(c flag1)noneARM指令的第2個(gè)操作數(shù)12ARM指令的第2個(gè)操作數(shù)LSL移位操作:0LSR移位操作:0ASR移位操作:ROR移位操作:RRX移位操作:C例如:ADDR1,R1,R1,LSL #3;R1=R1+R1R38.2 ARM處理器尋址方式 尋址方式是根據(jù)指令中給出的地址碼字段來實(shí)現(xiàn)尋找真實(shí)操作數(shù)地址的方式。 ARM處理器具有幾種基本尋址方式:1.寄存器尋址 2.立

7、即尋址 3.寄存器間接尋址移位尋址、間接尋址、基址變址尋址、多寄存器尋址(塊尋址) 4.堆棧尋址 5.相對尋址130 xAA0 x55R2R11. 操作數(shù)存放在寄存器中;2.指令地址碼字段給出寄存器編號(名)3.指令執(zhí)行時(shí)直接取出寄存器值來操作;MOV R1, R2; R1 = R2 SUB R0, R1, R2 ; R0 = R1-R2 寄存器尋址0 xAA141. 操作數(shù)包含在指令當(dāng)中;2. 指令地址碼部分就是數(shù)據(jù)本身;3. 取指時(shí)就取出了可立即使用的操作數(shù);MOVR0,#0 xFF00 ; R0 = #0 xFF00 SUBSR0,R0,#1 ; R0 =R0-10 x55R0MOV R

8、0,#0 xFF00立即尋址0 xFF00從代碼中獲得數(shù)據(jù)10進(jìn)制數(shù):#21,#0d572進(jìn)制數(shù): #0b0110016進(jìn)制數(shù):#0 x3a001影響標(biāo)志位寄存器尋址151. 操作數(shù)存放在寄存器中;2.指令地址碼字段給出寄存器編號(名)及移位表達(dá)式;3.指令執(zhí)行時(shí)取出寄存器值并移位,再將結(jié)果作為源操作數(shù);MOV R0, R2, LSL #3 ; R0=R28 ANDS R1, R1, R2, LSL R3 ; R1 = R1 and (R2R3)0 x55R0R20 x01寄存器移位尋址0 x080 x08邏輯左移3位寄存器尋址影響標(biāo)志位LSL、LSRASRROR、RRX16寄存器間接尋址1.

9、 操作數(shù)存放在內(nèi)存單元中;2.指令地址碼字段給出 寄存器編號(名);3.指令執(zhí)行時(shí)根據(jù)寄存器值(指針)找到相應(yīng)的存儲(chǔ)單元;LDRR1,R2; R1= R2SWPR1,R1,R2; R1 R20 x55R0R20 x400000000 xAA0 x400000000 xAA內(nèi)存單元17基址變址尋址1. 操作數(shù)存放在內(nèi)存單元中;2.指令地址碼字段給出 寄存器編號(名)和偏移量;3.指令執(zhí)行時(shí)將基址寄存器的內(nèi)容與偏移量(4K)相加/減,形成操作數(shù)的有效地址。4. 常用于查表、數(shù)組操作、功能部件寄存器訪問等。LDRR2,R3,#0 x0C ;R2=R3+0 x0CSTR R1,R0,#-4! ; 先R

10、0-4=R1, R0=R0-4LDR R0,R1 ,#4 ;R0=R1,R1R14LDR R0,R1,R2 ;R0=R1+R2前索引后索引0 x55R2R30 x400000000 xAA0 x4000000C0 xAA內(nèi)存單元18多寄存器尋址/塊復(fù)制尋址1. 操作數(shù)存放在內(nèi)存單元中;2.指令地址碼字段給出 寄存器編號(名)列表;3.編號高的寄存器總是對應(yīng)內(nèi)存中的高地址單元;4. 可完成存儲(chǔ)塊和16個(gè)寄存器或其子集之間的數(shù)據(jù)傳送。 LDMIAR1!,R2-R4,R6 ; R2= R1 , R3= R1+4; R4= R1+8 , R6= R1+0 xC, R1=R1+0 x10 STMDBR1

11、,R2-R4,R6 ; R1-4= R6 , R1-8=R4; R1-0 xC =R3, R1-0 x10=R20 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C0 x010 x020 x030 x040 x40000010內(nèi)存單元Increase AfterDecrease Before!在塊操作指令中表示地址指針要回寫19堆棧尋址1. 操作數(shù)存放在內(nèi)存棧頂單元中;2.指令地址碼字段固定使用棧頂指針SP;3.指令執(zhí)行時(shí)同多寄存器/塊尋址,可完

12、成多個(gè)數(shù)據(jù)的入棧和出棧; LDMEASP!,R2-R4,R6 ; R2= SP-10 , R3= SP-C ; R4= SP-8 , R6= SP-4,SP=SP-0 x10 STMFDSP!,R2-R4,R6 ; SP-4= R6 , SP-8=R4 ; SP-C =R3, SP-0 x10=R2, SP b)a+; Elseb+;對應(yīng)的匯編代碼:CMPR0,R1 ;比較R0(a)與R1(b)ADDHIR0,R0,#1 ;若R0R1,則R0=R0+1ADDLSR1,R1,#1 ;若R01,則R1=R1+12526指令集介紹 ARM指令集指令格式數(shù)據(jù)處理指令的編碼格式指令條件碼I=1:立即數(shù);

13、 I=0:寄存器移位第二操作數(shù)Rd目標(biāo)寄存器Rn第一操作數(shù)寄存器S=1:根據(jù)結(jié)果設(shè)置CPRS中的條件碼S=0:不設(shè)置CPRS中的條件碼帶進(jìn)位加法ADC0101帶進(jìn)位減法指令SBC0110帶進(jìn)位逆向減法指令RSC0111位測試指令TST1000相等測試指令TEQ1001比較指令CMP1010負(fù)數(shù)比較指令CMN1011邏輯或操作指令ORR1100數(shù)據(jù)傳送MOV1101位清除指令BIC1110數(shù)據(jù)非傳送MVN1111加法運(yùn)算指令A(yù)DD0100逆向減法指令RSB0011減法運(yùn)算指令SUB0010邏輯異或操作指令EOR0001邏輯與操作指令A(yù)ND0000說明指令助記符操作碼27乘法指令的編碼格式Rm被乘

14、數(shù)寄存器Rn: MLA指令相加的寄存器RdLo: 64位乘法指令目標(biāo)寄存器的低32位Rd: 目標(biāo)寄存器RdHi: 64位乘法指令目標(biāo)寄存器的高32位Rs為乘數(shù)寄存器64位有符號乘加指令SMLAL11164位有符號乘法指令SMULL11064位無符號乘加指令UMLAL10164位無符號乘法指令UMULL10032位乘加指令MLA00132位乘法指令MUL000說明指令助記符操作碼28單數(shù)據(jù)存取指令的編碼格式字和無符號字節(jié)存取指令LDR/STRP表示前/后變址U=1:加 U=0: 減B=0:字節(jié) B=1:字 W=1:回寫基址寄存器,對應(yīng)指令中的“!” W=0:不回寫存儲(chǔ)單元尋址方式L=1:加載 L

15、=0:存儲(chǔ)Rd為源/目標(biāo)寄存器Rn為基址寄存器S=1:有符號數(shù), S=0: 無符號數(shù)H=1:半字,H=0:字節(jié)存儲(chǔ)單元尋址方式半字和有符號字節(jié)存取指令LDR/STRI=1立即數(shù) I=0寄存器移位29數(shù)據(jù)塊(多寄存器)存取指令的編碼格式數(shù)據(jù)塊(多寄存器)存取指令編碼LDM/STMS對應(yīng)于指令中的”符號:在恢復(fù)PC時(shí)也同時(shí)恢復(fù)SPSRP表示前/后變址U表示加/減W表示回寫(!)寄存器列表Rn為基址寄存器L=1:加載 L=0:存儲(chǔ)30寄存器/存儲(chǔ)器交換指令的編碼格式B用于區(qū)別無符號字節(jié)(B為1)或字(B為0)Rm源寄存器Rd目標(biāo)寄存器Rn為基址寄存器SWPR1,R1,R0; R1R0SWPBR1,R

16、2,R0;將R0指向的存儲(chǔ)單元低字節(jié)數(shù)據(jù)讀;取到R1中(高24位清零),并將R2的;內(nèi)容寫入到該內(nèi)存單元中的最低字節(jié)31分支指令的編碼格式分支指令B/BL指令編碼格式L=0:B指令,跳轉(zhuǎn)L=1: BL指令,保存PC并跳轉(zhuǎn),可返回24位有符號立即數(shù)(偏移量)分支指令BX指令編碼格式Rm目標(biāo)地址寄存器,該寄存器裝載31位跳轉(zhuǎn)地址,最低位為1時(shí)切換到Thumb狀態(tài)32狀態(tài)寄存器訪問指令的編碼格式指定傳送的區(qū)域,可以為以下字母(必須小寫)的一個(gè)或者組合:c 控制域屏蔽字節(jié)(psr7.0)x 擴(kuò)展域屏蔽字節(jié)(psr15.8)s 狀態(tài)域屏蔽字節(jié)(psr23.16)f 標(biāo)志域屏蔽字節(jié)(psr31.24)要傳

17、送到狀態(tài)寄存器指定域的立即數(shù)MSR指令編碼1MSR指令編碼28位立即數(shù)目標(biāo)寄存器,不能為R15R 0:CPSR R 1:SPSRMRS指令編碼立即數(shù)移位次數(shù)33軟中斷指令的編碼格式SWIcond immed_24指令執(zhí)行的條件碼指令傳遞的參數(shù)(24位立即數(shù),其值為02241);執(zhí)行時(shí)CPU忽略該參數(shù),交OS處理。34358.3 ARM指令集指令分類數(shù)據(jù)處理指令:使用和改變寄存器的值數(shù)據(jù)傳送指令:寄存器與存儲(chǔ)器之間的數(shù)據(jù)傳送控制流指令:分支分支和鏈接:保存返回的地址,以恢復(fù)次序陷入系統(tǒng)代碼程序狀態(tài)寄存器處理指令協(xié)處理器指令異常產(chǎn)生指令36ARM指令助記符數(shù)據(jù)處理指令MOV 數(shù)據(jù)傳送 MVN 數(shù)據(jù)

18、取反傳送CMP 比較 CMN 反值比較TST 位測試 TEQ 相等測試ADD 加法指令 ADC 帶進(jìn)位加法SUB 減法 SBC 帶借位減法RSB 逆向減法 RSC 帶借位的逆向減法AND 邏輯與 ORR 邏輯或EOR 邏輯異或 BIC 位清除乘法與乘加指令MUL 32位乘法 MLA 32位乘加SMULL 64位有符號數(shù)乘法 SMLAL 64位有符號數(shù)乘加UMULL 64位無符號數(shù)乘法 UMLAL 64位無符號數(shù)乘加跳轉(zhuǎn)指令B 跳轉(zhuǎn) BL 帶返回的跳轉(zhuǎn)BLX 帶返回和狀態(tài)切換的跳轉(zhuǎn) BX 帶狀態(tài)切換的跳轉(zhuǎn)程序狀態(tài)寄存器存取MRS 程序狀態(tài)寄存器-通用寄存器MSR 通用寄存器程序狀態(tài)寄存器37AR

19、M指令助記符數(shù)據(jù)交換指令SWP 字?jǐn)?shù)據(jù)交換 SWPB 字節(jié)數(shù)據(jù)交換移位元指令LSL 邏輯左移 ASL 算術(shù)左移LSR 邏輯右移 ASR 算術(shù)右移ROR 循環(huán)右移 RRX 帶進(jìn)位的循環(huán)右移寄存器加載/存儲(chǔ)指令LDR 字?jǐn)?shù)據(jù)加載 LDRB 字節(jié)數(shù)據(jù)加載LDRH 半字?jǐn)?shù)據(jù)加載 STRH 半字?jǐn)?shù)據(jù)存儲(chǔ) STR 字?jǐn)?shù)據(jù)存儲(chǔ) STRB 字節(jié)數(shù)據(jù)存儲(chǔ)LDM 連續(xù)數(shù)據(jù)加載 STM 連續(xù)數(shù)據(jù)存儲(chǔ)協(xié)處理器指令CDP 協(xié)處理器操作 LDC 協(xié)處理器數(shù)據(jù)加載STC 協(xié)處理器數(shù)據(jù)存儲(chǔ)MCR ARM處理器寄存器協(xié)處理器寄存器的數(shù)據(jù)傳送MRC 協(xié)處理器寄存器ARM處理器寄存器的數(shù)據(jù)蒼松38ARM指令集 數(shù)據(jù)處理指令大致可分

20、為3類: 數(shù)據(jù)傳送指令;算術(shù)邏輯運(yùn)算指令;比較指令。 數(shù)據(jù)處理指令只能對寄存器的內(nèi)容進(jìn)行操作,而不能對內(nèi)存中的數(shù)據(jù)進(jìn)行操作。所有ARM數(shù)據(jù)處理指令均可選擇使用S后綴,以使指令影響狀態(tài)標(biāo)志。 ARM指令集ARM數(shù)據(jù)處理指令39ARM數(shù)據(jù)處理指令指令編碼指令執(zhí)行的條件碼I用于區(qū)別立即數(shù)(I為1)和寄存器移位(I為0)opcode數(shù)據(jù)處理指令操作碼第二操作數(shù)Rd目標(biāo)寄存器Rn第一操作數(shù)寄存器S設(shè)置條件碼,與指令中的S位對應(yīng)帶進(jìn)位加法ADC0101帶進(jìn)位減法指令SBC0110帶進(jìn)位逆向減法指令RSC0111位測試指令TST1000相等測試指令TEQ1001比較指令CMP1010負(fù)數(shù)比較指令CMN101

21、1邏輯或操作指令ORR1100數(shù)據(jù)傳送MOV1101位清除指令BIC1110數(shù)據(jù)非傳送MVN1111加法運(yùn)算指令A(yù)DD0100逆向減法指令RSB0011減法運(yùn)算指令SUB0010邏輯異或操作指令EOR0001邏輯與操作指令A(yù)ND0000說明指令助記符操作碼opcode操作碼功能表操作碼條件助記符標(biāo)志含義0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1無符號數(shù)大于或等于0011CC/LOC=0無符號數(shù)小于0100MIN=1負(fù)數(shù)0101PLN=0正數(shù)或零0110VSV=1溢出0111VCV=0沒有溢出1000HIC=1,Z=0無符號數(shù)大于1001LSC=0,Z=1無符號數(shù)小于

22、或等于1010GEN=V有符號數(shù)大于或等于 1011LTN!=V有符號數(shù)小于 1100GTZ=0,N=V有符號數(shù)大于 1101LEZ=1,N!=V有符號數(shù)小于或等于 1110AL任何無條件執(zhí)行 (指令默認(rèn)條件) 1111NV任何從不執(zhí)行(不要使用) 40助記符說明操作條件碼位置MOV Rd,operand2數(shù)據(jù)傳送Rdoperand2 MOVcondSMVN Rd,operand2數(shù)據(jù)非傳送Rd(operand2)MVNcondSARM數(shù)據(jù)處理指令數(shù)據(jù)傳送注:當(dāng)后綴S時(shí),這些指令根據(jù)結(jié)果更新標(biāo)志N和Z,在計(jì)算Operand2時(shí)更新標(biāo)志C,不影響標(biāo)志V。41助記符說明操作條件碼位置MOV Rd,

23、operand2數(shù)據(jù)傳送Rdoperand2 MOVcondSMVN Rd,operand2數(shù)據(jù)非傳送Rd(operand2)MVNcondSARM數(shù)據(jù)處理指令數(shù)據(jù)傳送 MOV指令將8位位圖立即數(shù)(參看“第2操作數(shù):#immed_8r常數(shù)表達(dá)式 ”)或寄存器傳送到目標(biāo)寄存器(Rd),可用于移位運(yùn)算等操作。指令格式如下: MOVcondS Rd,operand2 MOV指令舉例如下: MOVR1,#0 xF000000B;R1= 0 xF000000B MOVR0,R1;R0=R1 MOVSR3,R1,LSL #2;R3=R12,并影響標(biāo)志位 MOVPC,LR;PC=LR,子程序返回 42助記符

24、說明操作條件碼位置MOV Rd,operand2數(shù)據(jù)傳送Rdoperand2 MOVcondSMVN Rd,operand2數(shù)據(jù)非傳送Rd(operand2)MVNcondSARM數(shù)據(jù)處理指令數(shù)據(jù)傳送 MVN指令將8位圖立即數(shù)(參看“第2操作數(shù):#immed_8r常數(shù)表達(dá)式 ”)或寄存器(operand2)按位取反后傳送到目標(biāo)寄存器(Rd),因?yàn)槠渚哂腥》垂δ?,所以可以裝載范圍更廣的立即數(shù)。指令格式如下: MVNcondS Rd,operand2 MVN指令舉例如下: MVNR1,#0 xFF;R1=0 xFFFFFF00 MVNR1,R2;將R2按位取反,結(jié)果存到R143助記符說明操作條件碼

25、位置ADD Rd, Rn, operand2加法運(yùn)算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2減法運(yùn)算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向減法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進(jìn)位加法RdRn+operand2+CarryADCcondSSBC Rd, Rn, operand2帶進(jìn)位減法指令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2帶進(jìn)位逆向減法指令Rdoperand2-Rn-(NO

26、T)CarryRSCcondSARM數(shù)據(jù)處理指令算術(shù)運(yùn)算注:這些指令影響N,Z,C和V標(biāo)志位。44助記符說明操作條件碼位置ADD Rd, Rn, operand2加法運(yùn)算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2減法運(yùn)算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向減法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進(jìn)位加法RdRn+operand2+CarryADCcondSSBC Rd, Rn, operand2帶進(jìn)位減法指令RdRn-operand2-(NOT)

27、CarrySBCcondSRSC Rd, Rn, operand2帶進(jìn)位逆向減法指令Rdoperand2-Rn-(NOT)CarryRSCcondSARM數(shù)據(jù)處理指令算術(shù)運(yùn)算 加法運(yùn)算指令A(yù)DD指令將operand2的值與Rn的值相加,結(jié)果保存到Rd寄存器。指令格式如下: ADDcondS Rd,Rn,operand2 應(yīng)用示例: ADDS R1,R1,#1020;R1=R1+1020,并影響標(biāo)志位 ADD R1,R1,R2,LSL #2;R1=R1+R22 45助記符說明操作條件碼位置ADD Rd, Rn, operand2加法運(yùn)算指令RdRn+operand2ADDcondSSUB Rd,

28、 Rn, operand2減法運(yùn)算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向減法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進(jìn)位加法RdRn+operand2+CarryADCcondSSBC Rd, Rn, operand2帶進(jìn)位減法指令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2帶進(jìn)位逆向減法指令Rdoperand2-Rn-(NOT)CarryRSCcondSARM數(shù)據(jù)處理指令算術(shù)運(yùn)算 減法運(yùn)算指令SUB指令用寄存器Rn減去operand2

29、,結(jié)果保存到Rd中。指令格式如下: SUBcondS Rd,Rn,operand2 應(yīng)用示例: SUBSR0,R0,#240;R0=R0-240 ,并影響標(biāo)志位 SUBSR2,R1,R2;R2=R1-R2 ,并影響標(biāo)志位 46助記符說明操作條件碼位置ADD Rd, Rn, operand2加法運(yùn)算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2減法運(yùn)算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向減法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進(jìn)位加法RdRn+oper

30、and2+CarryADCcondSSBC Rd, Rn, operand2帶進(jìn)位減法指令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2帶進(jìn)位逆向減法指令Rdoperand2-Rn-(NOT)CarryRSCcondSARM數(shù)據(jù)處理指令算術(shù)運(yùn)算 逆向減法運(yùn)算指令RSB指令將operand2的值減去Rn,結(jié)果保存到Rd中。指令格式如下: RSBcondS Rd,Rn,operand2 應(yīng)用示例: RSB R3,R1,#0 xFF00 ;R3=0 xFF00-R1 RSBS R1,R2,R2,LSL #2 ;R1=(R210, 則執(zhí)行本指令

31、 57助記符說明操作條件碼位置CMP Rn, operand2比較指令標(biāo)志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2負(fù)數(shù)比較指令標(biāo)志N、Z、C、VRn+operand2CMNcondTST Rn, operand2位測試指令標(biāo)志N、Z、C、VRn & operand2TSTcondTEQ Rn, operand2相等測試指令標(biāo)志N、Z、C、VRn operand2TEQcondARM數(shù)據(jù)處理指令比較指令 負(fù)數(shù)比較指令CMN指令使用寄存器Rn的值加上operand2的值,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判斷是

32、否執(zhí)行。指令格式如下: CMNcondRn, operand2 應(yīng)用示例: CMNR0,#1 ; R0+1,判斷R0是否為1的補(bǔ)碼;如果是,則設(shè)置Z標(biāo)志位58助記符說明操作條件碼位置CMP Rn, operand2比較指令標(biāo)志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2負(fù)數(shù)比較指令標(biāo)志N、Z、C、VRn+operand2CMNcondTST Rn, operand2位測試指令標(biāo)志N、Z、C、VRn & operand2TSTcondTEQ Rn, operand2相等測試指令標(biāo)志N、Z、C、VRn operand2TEQcondARM數(shù)據(jù)處理指令比較指令

33、負(fù)數(shù)比較指令CMN指令使用寄存器Rn的值加上operand2的值,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判斷是否執(zhí)行。指令格式如下: CMNcondRn, operand2注意:CMN指令與ADDS指令的區(qū)別在于CMN指令不保存運(yùn)算結(jié)果。CMN指令可用于負(fù)數(shù)比較,比如CMN R0,#1指令則表示R0與-1比較,若R0為-1(即1的補(bǔ)碼),則Z置位;否則Z復(fù)位。 59助記符說明操作條件碼位置CMP Rn, operand2比較指令標(biāo)志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2負(fù)數(shù)比較指令標(biāo)志N、Z、C、VRn+op

34、erand2CMNcondTST Rn, operand2位測試指令標(biāo)志N、Z、C、VRn & operand2TSTcondTEQ Rn, operand2相等測試指令標(biāo)志N、Z、C、VRn operand2TEQcondARM數(shù)據(jù)處理指令比較指令 位測試指令TST指令將寄存器Rn的值與operand2的值按位作邏輯“與”操作,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判斷是否執(zhí)行。指令格式如下: TSTcond Rn, operand2 應(yīng)用示例: TSTR0,#0 x01; 判斷R0的最低位是否為0 TSTR1,#0 x0F; 判斷R1的低4位是否為

35、0 60助記符說明操作條件碼位置CMP Rn, operand2比較指令標(biāo)志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2負(fù)數(shù)比較指令標(biāo)志N、Z、C、VRn+operand2CMNcondTST Rn, operand2位測試指令標(biāo)志N、Z、C、VRn & operand2TSTcondTEQ Rn, operand2相等測試指令標(biāo)志N、Z、C、VRn operand2TEQcondARM數(shù)據(jù)處理指令比較指令 位測試指令TST指令將寄存器Rn的值與operand2的值按位作邏輯“與”操作,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的

36、條件標(biāo)志來判斷是否執(zhí)行。指令格式如下: TSTcond Rn, operand2注意:TST指令與ANDS指令的區(qū)別在于TST指令不保存運(yùn)算結(jié)果。TST指令通常與EQ、NE條件碼配合使用,當(dāng)所有測試位均為0時(shí),EQ有效(Z=1),而只要有一個(gè)測試位不為0,則NE有效(Z=0) 。 61助記符說明操作條件碼位置CMP Rn, operand2比較指令標(biāo)志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2負(fù)數(shù)比較指令標(biāo)志N、Z、C、VRn+operand2CMNcondTST Rn, operand2位測試指令標(biāo)志N、Z、C、VRn & operand2TSTcon

37、dTEQ Rn, operand2相等測試指令標(biāo)志N、Z、C、VRn operand2TEQcondARM數(shù)據(jù)處理指令比較指令 相等測試指令TEQ指令將寄存器Rn的值與operand2的值按位作邏輯“異或”操作,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判斷是否執(zhí)行。指令格式如下: TEQcond Rn, operand2 應(yīng)用示例: TEQR0,R1; 比較R0與R1是否相等 (不影響V位和C位)62助記符說明操作條件碼位置CMP Rn, operand2比較指令標(biāo)志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2負(fù)數(shù)比

38、較指令標(biāo)志N、Z、C、VRn+operand2CMNcondTST Rn, operand2位測試指令標(biāo)志N、Z、C、VRn & operand2TSTcondTEQ Rn, operand2相等測試指令標(biāo)志N、Z、C、VRn operand2TEQcondARM數(shù)據(jù)處理指令比較指令 相等測試指令TEQ指令將寄存器Rn的值與operand2的值按位作邏輯“異或”操作,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判斷是否執(zhí)行。指令格式如下: TEQcond Rn, operand2注意:TEQ指令與EORS指令的區(qū)別在于TEQ指令不保存運(yùn)算結(jié)果。使用TEQ進(jìn)行

39、相等測試時(shí),常與EQ、NE條件碼配合使用。當(dāng)兩個(gè)數(shù)據(jù)相等時(shí),EQ有效;否則NE有效。 63ARM指令集乘法指令 ARM具有三種乘法指令,分別為:3232位乘法指令;32 32位乘加指令;32 32位結(jié)果為64位的乘/乘加指令。64ARM指令乘法指令乘法指令編碼指令執(zhí)行的條件碼Opcode乘法指令操作碼S設(shè)置條件碼,與指令中的S位對應(yīng)Rm為被乘數(shù)寄存器Rn/RdLo為MLA指令相加的寄存器或64位乘法指令的目標(biāo)寄存器(低32位)Rd/RdHi為目標(biāo)寄存器或64位乘法指令的目標(biāo)寄存器(高32位)Rs為乘數(shù)寄存器64位有符號乘加指令SMLAL11164位有符號乘法指令SMULL11064位無符號乘加

40、指令UMLAL10164位無符號乘法指令UMULL10032位乘加指令MLA00132位乘法指令MUL000說明指令助記符操作碼opcode操作碼功能表65助記符說明操作條件碼位置MUL Rd,Rm,Rs32位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUMULL RdLo,RdHi,Rm,Rs64位無符號乘法指令(RdLo,RdHi) Rm*Rs UMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位無符號乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)UML

41、ALcondSSMULL RdLo,RdHi,Rm,Rs64位有符號乘法指令(RdLo,RdHi) Rm*RsSMULLcondSSMLAL RdLo,RdHi,Rm,Rs64位有符號乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)SMLALcondSARM指令乘法指令66助記符說明操作條件碼位置MUL Rd,Rm,Rs32位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUMULL RdLo,RdHi,Rm,Rs64位無符號乘法指令(RdLo,RdHi) Rm*Rs UMULL

42、condSUMLAL RdLo,RdHi,Rm,Rs64位無符號乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有符號乘法指令(RdLo,RdHi) Rm*RsSMULLcondSSMLAL RdLo,RdHi,Rm,Rs64位有符號乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)SMLALcondSARM指令乘法指令 32位乘法指令MUL指令將Rm和Rs中的值相乘,結(jié)果的低32位保存到Rd中。 Rd,Rm,Rs不能為R15。只影響CPSR中的N位和Z位,不影響V,C不確定。指令格式如下:M

43、ULcondS Rd,Rm,Rs 應(yīng)用示例: MUL R1,R2,R3 ;R1=R2R3 MULS R0,R3,R7 ;R0=R3R7,影響CPSR中的N位和Z位 67助記符說明操作條件碼位置MUL Rd,Rm,Rs32位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUMULL RdLo,RdHi,Rm,Rs64位無符號乘法指令(RdLo,RdHi) Rm*Rs UMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位無符號乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,Rd

44、Hi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有符號乘法指令(RdLo,RdHi) Rm*RsSMULLcondSSMLAL RdLo,RdHi,Rm,Rs64位有符號乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)SMLALcondSARM指令乘法指令 32位乘加指令MLA指令將Rm和Rs中的值相乘,再將乘積加上第3個(gè)操作數(shù),結(jié)果的低32位保存到Rd中。 Rd,Rm,Rs,Rn不能為R15。只影響CPSR中的N位和Z位,不影響V,C不確定。指令格式如下: MLAcondS Rd,Rm,Rs,Rn 應(yīng)用示例: MLA R1,R2,R3,R0; R1

45、=R2R3+R068助記符說明操作條件碼位置MUL Rd,Rm,Rs32位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUMULL RdLo,RdHi,Rm,Rs64位無符號乘法指令(RdLo,RdHi) Rm*Rs UMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位無符號乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有符號乘法指令(RdLo,RdHi) Rm*RsSMULLcondSSML

46、AL RdLo,RdHi,Rm,Rs64位有符號乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)SMLALcondSARM指令乘法指令 64位無符號乘法指令UMULL指令將Rm和Rs中的值作無符號數(shù)相乘,結(jié)果的低32位保存到RdLo中,而高32位保存到RdHi中。 RdLo/Hi,Rm,Rs不能為R15。 RdLo/Hi,Rm必須是不同的寄存器。只影響CPSR中的N位和Z位,標(biāo)志C和V不確定。指令格式如下: UMULLcondS RdLo,RdHi,Rm,Rs 應(yīng)用示例: UMULL R0,R1,R5,R8; (R1、R0)=R5R8 69助記符說明操作條件碼位置MUL Rd

47、,Rm,Rs32位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUMULL RdLo,RdHi,Rm,Rs64位無符號乘法指令(RdLo,RdHi) Rm*Rs UMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位無符號乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有符號乘法指令(RdLo,RdHi) Rm*RsSMULLcondSSMLAL RdLo,RdHi,Rm,Rs64位有符號乘加指令

48、(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)SMLALcondSARM指令乘法指令 64位無符號乘加指令UMLAL指令將Rm和Rs中的值作無符號數(shù)相乘,64位乘積與RdHi、RdLo相加,結(jié)果的低32位保存到RdLo中,而高32位保存到RdHi中。 RdLo/Hi,Rm,Rs不能為R15。 RdLo/Hi,Rm必須是不同的寄存器。只影響CPSR中的N位和Z位,標(biāo)志C和V不確定。指令格式如下: UMLALcondS RdLo,RdHi,Rm,Rs 應(yīng)用示例: UMLAL R0,R1,R5,R8;(R1、R0)=R5R8+(R1、R0) 70助記符說明操作條件碼位置MUL Rd,Rm

49、,Rs32位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUMULL RdLo,RdHi,Rm,Rs64位無符號乘法指令(RdLo,RdHi) Rm*Rs UMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位無符號乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有符號乘法指令(RdLo,RdHi) Rm*RsSMULLcondSSMLAL RdLo,RdHi,Rm,Rs64位有符號乘加指令(Rd

50、Lo,RdHi) Rm*Rs+(RdLo,RdHi)SMLALcondSARM指令乘法指令 64位有符號乘法指令SMULL指令將Rm和Rs中的值作有符號數(shù)相乘,結(jié)果的低32位保存到RdLo中,而高32位保存到RdHi中。 RdLo/Hi,Rm,Rs不能為R15。 RdLo/Hi,Rm必須是不同的寄存器。只影響CPSR中的N位和Z位,標(biāo)志C和V不確定。指令格式如下: SMULLcondS RdLo,RdHi,Rm,Rs 應(yīng)用示例: SMULLR2,R3,R7,R6; (R3、R2)=R7R6 71助記符說明操作條件碼位置MUL Rd,Rm,Rs32位乘法指令RdRm*Rs (RdRm)MULco

51、ndSMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUMULL RdLo,RdHi,Rm,Rs64位無符號乘法指令(RdLo,RdHi) Rm*Rs UMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位無符號乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有符號乘法指令(RdLo,RdHi) Rm*RsSMULLcondSSMLAL RdLo,RdHi,Rm,Rs64位有符號乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)SML

52、ALcondSARM指令乘法指令 64位有符號乘加指令SMLAL指令將Rm和Rs中的值作有符號數(shù)相乘,64位乘積與RdHi、RdLo相加,結(jié)果的低32位保存到RdLo中,而高32位保存到RdHi中。 RdLo/Hi,Rm,Rs不能為R15。 RdLo/Hi,Rm必須是不同的寄存器。只影響CPSR中的N位和Z位,標(biāo)志C和V不確定。指令格式如下: SMLALcondS RdLo,RdHi,Rm,Rs 應(yīng)用示例: SMLALR2,R3,R7,R6; (R3、R2)=R7R6+(R3、R2) 72跳轉(zhuǎn)指令(分支指令) 在ARM中有兩種方式可以實(shí)現(xiàn)程序的跳轉(zhuǎn),一種是使用分支指令直接跳轉(zhuǎn),另一種則是直接向

53、PC寄存器賦值實(shí)現(xiàn)跳轉(zhuǎn)。 分支指令有以下四種:分支指令B;帶鏈接的分支指令BL;帶狀態(tài)切換的分支指令BX;帶鏈接及狀態(tài)切換的分支指令BLX 。ARM指令集分支指令73ARM分支指令指令編碼分支指令B/BL指令編碼格式指令執(zhí)行的條件碼L區(qū)別B指令(L為0)和BL指令(L為1)24位有符號立即數(shù)(偏移量)分支指令BX指令編碼格式指令執(zhí)行的條件碼Rm目標(biāo)地址寄存器,該寄存器裝載跳轉(zhuǎn)地址74助記符說明操作條件碼位置B label分支指令PClabelBcondBL label帶鏈接的分支指令LRPC-4,PClabelBLcondBX Rm帶狀態(tài)切換的分支指令PCRm,切換處理器狀態(tài)BXcondBLX

54、 label/Rm帶鏈接及狀態(tài)切換的分支指令PCRm/label,切換處理器狀態(tài)BLXcondARM指令分支指令75助記符說明操作條件碼位置B label分支指令PClabelBcondBL label帶鏈接的分支指令LRPC-4,PClabelBLcondBX Rm帶狀態(tài)切換的分支指令PCRm,切換處理器狀態(tài)BXcondARM指令分支指令 分支指令B指令,該指令跳轉(zhuǎn)范圍限制在當(dāng)前指令的32M字節(jié)地址內(nèi)(ARM指令為字對齊,最低2位地址固定為0)。指令格式如下:Bcond Label 應(yīng)用示例: B WAITA; 跳轉(zhuǎn)到WAITA標(biāo)號處 B0 x1234; 跳轉(zhuǎn)到絕對地址0 x1234處 76

55、BL LabelxxxxxxLabelxxxMOV PC,LRAddr1Addr2xxxxxxLRPC助記符說明操作條件碼位置B label分支指令PClabelBcondBL label帶鏈接的分支指令LRPC-4,PClabelBLcondBX Rm帶狀態(tài)切換的分支指令PCRm,切換處理器狀態(tài)BXcondARM指令分支指令 帶鏈接的分支指令BL指令適用于子程序調(diào)用,使用該指令后,下一條指令的地址被拷貝到R14(即LR) 連接寄存器中,然后跳轉(zhuǎn)到指定地址運(yùn)行程序。跳轉(zhuǎn)范圍限制在當(dāng)前指令的32M字節(jié)地址內(nèi)。指令格式如下:BLcond LabelAddr1LabelAddr2Addr21.當(dāng)程序

56、執(zhí)行到BL跳轉(zhuǎn)指令時(shí),硬件將下一條指令的地址Addr2裝入LR寄存器,并把跳轉(zhuǎn)地址裝入程序計(jì)數(shù)器(PC)2. 程序跳轉(zhuǎn)到目標(biāo)地址Label繼續(xù)執(zhí)行,當(dāng)子程序執(zhí)行結(jié)束后,將LR寄存器內(nèi)容存入PC,返回調(diào)用函數(shù)繼續(xù)執(zhí)行 應(yīng)用示例(調(diào)用子程序): BL Label77助記符說明操作條件碼位置B label分支指令PClabelBcondBL label帶鏈接的分支指令LRPC-4,PClabelBLcondBX Rm帶狀態(tài)切換的分支指令PCRm,切換處理器狀態(tài)BXcondARM指令分支指令 帶狀態(tài)切換的分支指令BX指令,該指令可以根據(jù)跳轉(zhuǎn)地址(Rm)的最低位來切換處理器狀態(tài)。其跳轉(zhuǎn)范圍限制在當(dāng)前指令

57、的32M字節(jié)地址內(nèi)(ARM指令為字對齊,最低2位地址固定為0)。指令格式如下:BXcond Rm跳轉(zhuǎn)地址Rm0跳轉(zhuǎn)后CPSR標(biāo)志T位處理器狀態(tài)00ARM11Thumb78助記符說明操作條件碼位置B label分支指令PClabelBcondBL label帶鏈接的分支指令LRPC-4,PClabelBLcondBX Rm帶狀態(tài)切換的分支指令PCRm,切換處理器狀態(tài)BXcondARM指令分支指令 帶狀態(tài)切換的分支指令BX指令,該指令可以根據(jù)跳轉(zhuǎn)地址(Rm)的最低位來切換處理器狀態(tài)。其跳轉(zhuǎn)范圍限制在當(dāng)前指令的32M字節(jié)地址內(nèi)(ARM指令為字對齊,最低2位地址固定為0)。 Rm的位0不用作地址的一部

58、分。若Rm的位0為1,則指令將CPSR中的標(biāo)志T置位,且將目標(biāo)地址的代碼解釋為Thumb代碼;若Rm的位0為0,則Rm的位1就不能為1 。指令格式如下:BXcond Rm 應(yīng)用示例: ADRL R0,ThumbFun+1 ;將Thumb程序的入口地址加1存入R0 BX R0 ; 跳轉(zhuǎn)到R0指定的地址, ;并根據(jù)R0的最低位來切換處理器狀態(tài)79加載/存儲(chǔ)指令A(yù)RM指令集存儲(chǔ)器訪問指令A(yù)RM處理器是典型的RISC處理器,對存儲(chǔ)器的訪問只能使用加載和存儲(chǔ)指令實(shí)現(xiàn)。ARM7處理器是馮諾依曼存儲(chǔ)結(jié)構(gòu),RAM存儲(chǔ)空間及I/O映射空間統(tǒng)一編址,除對RAM操作以外,對外圍IO、程序數(shù)據(jù)的訪問均要通過加載/存儲(chǔ)

59、指令進(jìn)行。存儲(chǔ)器訪問指令分為單寄存器操作指令和多寄存器操作指令一、單寄存器操作指令LDR/STR用于訪問內(nèi)存變量、內(nèi)存緩沖區(qū)數(shù)據(jù)、查表、控制外圍部件等。若用LDR指令加載數(shù)據(jù)到PC寄存器,則實(shí)現(xiàn)程序跳轉(zhuǎn)又分為“字和無符號字節(jié)加載存儲(chǔ)指令”及“半字和有符號字節(jié)加載存儲(chǔ)指令”兩類。二、多寄存器操作指令LDM/STM主要用于現(xiàn)場保護(hù)、數(shù)據(jù)復(fù)制、常數(shù)傳遞等。三、數(shù)據(jù)交換指令SWP80助記符說明操作條件碼位置LDR Rd,addressing 加載字?jǐn)?shù)據(jù)Rdaddressing,addressing索引LDRcondLDRB Rd,addressing 加載無符號字節(jié)數(shù)據(jù)Rdaddressing,add

60、ressing索引LDRcondBLDRT Rd,addressing以用戶模式加載字?jǐn)?shù)據(jù)Rdaddressing,addressing索引LDRcondTLDRBT Rd, addressing 以用戶模式加載無符號字節(jié)數(shù)據(jù)Rdaddressing,addressing索引LDRcondBTLDRH Rd, addressing 加載無符號半字?jǐn)?shù)據(jù)Rdaddressing,addressing索引LDRcondHLDRSB Rd, addressing 加載有符號字節(jié)數(shù)據(jù)Rdaddressing,addressing索引LDRcondSBLDRSH Rd, addressing加載有符號半字

溫馨提示

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

最新文檔

評論

0/150

提交評論