第3章ARM指令集_第1頁
第3章ARM指令集_第2頁
第3章ARM指令集_第3頁
第3章ARM指令集_第4頁
第3章ARM指令集_第5頁
已閱讀5頁,還剩58頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、3.1 ARM處理器尋址方式處理器尋址方式v尋址方式分類 尋址方式是根據指令中給出的地址碼字段來實現尋尋址方式是根據指令中給出的地址碼字段來實現尋找真實操作數地址的方式。找真實操作數地址的方式。ARMARM處理器具有處理器具有9 9種基本尋址種基本尋址方式。方式。1. 1.寄存器尋址;寄存器尋址;2.2.立即尋址;立即尋址;3.3.寄存器移位尋址;寄存器移位尋址;4.4.寄存器間接尋址;寄存器間接尋址;5.5.基址尋址;基址尋址;6.6.多寄存器尋址;多寄存器尋址;7.7.堆棧尋址;堆棧尋址;8.8.塊拷貝尋址;塊拷貝尋址;9.9.相對尋址。相對尋址。 操作數的值在寄存器中,指令中的地址碼字段

2、指出的是寄存器編號,指令執行時直接取出寄存器值來操作。寄存器尋址指令舉例如下: MOV R1,R2 ;將R2的值存入R1 SUB R0,R1,R2 ;將R1的值減去R2的值,結果保存到R0 0 xAA0 x55R2R13.1 ARM處理器尋址方式處理器尋址方式v尋址方式分類寄存器尋址MOV R1,R20 xAA 立即尋址指令中的操作碼字段后面的地址碼部分即是操作數本身,也就是說,數據就包含在指令當中,取出指令也就取出了可以立即使用的操作數(這樣的數稱為立即數)。立即尋址指令舉例如下: SUBSR0,R0,#1 ;R0減1,結果放入R0,并且影響標志位MOVR0,#0 xFF000 ;將立即數0

3、 xFF000裝入R0寄存器 0 x55R0MOV R0,#0 xFF00程序存儲3.1 ARM處理器尋址方式處理器尋址方式v尋址方式分類立即尋址MOV R0,#0 xFF000 xFF00從代碼中獲得數據 寄存器移位尋址是ARM指令集特有的尋址方式。當第2個操作數是寄存器移位方式時,第2個寄存器操作數在與第1個操作數結合之前,選擇進行移位操作。寄存器移位尋址指令舉例如下:MOVR0,R2,LSL #3 ;R2的值左移3位,結果放入R0, ;即是R0=R28 ANDSR1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相 ;“與”操作,結果放入R10 x55R0R20 x013.1

4、 ARM處理器尋址方式處理器尋址方式v尋址方式分類寄存器移位尋址MOV R0,R2,LSL #30 x080 x08邏輯左移3位 寄存器間接尋址指令中的地址碼給出的是一個通用寄存器的編號,所需的操作數保存在寄存器指定地址的存儲單元中,即寄存器為操作數的地址指針。寄存器間接尋址指令舉例如下: LDRR1,R2;將R2指向的存儲單元的數據讀出;保存在R1中 SWPR1,R1,R2;將寄存器R1的值和R2指定的存儲;單元的內容交換 0 x55R1R2 0 x400000000 xAA0 x400000003.1 ARM處理器尋址方式處理器尋址方式v尋址方式分類寄存器間接尋址LDR R1,R20 xA

5、A 變址尋址就是將基址寄存器的內容與指令中給出的偏移量相加,形成操作數的有效地址。基址尋址用于訪問基址附近的存儲單元,常用于查表、數組操作、功能部件寄存器訪問等。基址尋址指令舉例如下: LDRR2,R3,#0 x0C ;讀取R3+0 x0C地址上的存儲單元 ;的內容,放入R2 STRR1,R0,#-4! ;先R0=R0-4,然后把R1的值寄存 ;到保存到R0指定的存儲單元 3.1 ARM處理器尋址方式處理器尋址方式v尋址方式分類變址尋址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA將R3+0 x0C作為地址裝載數據 多寄存器

6、尋址一次可傳送幾個寄存器值,允許一條指令傳送16個寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下: LDMIAR1!,R2-R7,R12 ;將R1指向的單元中的數據讀出到 ;R2R7、R12中(R1自動加1) STMIAR0!,R2-R7,R12 ;將寄存器R2R7、R12的值保 ;存到R0指向的存儲; 單元中 ;(R0自動加1)0 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存儲器3.1 ARM處理器尋址方式處理器尋址方式v尋址方式

7、分類多寄存器尋址LDR R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000010 堆棧是一個按特定順序進行存取的存儲區,操作順序為“后進先出” 。堆棧尋址是隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區域(堆棧),指針所指向的存儲單元即是堆棧的棧頂。存儲器堆棧可分為兩種: 向上生長:向高地址方向生長,稱為遞增堆棧向下生長:向低地址方向生長,稱為遞減堆棧3.1 ARM處理器尋址方式處理器尋址方式v尋址方式分類堆棧尋址3.1 ARM處理器尋址方式處理器尋址方式v尋址方式分類堆棧尋址棧底棧頂棧區SP堆棧存儲區棧頂棧底棧區SP向下增長向上增長0 x123456

8、780 x12345678堆棧壓棧堆棧壓棧棧頂SP棧頂SP棧底空堆棧棧底滿堆棧 堆棧指針指向最后壓入的堆棧的有效數據項,稱為滿堆棧;堆棧指針指向下一個待壓入數據的空位置,稱為空堆棧。 3.1 ARM處理器尋址方式處理器尋址方式v尋址方式分類堆棧尋址0 x123456780 x12345678棧頂SP0 x12345678棧頂SP壓棧壓棧所以可以組合出四種類型的堆棧方式:滿遞增:堆棧向上增長,堆棧指針指向內含有效數據項的最高地址。指令如LDMFA、STMFA等; 空遞增:堆棧向上增長,堆棧指針指向堆棧上的第一個空位置。指令如LDMEA、STMEA等; 滿遞減:堆棧向下增長,堆棧指針指向內含有效數

9、據項的最低地址。指令如LDMFD、STMFD等;空遞減:堆棧向下增長,堆棧指針向堆棧下的第一個空位置。指令如LDMED、STMED等。 3.1 ARM處理器尋址方式處理器尋址方式v尋址方式分類堆棧尋址 多寄存器傳送指令用于將一塊數據從存儲器的某一位置拷貝到另一位置。 如:STMIAR0!,R1-R7;將R1R7的數據保存到存儲器中。;存儲指針在保存第一個值之后增加,;增長方向為向上增長。STMIBR0!,R1-R7;將R1R7的數據保存到存儲器中。;存儲指針在保存第一個值之前增加,;增長方向為向上增長。 3.1 ARM處理器尋址方式處理器尋址方式v尋址方式分類塊拷貝尋址 相對尋址是基址尋址的一

10、種變通。由程序計數器PC提供基準地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數的有效地址。相對尋址指令舉例如下:BLSUBR1;調用到SUBR1子程序BEQLOOP;條件跳轉到LOOP標號處.LOOPMOVR6,#1.SUBR1. 3.1 ARM處理器尋址方式處理器尋址方式v尋址方式分類相對尋址 ARM是三地址指令格式,指令的基本格式如下:3.1 指令集介紹指令集介紹vARM指令集基本指令格式 S , 其中號內的項是必須的,號內的項是可選的。各項的說明如下:opcode:指令助記符;cond:執行條件;S:是否影響CPSR寄存器的值;Rd:目標寄存器; Rn:第1個操作數的

11、寄存器;operand2:第2個操作數;指令語法目標寄存器(Rd) 源寄存器1(Rn)源寄存器2(Rm)ADD r3,r1,r2r3r1r2例: ARM指令的基本格式如下:3.1 指令集介紹指令集介紹vARM指令集第2個操作數 S , 靈活的使用第2個操作數“operand2”能夠提高代碼效率。它有如下的形式:#immed_8r常數表達式;Rm寄存器方式;Rm,shift寄存器移位方式;3.1 指令集介紹指令集介紹vARM指令集第2個操作數#immed_8r常數表達式 該常數必須對應8位位圖,即一個8位的常數(0 xFF, 0 x0F,)通過循環右移偶數位得到。3.1 指令集介紹指令集介紹vA

12、RM指令集第2個操作數Rm寄存器方式 在寄存器方式下,操作數即為寄存器的數值。例如:SUBR1,R1,R23.1 指令集介紹指令集介紹vARM指令集第2個操作數Rm,shift寄存器移位方式 將寄存器的移位結果作為操作數(移位操作不消耗額外的時間),但Rm值保持不變,移位方法如下:操作碼說明操作碼說明ASR #n算術右移n位 n32ROR #n循環右移n位 n 31LSL #n邏輯左移n位 n 31RRX帶擴展的循環右移1位LSR #n邏輯右移n位 n 32Type RsType為移位的一種類型,Rs為偏移量寄存器,低8位有效。3.1 指令集介紹指令集介紹vARM指令集第2個操作數LSL移位操

13、作:0LSR移位操作:0ASR移位操作:ROR移位操作:RRX移位操作:C3.1 指令集介紹指令集介紹vARM指令集第2個操作數Rm,shift寄存器移位方式例如:ADDR1,R1,R1,LSL #3;R1=R1+R1R3 ARM指令的基本格式如下:3.1 指令集介紹指令集介紹vARM指令集條件碼 S , 使用條件碼“cond”可以實現高效的邏輯操作(節省跳轉和條件語句),提高代碼效率。 所有的ARM指令都可以條件執行,而Thumb指令只有B(跳轉)指令具有條件執行 功能。如果指令不標明條件代碼,將默認為無條件(AL)執行。操作碼條件助記符標志含義0000EQZ=1相等0001NEZ=0不相等

14、0010CS/HSC=1無符號數大于或等于0011CC/LOC=0無符號數小于0100MIN=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任何從不執行(不要使用) 指令條件碼表3.1 指令集介紹指令集介紹vARM指令集條件碼C代碼:If(a b)a+;Elseb+

15、;對應的匯編代碼:CMPR0,R1 ;R0(a)與R1(b)比較ADDHI R0,R0,#1 ;若R0R1,則R0=R0+1ADDLS R1,R1,#1 ;若R0R1,則R1=R1+1示例:3.1 指令集介紹指令集介紹vARM指令集存儲器訪問指令 ARM處理器是典型的RISC處理器,對存儲器的訪問只能使用加載和存儲指令實現。ARM7處理器是馮諾依曼存儲結構,RAM存儲空間及I/O映射空間統一編址,除對RAM操作以外,對外圍IO、程序數據的訪問均要通過加載/存儲指令進行。 存儲器訪問指令分為單寄存器操作指令和多寄存器操作指令。助記符說明操作條件碼位置LDR Rd,addressing 加載字數據

16、Rdaddressing,addressing索引LDRcondLDRB Rd,addressing 加載無符號字節數據Rdaddressing,addressing索引LDRcondBLDRT Rd,addressing以用戶模式加載字數據Rdaddressing,addressing索引LDRcondTLDRBT Rd, addressing 以用戶模式加載無符號字節數據Rdaddressing,addressing索引LDRcondBTLDRH Rd, addressing 加載無符號半字數據Rdaddressing,addressing索引LDRcondHLDRSB Rd, addre

17、ssing 加載有符號字節數據Rdaddressing,addressing索引LDRcondSBLDRSH Rd, addressing加載有符號半字數據 Rdaddressing,addressing索引 LDRcondSH ARM存儲器訪問指令單寄存器加載助記符說明操作條件碼位置STR Rd, addressing 存儲字數據addressingRd,addressing索引STRcondSTRB Rd,addressing 存儲字節數據addressingRd,addressing索引STRcondBSTRT Rd,addressing 以用戶模式存儲字數據addressingRd,

18、addressing索引STRcondTSTRBT Rd,addressing 以用戶模式存儲字節數據addressingRd,addressing索引STRcondBTSTRH Rd,addressing 存儲半字數據addressing Rd,addressing索引STRcondHARM存儲器訪問指令單寄存器存儲 LDR/STR指令用于對內存變量的訪問、內存緩沖區數據的訪問、查表、外圍部件的控制操作等。若使用LDR指令加載數據到PC寄存器,則實現程序跳轉功能。 所有單寄存器加載/存儲指令可分為“字和無符號字節加載存儲指令”和“半字和有符號字節加載存儲指令。LDR和STR字和無符號字節加載

19、/存儲指令 LDR指令用于從內存中讀取單一字或字節數據存入寄存器中,STR指令用于將寄存器中的單一字或字節數據保存到內存。指令格式如下:ARM存儲器訪問指令單寄存器存儲 LDRcondTRd, ;將指定地址上的字數據讀入Rd STRcondTRd, ;將Rd中的字數據存入指定地址 LDRcondBTRd, ;將指定地址上的字節數據讀入Rd STRcondBTRd, ;將Rd中的字節數據存入指定地址 其中,T為可選后綴。若指令有T,那么即使處理器是在特權模式下,存儲系統也將訪問看成是在用戶模式下進行的。T在用戶模式下無效,不能與前索引偏移一起使用T。 ARM存儲器訪問指令單寄存器存儲LDR和ST

20、R字和無符號字節加載/存儲指令 LDR/STR指令尋址非常靈活,它由兩部分組成,其中一部分為一個基址寄存器,可以為任一個通用寄存器;另一部分為一個地址偏移量。地址偏移量有以下3種格式: 立即數。立即數可以是一個無符號的數值。這個數據可以加到基址寄存器,也可以從基址寄存器中減去這個數值。 如:LDR R1,R0,#0 x12 ;R1-R0+0 x12寄存器。寄存器中的數值可以加到基址寄存器,也可以從基址寄存器中減去這個數值。 如:LDR R1,R0,R2 ; R1-R0+R2 LDR R1,R0,-R2 ; R1-R0-R2寄存器及移位常數。寄存器移位后的值可以加到基址寄存器,也可以從基址寄存器

21、中減去這個數值。 如:LDR R1,R0,R2,LSL #2 ;R1-R0+R2*4 ARM存儲器訪問指令單寄存器存儲 從尋址方式的地址計算方法分,加載/存儲指令有以下4種格式: 零偏移。如:LDR Rd,Rn 前索引偏移。如:LDR Rd,Rn,#0 x04!程序相對偏移。如:LDR Rd,labe1 后索引偏移。如:LDR Rd,Rn,#-0 x04LDR和STR字和無符號字節加載/存儲指令LDR和STR半字和有符號字節加載/存儲指令 這類LDR/STR指令可加載有符號半字或字節,可加載/存儲無符號半字。偏移量格式、尋址方式與加載/存儲字和無符號字節指令相同。 ARM存儲器訪問指令單寄存器

22、存儲 LDRcondSB Rd, ;將指定地址上的有符號字節讀入Rd LDRcondSH Rd, ;將指定地址上的有符號半字讀入Rd LDRcondH Rd, ;將指定地址上的半字數據讀入Rd STRcondH Rd, ;將Rd中的半字數據存入指定地址注意:1.有符號位半字/字節加載是指用符號位加載擴展到32位,無符號半字加載是指用零擴展到32位;2.半字讀寫的指定地址必須為偶數,否則將產生不可靠的結果;LDR和STR指令應用示例:1.加載/存儲字和無符號字節指令LDRR2,R5;將R5指向地址的字數據存入R2STRR1,R0,#0 x04;將R1的數據存儲到R0+0 x04地址LDRBR3,

23、R2,#-1 ;將R2指向地址的字節數據存入R3,R2R21STRBR0,R3,-R8 ASR 2 ;R0-R3-R8/4,存儲R0的最低有效字節2.加載/存儲半字和有符號字節指令LDRSB R1,R0,R3;將R0+R3地址上的字節數據存入R1,;高24位用符號擴展LDRH R6,R2,#2;將R2指向地址的半字數據存入R6,高16位用0擴展;讀出后,R2=R2+2STRH R1,R0,#2!;將R1的半字數據保存到R0+2地址,;只修改低2字節數據,然后R0=R0+2ARM存儲器訪問指令單寄存器存儲v(3 3)LDRLDR和和STR -STR -雙字:雙字:加載/存儲兩個相鄰的寄存器,64

24、位雙字。其句法有4種:vOp cond D Rd,Rn 零偏移vOp cond D Rd,Rn,offset ! 前索引偏移vOp cond D Rd,label 程序相對偏移vOp cond D T Rd,Rn,offset 后索引偏移 ARM存儲器訪問指令單寄存器存儲 其中:其中: Rd Rd 加載加載/ /存儲寄存器中的一個,另一個是存儲寄存器中的一個,另一個是R R(d+1d+1)。)。RdRd必須是偶數寄存器,且不是必須是偶數寄存器,且不是R14R14。 RnRn 除非指令為零偏移,或不帶寫回的前索引,否則,除非指令為零偏移,或不帶寫回的前索引,否則,RnRn不允許與不允許與RdRd

25、和和R R(d+1d+1)相同。)相同。label labellabel label必須是在當前指令的上下必須是在當前指令的上下256256字節范圍內。字節范圍內。例如:例如:LDRD R6,R11 ;R6R11,R7R11+4STRD R4,R9,#24 ;R4R9+24,R5R9+28ARM存儲器訪問指令單寄存器存儲助記符說明操作條件碼位置LDMmode Rn!,reglist 多寄存器加載reglistRn.,Rn回寫等LDMcondmodeSTMmode Rn!,reglist 多寄存器存儲Rn.reglist,Rn回寫等STMcondmodeARM存儲器訪問指令多寄存器存取 多寄存器

26、加載/存儲指令可以實現在一組寄存器和一塊連續的內存單元之間傳輸數據。LDM為加載多個寄存器;STM為存儲多個寄存器。允許一條指令傳送16個寄存器的任何子集或所有寄存器。它們主要用于現場保護、數據復制、常數傳遞等。ARM存儲器訪問指令多寄存器存取 多寄存器加載/存儲指令格式如下: LDMcond Rn!,reglist STMcond Rn!,reglistcond:指令執行的條件;模式:控制地址的增長方式,一共有8種模式;!:表示在操作結束后,將最后的地址寫回Rn中;reglist :表示寄存器列表,可以包含多個寄存器,它們使用“,”隔開,如R1,R2,R6-R9,寄存器由小到大排列;:可選后

27、綴。允許在用戶模式或系統模式下使用。它有以下兩個功能:1)若op是LDM且寄存器列表包含R15時,那么除了正常的多寄存器傳送外,還將SPSR也復制到CPSR中。這用于異常處理返回,僅在異常模式下使用。2)數據傳入或傳出的是用戶模式下的寄存器,而不是當前模式的寄存器。ARM存儲器訪問指令多寄存器存取 多寄存器加載/存儲指令的8種模式如下表所示,右邊四種為堆棧操作、左邊四種為數據傳送操作。模式說明模式說明IA每次傳送后地址加4FD滿遞減堆棧IB每次傳送前地址加4ED空遞減堆棧DA每次傳送后地址減4FA滿遞增堆棧DB每次傳送前地址減4EA空遞增堆棧數據塊傳送操作堆棧操作 進行數據復制時,先設置好源數

28、據指針和目標指針,然后使用塊拷貝尋址指令LDMIA/STMIA、LDMIB/STMIB、LDMDA/STMDA、LDMDB/STMDB進行讀取和存儲 。 進行堆棧操作操作時,要先設置堆棧指針(SP),然后使用堆棧尋址指令STMFD/LDMFD 、STMED/LDMED、STMFA/LDMFA和STMEA/LDMEA實現堆棧操作。ARM存儲器訪問指令多寄存器存取數據塊傳送指令操作過程如右圖所示,其中R1為指令執行前的基址寄存器,R1則為指令執行后的基址寄存器。R5R6R7R1 R1 指令STMIA R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R

29、1 指令STMDA R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMIB R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMDB R1!,R5-R74008H4004H4000H4014H4010H400CHARM存儲器訪問指令多寄存器存取數據塊傳送存儲堆棧操作壓棧說明數據塊傳送加載堆棧操作出棧說明STMDASTMED空遞減LDMDALDMFA滿遞減STMIASTMEA空遞增LDMIALDMFD滿遞增STMDBSTMFD滿遞減LDMDBLDMEA空遞減STMIBSTMF

30、A滿遞增LDMIBLDMED空遞增;使用數據塊傳送指令進行堆棧操作STMDAR0!,R5-R6. . .LDMIBR0!,R5-R6;使用堆棧指令進行堆棧操作STMEDR13!,R5-R6. . .LDMEDR13!,R5-R6 兩段代碼的執行結果是一樣的,但是使用堆棧指令的壓棧和出棧操作編程很簡單(只要前后一致即可),而使用數據塊指令進行壓棧和出棧操作則需要考慮空與滿、加與減對應的問題。 堆棧操作和數據塊傳送指令類似,也有4種模式,它們之間的關系如下表所示:助記符說明操作條件碼位置SWP Rd,Rm,Rn 寄存器和存儲器字數據交換RdRn,RnRm (RnRd或Rm)SWPcondSWPB

31、Rd,Rm,Rn 寄存器和存儲器字節數據交換RdRn,RnRm (RnRd或Rm)SWPcondBARM存儲器訪問指令寄存器和存儲器交換指令 SWP指令用于將一個內存單元(該單元地址放在寄存器Rn中)的內容讀取到一個寄存器Rd中,同時將另一個寄存器Rm的內容寫入到該內存單元中。使用SWP可實現信號量操作。 指令格式如下:SWPcondB Rd,Rm,Rn 其中,B為可選后綴,若有B,則交換字節,否則交換32位字;Rd用于保存從存儲器中讀入的數據;Rm的數據用于存儲到存儲器中,若Rm與Rd相同,則為寄存器與存儲器內容進行互換;Rn為要進行數據交換的存儲器地址,Rn不能與Rd和Rm相同。 ARM存

32、儲器訪問指令寄存器和存儲器交換指令SWP指令應用示例:SWPR1,R1,R0;將R1的內容與R0指向的存儲單元的內容進行互換 SWPBR1,R2,R0;將R0指向的存儲單元低字節數據讀取到R1中;(高24位清零),并將R2的內容寫入到該內存單元中;(最低字節有效) 3.1 指令集介紹指令集介紹vARM指令集ARM數據處理指令 數據處理指令大致可分為3類: 數據傳送指令;算術邏輯運算指令;比較指令。 數據處理指令只能對寄存器的內容進行操作,而不能對內存中的數據進行操作。所有ARM數據處理指令均可選擇使用S后綴,以使指令影響狀態標志。 ARM數據處理指令指令編碼帶進位加法ADC0101帶進位減法指

33、令SBC0110帶進位逆向減法指令RSC0111位測試指令TST1000相等測試指令TEQ1001比較指令CMP1010負數比較指令CMN1011邏輯或操作指令ORR1100數據傳送MOV1101位清除指令BIC1110數據非傳送MVN1111加法運算指令ADD0100逆向減法指令RSB0011減法運算指令SUB0010邏輯異或操作指令EOR0001邏輯與操作指令AND0000說明指令助記符操作碼opcode操作碼功能表助記符說明操作條件碼位置MOV Rd,operand2數據傳送Rdoperand2 MOVcondSMVN Rd,operand2數據非傳送Rd(operand2)MVNcon

34、dSARM數據處理指令數據傳送注:當后綴S時,這些指令根據結果更新標志N和Z,在計算Operand2時更新標志C,不影響標志V。助記符說明操作條件碼位置MOV Rd,operand2MOV Rd,operand2數據傳送Rdoperand2 MOVcondSMVN Rd,operand2數據非傳送Rd(operand2)MVNcondSARM數據處理指令數據傳送 MOV指令將8位圖立即數或寄存器傳送到目標寄存器(Rd),可用于移位運算等操作。指令格式如下: MOVcondS Rd,operand2 MOV指令舉例如下: MOVR11,#0 xF000000B;R1= 0 xF000000B M

35、OVR0,R1;R0=R1 MOVSR3,R1,LSL #2;R3=R12,并影響標志位 MOVPC,LR;PC=LR,子程序返回 助記符說明操作條件碼位置MOV Rd,operand2數據傳送Rdoperand2 MOVcondSMVN Rd,operand2MVN Rd,operand2數據非傳送Rd(operand2)MVNcondSARM數據處理指令數據傳送 MVN指令將8位圖立即數或寄存器(operand2)按位取反后傳送到目標寄存器(Rd),因為其具有取反功能,所以可以裝載范圍更廣的立即數。指令格式如下: MVNcondS Rd,operand2 MVN指令舉例如下: MVNR1,

36、#0 xFF;R1=0 xFFFFFF00 MVNR1,R2;將R2按位取反,結果存到R1助記符說明操作條件碼位置ADD Rd, Rn, operand2加法運算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2減法運算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向減法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進位加法RdRn+operand2+CarryADCcondSSBC Rd, Rn, operand2帶進位減法指令RdRn-operand2-(NOT)Carr

37、ySBCcondSRSC Rd, Rn, operand2帶進位逆向減法指令Rdoperand2-Rn-(NOT)CarryRSCcondSARM數據處理指令算術運算注:這些指令影響N,Z,C和V標志位。助記符說明操作條件碼位置ADD Rd, RnADD Rd, Rn, operand2, operand2加法運算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2減法運算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向減法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進位加法

38、RdRn+operand2+CarryADCcondSSBC Rd, Rn, operand2帶進位減法指令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2帶進位逆向減法指令Rdoperand2-Rn-(NOT)CarryRSCcondSARM數據處理指令算術運算 加法運算指令ADD指令將operand2的值與Rn的值相加,結果保存到Rd寄存器。指令格式如下: ADDcondS Rd,Rn,operand2 應用示例: ADDS R1,R1,#1020;R1=R1+1020,并影響標志位 ADD R1,R1,R2,LSL #2;R1=R1

39、+R22 助記符說明操作條件碼位置ADD Rd, Rn, operand2加法運算指令RdRn+operand2ADDcondSSUB Rd, RnSUB Rd, Rn, operand2, operand2減法運算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向減法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進位加法RdRn+operand2+CarryADCcondSSBC Rd, Rn, operand2帶進位減法指令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn,

40、 operand2帶進位逆向減法指令Rdoperand2-Rn-(NOT)CarryRSCcondSARM數據處理指令算術運算 減法運算指令SUB指令用寄存器Rn減去operand2,結果保存到Rd中。指令格式如下: SUBcondS Rd,Rn,operand2 應用示例: SUBSR0,R0,#240;R0=R0-240 ,并影響標志位 SUBSR2,R1,R2;R2=R1-R2 ,并影響標志位 助記符說明操作條件碼位置ADD Rd, Rn, operand2加法運算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2減法運算指令RdRn-operand2

41、SUBcondSRSB Rd, RnRSB Rd, Rn, operand2, operand2逆向減法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進位加法RdRn+operand2+CarryADCcondSSBC Rd, Rn, operand2帶進位減法指令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2帶進位逆向減法指令Rdoperand2-Rn-(NOT)CarryRSCcondSARM數據處理指令算術運算 逆向減法運算指令RSB指令將operand2的值減去Rn,結果保存到Rd中。指令格式如下: RSBcondS Rd,Rn,operand2 應用示例: RSB R3,R1,#0 xFF00 ;R3=0 xFF00-R1 RSBS R1,R2,R2,LSL #2 ;R1=(R210, 則執行本指令 助記符說明操作條件碼位置CMP Rn, operand2比較指令標志N、Z、C、V

溫馨提示

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

評論

0/150

提交評論