微處理器系統結構與嵌入式系統設計:第8章 ARM匯編指令_第1頁
微處理器系統結構與嵌入式系統設計:第8章 ARM匯編指令_第2頁
微處理器系統結構與嵌入式系統設計:第8章 ARM匯編指令_第3頁
微處理器系統結構與嵌入式系統設計:第8章 ARM匯編指令_第4頁
微處理器系統結構與嵌入式系統設計:第8章 ARM匯編指令_第5頁
已閱讀5頁,還剩52頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第八章ARM匯編指令ARM機器指令編碼格式 ARM采用三地址指令格式:ARM匯編指令書寫格式 S , 其中號內的項是必須的,號內的項可選。opcode:指令助記符;cond:執行條件;S:是否影響CPSR寄存器的值;Rd:目標寄存器;Rn:第1個操作數的寄存器;operand2:第2個操作數(#immed_8r、Rm、Rm,shift);指令語法目標寄存器(Rd)源寄存器1(Rn )源寄存器2(Rm)ADD r3,r1,r2r3r1r2*3/95操作碼條件助記符標志含義0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1無符號數大于或等于0011CC/LOC=0無符號數小于0

2、100MIN=1負數0101PLN=0正數或零0110VSV=1溢出0111VCV=0沒有溢出1000HIC=1,Z=0無符號數大于1001LSC=0,Z=1無符號數小于或等于1010GEN=V有符號數大于或等于 1011LTN!=V有符號數小于 1100GTZ=0,N=V有符號數大于 1101LEZ=1,N!=V有符號數小于或等于 1110AL任何無條件執行 (指令默認條件) 1111NV任何從不執行(不要使用) 所有的ARM指令都可以條件執行,而Thumb指令只有B(跳轉)指令具有條件執行 功能。如果指令不標明條件代碼,將默認為無條件(AL)執行ARM指令條件碼cond4/95ARM指令中

3、的第2操作數0 x12000100100 x00000000000 x00000000000 x00000000000 x00000000000 x00000000000 x80100000000 x04000001008位常數循環右移10位常數#immed_8r由一個8位常數通過循環右移偶數位得到:Rm,shift由Rm移位得到。移位不消耗額外時間,且Rm值不變。結果NALU桶形移位器Rd預處理未預處理RmRnLSL0LSR0ASRRORRRXC*桶形移位器的操作助記符功能表達式操 作Y值LSL邏輯左移x LSL yX y#132 or RsASR算術右移x ASR y(signed)x Y

4、#132 or RsROR循環邏輯右移x ROR y(unsigned)x y|( x 32-y)#131 or RsRRX擴展循環右移x RRX y(c flag 1)noneADDR1,R1,R1,LSL #3;R1=R1+R1R3*6/95ARM處理器尋址方式 尋址方式是根據指令中給出的地址碼字段來實現尋找真實操作數地址的方式。 ARM處理器具有幾種基本尋址方式:1.寄存器尋址 2.立即尋址 3.寄存器間接尋址移位尋址、間接尋址、基址變址尋址、多寄存器尋址(塊尋址) 4.堆棧尋址 5.相對尋址7/951. 操作數存放在寄存器中;2.指令地址碼字段給出寄存器編號(名);3.指令執行時直接取

5、出寄存器值來操作;MOV R1, R2; R1 = R2 SUB R0, R1, R2 ; R0 = R1-R2 寄存器尋址0 xAA0 x55R2R10 xAA*8/951. 操作數包含在指令當中;2. 指令地址碼部分就是數據本身;3. 取指時就取出了可立即使用的操作數;MOV R0,#0 xFF00 ; R0 = #0 xFF00 SUBS R0,R0,#1 ; R0 =R0-1立即尋址0 x55R0MOV R0,#0 xFF000 xFF00從代碼中獲得數據10進制數:#21,#0d572進制數: #0b0110016進制數:#0 x3a001影響標志位寄存器尋址*9/951. 操作數存

6、放在寄存器中;2.指令地址碼字段給出寄存器編號(名)及移位表達式;3.指令執行時取出寄存器值并移位,再將結果作為源操作數;MOV R0, R2, LSL #3 ; R0=R28 ANDS R1, R1, R2, LSL R3 ; R1 = R1 and (R2R3)寄存器移位尋址0 x55R0R20 x010 x080 x08邏輯左移3位寄存器尋址影響標志位LSL、LSRASRROR、RRX寄存器間接尋址1. 操作數存放在內存單元中;2.指令地址碼字段給出 寄存器編號(名);3.指令執行時根據寄存器值(指針)找到相應的存儲單元;LDRR1,R2; R1= R2SWPR1,R1,R2; R1 R

7、20 x55R0R20 x400000000 xAA0 x400000000 xAA內存單元*11/95基址變址尋址1. 操作數存放在內存單元中;2.指令地址碼字段給出 寄存器編號(名)和偏移量;3.指令執行時將基址寄存器的內容與偏移量(4K)相加/減,形成操作數的有效地址。4. 常用于查表、數組操作、功能部件寄存器訪問等。LDR R2,R3,#0 x0C ;R2=R3+0 x0CLDR R1,R0,#-4! ;R1=R0-4, R0=R0-4LDR R0,R1 ,#4 ;R0=R1,R1R14LDR R0,R1,R2 ;R0=R1+R2前索引后索引0 x55R2R30 x400000000

8、xAA0 x4000000C0 xAA內存單元12/95多寄存器尋址/塊復制尋址1. 操作數存放在內存單元中;2.指令地址碼字段給出 寄存器編號(名)列表;3.編號高的寄存器總是對應內存中的高地址單元;4. 可完成存儲塊和16個寄存器或其子集之間的數據傳送。 LDMIA R1!,R2-R4,R6 ; R2= R1 , R3= R1+4; R4= R1+8 , R6= R1+C, R1=R1+10 STMDB R1,R2-R4,R6 ; R1-4= R6 , R1-8=R4 ; R1-C =R3, R1-10=R20 x40000000R1R20 x?0 x010 x400000000 x?R3

9、R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C0 x010 x020 x030 x040 x40000010內存單元Increase AfterDecrease BeforeARM支持的四種堆棧類型滿遞增(FA):堆棧向上增長,堆棧指針指向內含有效數據項的最高地址??者f增(EA) :堆棧向上增長,堆棧指針指向堆棧上的第一個空位置。滿遞減(FD) :堆棧向下增長,堆棧指針指向內含有效數據項的最低地址??者f減(ED) :堆棧向下增長,堆棧指針向堆棧下的第一個空位置。*14/95棧頂SP棧頂SP棧底棧底堆棧的空與滿空堆棧:堆棧

10、指針SP指向下一個待壓入數據的空位置滿堆棧:堆棧指針SP指向最后壓入的堆棧的有效數據項0 x123456780 x12345678棧頂SP0 x12345678棧頂SP滿堆棧壓棧空堆棧壓棧*15/95堆棧的遞增與遞減遞增堆棧:向高地址方向生長,即向上生長遞減堆棧:向低地址方向生長,即向下生長棧底棧頂棧區SP堆棧存儲區棧頂棧底棧區SP地址減少地址增加0 x123456780 x12345678遞增堆棧壓棧遞減堆棧壓棧*16/95堆 棧 尋 址1. 操作數存放在內存棧頂單元中;2.指令地址碼字段固定使用棧頂指針SP;3.指令執行時同多寄存器/塊尋址,可完成多個數據的入棧和出棧; LDMEA SP!

11、,R2-R4,R6 ; R6= SP-4 , R4= SP-8; R3= SP-C , R2= SP-10,SP=SP-10 STMFD SP!,R2-R4,R6 ; SP-4= R6 , SP-8=R4; SP-C =R3, SP-10=R2, SP b)a+; Elseb+;對應的匯編代碼:CMPR0,R1 ;比較R0(a)與R1(b)ADDHIR0,R0,#1 ;若R0R1,則R0=R0+1ADDLSR1,R1,#1 ;若R01,則R1=R1+1*19/95數據處理指令的編碼格式指令條件碼I=1:立即數; I=0:寄存器移位第二操作數Rd目標寄存器Rn第一操作數寄存器S=1:根據結果設置

12、CPRS中的條件碼S=0:不設置CPRS中的條件碼帶進位加法ADC0101帶進位減法指令SBC0110帶進位逆向減法指令RSC0111位測試指令TST1000相等測試指令TEQ1001比較指令CMP1010負數比較指令CMN1011邏輯或操作指令ORR1100數據傳送MOV1101位清除指令BIC1110數據非傳送MVN1111加法運算指令ADD0100逆向減法指令RSB0011減法運算指令SUB0010邏輯異或操作指令EOR0001邏輯與操作指令AND0000說明指令助記符操作碼20/95乘法指令的編碼格式Rm被乘數寄存器Rn: MLA指令相加的寄存器RdLo: 64位乘法指令目標寄存器的低

13、32位Rd: 目標寄存器RdHi: 64位乘法指令目標寄存器的高32位Rs為乘數寄存器64位有符號乘加指令SMLAL11164位有符號乘法指令SMULL11064位無符號乘加指令UMLAL10164位無符號乘法指令UMULL10032位乘加指令MLA00132位乘法指令MUL000說明指令助記符操作碼*21/95單數據存取指令的編碼格式字和無符號字節存取指令LDR/STRP表示前/后變址U=1:加 U=0: 減B=0:字節 B=1:字 W=1:回寫基址寄存器,對應指令中的“!” W=0:不回寫存儲單元尋址方式L=1:加載 L=0:存儲Rd為源/目標寄存器Rn為基址寄存器S=1:有符號數, S=

14、0: 無符號數H=1:半字,H=0:字節存儲單元尋址方式半字和有符號字節存取指令LDR/STRI=1立即數 I=0寄存器移位22/95數據塊(多寄存器)存取指令的編碼格式數據塊(多寄存器)存取指令編碼LDM/STMS對應于指令中的”符號:在恢復PC時也同時恢復SPSRP表示前/后變址U表示加/減W表示回寫(!)寄存器列表Rn為基址寄存器L=1:加載 L=0:存儲*23/95寄存器/存儲器交換指令的編碼格式B用于區別無符號字節(B為1)或字(B為0)Rm源寄存器Rd目標寄存器Rn為基址寄存器SWPR1,R1,R0; R1R0SWPBR1,R2,R0;將R0指向的存儲單元低字節數據讀;取到R1中(

15、高24位清零),并將R2的;內容寫入到該內存單元中的最低字節*24/95分支指令的編碼格式分支指令B/BL指令編碼格式L=0:B指令,跳轉L=1: BL指令,保存PC并跳轉,可返回24位有符號立即數(偏移量)分支指令BX指令編碼格式Rm目標地址寄存器,該寄存器裝載31位跳轉地址,最低位為1時切換到Thumb狀態*25/95狀態寄存器訪問指令的編碼格式指定傳送的區域,可以為以下字母(必須小寫)的一個或者組合:c 控制域屏蔽字節(psr7.0)x 擴展域屏蔽字節(psr15.8)s 狀態域屏蔽字節(psr23.16)f 標志域屏蔽字節(psr31.24)要傳送到狀態寄存器指定域的立即數MSR指令編

16、碼1MSR指令編碼28位立即數目標寄存器,不能為R15R 0:CPSR R 1:SPSRMRS指令編碼立即數移位次數*軟中斷指令的編碼格式SWIcond immed_24指令執行的條件碼指令傳遞的參數(24位立即數,其值為02241);執行時CPU忽略該參數,交OS處理。*27/95數據處理指令 ARM的數據處理指令大致可分為以下幾類: 數據傳送指令:MOV、MVN 算術運算指令:ADD、SUB、RSB、ADC、SBC、RSC、MUL、MLA、UMULL、UMLAL、SMULL、SMLAL 邏輯運算指令 :AND、ORR、EOR、BIC 比較指令:CMP、CMN、TST、TEQ 數據處理指令只

17、能對寄存器的內容進行操作,而不能對內存中的數據進行操作。 所有ARM數據處理指令均可選擇使用S后綴,以使指令影響狀態標志。 28/95數據傳送指令MOV R11,#0 xF000000B;R1= 0 xF000000B MOV R0,R1;R0=R1 MOVS R3,R1,LSL #2;R3=R12,并影響標志位 MOVPC,LR;PC=LR,子程序返回 MVNR1,#0 xFF;R1=0 xFFMVNR1,R2;將R2按位取反,結果存到R1指 令 格 式說 明操 作MOVcondS Rd,operand2數據傳送Rdoperand2 MVNcondS Rd,operand2數據非傳送Rd(o

18、perand2) 當有后綴S時指令將根據結果更新標志N和Z,在計算operand2( 8位立即數或寄存器)時更新標志C,不影響標志V。 MVN指令具有取反功能,所以可以裝載范圍更廣的立即數。29/95算術運算指令指 令 格 式說 明操 作ADDcondS Rd,Rn,operand2加法RdRn+operand2SUBcondS Rd,Rn,operand2減法RdRn-operand2RSBcondS Rd,Rn,operand2逆向減法Rdoperand2-RnADCcondS Rd,Rn,operand2帶進位加法RdRn+operand2+CSBCcondS Rd,Rn,operand

19、2帶進位減法RdRn-operand2-CRSCcondS Rd,Rn,operand2帶進位逆向減法Rdoperand2-Rn-C可影響N,Z,C和V標志位。ADDSR1,R1,#1020;R1=R1+1020,并影響標志位ADDR1,R1,R2,LSL #2;R1=R1+R210,則比較R1與R2,并設置相關標志位CMNR0,#1 ;比較R0與-1,判斷R0是否為1的補碼-1,是則設置Z標志TSTR1,#0 x0F;判斷R1的低4位是否為0 TEQR0,R1;較R0與R1是否相等 (不影響V位和C位) TST指令的下一條指令常與EQ、NE條件碼配合使用:當所有測試位均為0時,EQ有效(Z=

20、1),否則NE有效(Z=0);計算R0+1 TEQ指令的下一條指令常與EQ、NE條件碼配合使用:當兩個數據相等時,EQ有效(Z=1),否則NE有效(Z=0);*33/95存儲器訪問指令 ARM處理器是典型的RISC處理器,對存儲器的訪問只能使用加載/存儲指令 實現。 ARM的存儲空間及I/O空間統一編址,因此對外圍I/O及程序數據的訪問均需通過加載/存儲指令進行。一、單寄存器操作指令LDR/STR 用于對訪問內存變量、內存緩沖區數據、查表、控制外圍部件等。若使用LDR指令加載數據到PC寄存器,則實現程序跳轉。 又分為“字和無符號字節加載存儲指令”及“半字和有符號字節加載存儲指令”兩類。二、多寄

21、存器操作指令LDM/STM 主要用于現場保護、數據復制、常數傳遞等。三、數據交換指令SWP34/95單寄存器存取指令指 令 格 式說 明操 作LDR cond Rd,addressing 加載字數據Rdaddressing 注意addressing的尋址方式及索引方式LDRcondT Rd,addressing以用戶模式加載字數據LDRcondBT Rd, addressing 以用戶模式加載無符號字節LDRcondB Rd,addressing 加載無符號字節數據LDRcondH Rd, addressing 加載無符號半字數據LDRcondSB Rd, addressing 加載有符號字節

22、數據LDRcondSH Rd, addressing加載有符號半字數據LDRcondD Rd, addressing加載雙字數據STRcond Rd, addressing 存儲字數據addressingRd注意addressing的尋址方式及索引方式STRcondT Rd,addressing 以用戶模式存儲字數據STRcondB Rd,addressing 存儲字節數據STRcondBT Rd,addressing 以用戶模式存儲字節數據STRcondH Rd,addressing 存儲半字數據STRcondD Rd,addressing 存儲雙字數據符號數加載時用符號擴展到32位,否則用

23、零擴展到32位;半字讀寫的指定地址必須為偶數,否則將產生不可靠的結果;單寄存器存取指令的尋址方式基址寄存器(任一通用寄存器)+地址偏移量立即數:LDR R1,R0,#0 x12 ;R1-R0+0 x12寄存器:LDR R1,R0,-R2 ; R1-R0-R2寄存器移位:LDR R1,R0,R2,LSL #2 ;R1R3-R8/4;將R0+R3指向的字節存入R1,高24位符號擴展;將R2指向的半字存入R6,高16位0擴展;R2=R2+2;雙字裝載,R6R11,R7R11+4 ;雙字存儲,R4R9+24,R5R9+2837/95多寄存器存取指令指 令 格 式說 明操 作LDMcond mode R

24、n!,reglist 多寄存器加載reglistRn.STMcond mode Rn!,reglist 多寄存器存儲Rn.reglist reglist表示寄存器列表(由小到大),如R1,R2,R6-R9; ! 表示在操作結束后,將最后的地址寫回Rn中;允許在用戶模式或系統模式下使用。它有以下兩個功能:1)異常模式下LDM指令中寄存器列表包含R15時,除正常多寄存器傳送外,還將SPSR也復制到CPSR中。常用于異常處理返回。2)使用用戶模式下的寄存器,而不是當前模式的寄存器。地址增長模式數據塊傳送操作說明地址增長模式堆棧操作說明IA傳送后地址加4FD滿遞減堆棧IB傳送前地址加4ED空遞減堆棧D

25、A傳送后地址減4FA滿遞增堆棧DB傳送前地址減4EA空遞增堆棧38/95多寄存器存取指令應用示例R1:指令執行前的基址寄存器R1:指令執行后的基址寄存器R1 R1 指令STMIA R1!,R5-R74008H4004H4000H4014H4010H400CHR1 R1 指令STMDA R1!,R5-R74008H4004H4000H4014H4010H400CHR1 R1 指令STMIB R1!,R5-R74008H4004H4000H4014H4010H400CHR1 R1 指令STMDB R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R5R6R7

26、R5R6R7R5R6R739/95堆 棧 操 作數據塊傳送存儲堆棧操作壓棧說明數據塊傳送加載堆棧操作出棧說明STMDASTMED空遞減LDMDALDMFA滿遞減STMIASTMEA空遞增LDMIALDMFD滿遞增STMDBSTMFD滿遞減LDMDBLDMEA空遞減STMIBSTMFA滿遞增LDMIBLDMED空遞增;使用數據塊傳送指令進行堆棧操作STMDAR0!,R5-R6. . .LDMIBR0!,R5-R6;使用堆棧指令進行堆棧操作STMEDR13!,R5-R6. . .LDMEDR13!,R5-R6 兩段代碼的執行結果是一樣的,但是使用堆棧指令的壓棧和出棧操作編程很簡單(只要前后一致即可

27、),而使用數據塊指令進行壓棧和出棧操作則需要考慮空與滿、加與減對應的問題。堆棧操作和數據塊傳送指令之間的關系如下表所示:寄存器和存儲器交換指令指 令 格 式說 明操 作SWPcond Rd, Rm, Rn 字數據交換RdRn,RnRm (RnRd或Rm)SWP cond B Rd, Rm, Rn 字節數據交換 若Rm與Rd相同,則為寄存器與存儲器內容進行互換; Rn為要進行數據交換的存儲器地址,Rn不能與Rd和Rm相同。 *41/95分 支 指 令 在ARM中有兩種方式可以實現程序的跳轉,一種則是直接向PC寄存器賦值實現跳轉,另一種是使用分支指令直接跳轉。 以下三種分支指令跳轉范圍限制在當前指

28、令的32M字節地址內,且ARM指令為字對齊,因此最低2位地址固定為0。指 令 格 式說 明操 作B cond label分支指令PClabelBLcond label帶鏈接的分支指令LRPC-4,PClabel適用于子程序調用BXcond Rm帶狀態切換的分支指令PCRm根據跳轉地址(Rm)的最低位來切換處理器狀態*42/95BL LabelxxxxxxLabelxxxMOV PC,LRAddr1Addr2xxxxxxLRPC分支指令應用示例Addr1LabelAddr2Addr21.當程序執行到BL跳轉指令時,硬件將下一條指令的地址Addr2裝入LR寄存器,并把跳轉地址裝入程序計數器(PC)

29、2. 程序跳轉到目標地址Label繼續執行,當子程序執行結束后,將LR寄存器內容存入PC,返回調用函數繼續執行B WAITA; 跳轉到WAITA標號處 B0 x1234; 跳轉到絕對地址0 x1234處BL Label;調用子程序ADRL R0,ThumbFun+1 ;將Thumb程序的入口地址加1存入R0BX R0 ; 跳轉到指定地址并切換到Thumb狀態 43/95*PSR訪問指令指 令 格 式說 明操 作MRScond Rd, psr讀PSRRdpsrMSRcond psr_fields,Rd/#immed_8r寫PSRpsr_fieldsRd/#immed_8r 讀CPSR可了解當前工

30、作狀態; 讀SPSR可以了解進入異常前的狀態; MSR與MRS配合使用,可以切換處理器模式或允許/禁止中斷等。(1)(2)(3)(4) 應用示例1:;子程序:使能IRQ中斷ENABLE_IRQ MRS R0, CPSR BIC R0, R0,#0 x80 MSR CPSR_c,R0 MOV PC,LR 應用示例2:;子程序:禁能IRQ中斷DISABLE_IRQ MRS R0, CPSR ORR R0, R0,#0 x80 MSR CPSR_c,R0 MOV PC,LR 1.將CPSR寄存器內容讀出到R0;2.修改對應于CPSR中的I控制位;3.將修改后的值寫回 CPSR寄存器的對應控制域;4.

31、返回上一層函數;*44/9545軟中斷指令 主要用于用戶程序調用操作系統的系統服務:切換到管理模式,并將CPSR保存到管理模式的SPSR中,然后程序跳轉到SWI異常入口。不影響條件碼標志。 根據SWI指令傳遞的參數SWI異常處理程序可以作出相應的處理。SWI指令傳遞參數有以下兩種方法: 1. 指令中的24位立即數指定服務類型,參數通過通用寄存器傳遞。 MOV R0,#34;設置子功能號為34 SWI 12;調用12號軟中斷 2.指令中的24位立即數被忽略,服務類型由R0的值決定,參數通過其它的通用寄存器傳遞。 MOV R0,#12;調用12號軟中斷 MOV R1,#34;設置子功能號為34 S

32、WI 0 *45/95在SWI異常中斷處理程序中,取出SWI指令中立即數的步驟為:首先確定引起軟中斷的SWI指令是ARM指令還是Thumb指令,這可通過對SPSR訪問得到;然后取得該SWI指令的地址,這可通過訪問LR寄存器得到;接著讀出該SWI指令,分解出立即數。 SWI_Handler STMFD SP!, R0-R3, R12, LR; 現場保護 MRS R0, SPSR ; 讀取SPSR STMFD SP!, R0 ; 保存SPSR TST R0, #0 x20 ; 測試T標志位 LDRNEH R0, LR,#-2 ; 若是Thumb指令,讀取指令碼(16位) BICNE R0, R0,

33、 #0 xFF00; 取得Thumb指令的8位立即數(低8位) LDREQ R0, LR,#-4 ; 若是ARM指令,讀取指令碼(32位) BICEQ R0, R0, #0 xFF000000 ; 取得ARM指令的24位立即數(低23位) . LDMFD SP!, R0-R3, R12, PC; SWI異常中斷返回 *46/95偽指令在ARM匯編指令中,有一類特殊的指令沒有對應的指令編碼。在匯編時根據情況會解釋為相應的ARM、Thumb-2或Thumb-2之前的Thumb指令的組合。這類指令被ARM公司稱為“偽指令”。 需要特別注意的是,這幾條指令和第9章中介紹的偽指令雖然形式上類似,但作用卻

34、大不相同。第9章中介紹的偽指令用于指導匯編器完成相應的匯編工作,符合通常意義上對偽指令的定義,而本節所介紹的這幾條偽指令的作用和正常的ARM匯編指令類似,設計這幾條偽指令的目的主要是使用一條指令替代多條指令的組合,方便程序員完成匯編程序設計工作,其作用類似于80 x86處理器的宏指令。 偽指令ADR/ADRL將相對于程序或相對于寄存器的地址載入寄存器中(中等范圍,與位置無關)。指令書寫格式:ADR(ADRL) , MOV R0, #0 x18 ; 給R0賦值用于查表ADR R3, JumpTable ; 裝載跳轉表的首地址LDR PC, R3,R0,LSL#2 ; 查表,將查到的地址賦給PCJ

35、umpTableADR R3 JumpTableLDR PC,R3,R0,LSL#2xxxJumpTablexxxxxxJumpTable+72xxxPCR3JumpTablePCxxx偽指令LDR將32位常數或地址載入寄存器(無范圍限制,但與位置相關)指令書寫格式:LDR , / expr取值為一個數值常數如果expr的值位于范圍內,則匯編器將會生成一個MOV或MVN指令如果expr的值不在MOV或MVN指令的范圍內,則匯編器會將常數放入文字池中,并會生成一個相對于程序的LDR指令,該指令可從文字池中讀取此常數指令舉例LDR R3,=0 xFFF; 把立即數0 xFFF賦值給R3LDR R2,=place; 把標號place對應的地址賦值給R2 50偽指令MOV32將32位常數或地址載入寄存器(無范圍限制,但與位置相關)僅可用于ARMv6T2及更高版本指令書寫格式:MOV32 , expr可以是symbol(程序區域中的標號)、constant(任何32位常數)或symbol+constant(一個加上32位常數的標號)。 51偽指令UND生成無體系結構定義的指令指令書寫格式:UND 執行未定義指令會引發未定義指令異常。程序員可以利用指令異常完成相應的

溫馨提示

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

評論

0/150

提交評論