ARM 微處理器的指令集指令系統(tǒng)PPT教學課件_第1頁
ARM 微處理器的指令集指令系統(tǒng)PPT教學課件_第2頁
ARM 微處理器的指令集指令系統(tǒng)PPT教學課件_第3頁
ARM 微處理器的指令集指令系統(tǒng)PPT教學課件_第4頁
ARM 微處理器的指令集指令系統(tǒng)PPT教學課件_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、ARM狀態(tài)下的寄存器組織(2)37個32位寄存器,其中31個為通用寄存器,6個為狀態(tài)寄存器。用戶模式、系統(tǒng)模式快速中斷模式管理模式數據訪問終止模式外部中斷模式未定義指令中止模式第第2頁頁/共共70頁頁第1頁/共70頁1 ARM處理器尋址方式尋址方式分類尋址方式分類 尋址方式是根據指令中給出的地址碼字段來實現尋址方式是根據指令中給出的地址碼字段來實現尋找真實操作數地址的方式尋找真實操作數地址的方式。ARMARM處理器具有處理器具有9 9種基本尋種基本尋址方式。址方式。1. 1.寄存器尋址;寄存器尋址; 2.2.立即尋址;立即尋址;3.3.寄存器移位尋址;寄存器移位尋址;4.4.寄存器間接尋址;寄

2、存器間接尋址;5.5.基址尋址;基址尋址;6.6.多寄存器尋址;多寄存器尋址;7.7.堆棧尋址;堆棧尋址;8.8.塊拷貝尋址;塊拷貝尋址;9.9.相對尋址。相對尋址。第第3頁頁/共共70頁頁第2頁/共70頁 操作數的值在寄存器中,指令中的地址操作數的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執(zhí)行時直碼字段指出的是寄存器編號,指令執(zhí)行時直接取出寄存器值來操作。寄存器尋址指令舉接取出寄存器值來操作。寄存器尋址指令舉例如下:例如下: MOV R1,R2 ;將將R2的值存入的值存入R1 SUB R0,R1,R2 ;將將R1的值減去的值減去R2的值,結果保存到的值,結果保存到R0 0 xA

3、A0 x55R2R11 ARM處理器尋址方式尋址方式分類尋址方式分類寄存器尋址寄存器尋址MOV R1,R20 xAA第第4頁頁/共共70頁頁第3頁/共70頁 立即尋址指令中的操作碼字段后面的立即尋址指令中的操作碼字段后面的地址碼部分即是操作數本身,也就是說,地址碼部分即是操作數本身,也就是說,數據就包含在指令當中,取出指令也就取數據就包含在指令當中,取出指令也就取出了可以立即使用的操作數出了可以立即使用的操作數( (這樣的數稱為這樣的數稱為立即數立即數) )。立即尋址指令舉例如下:。立即尋址指令舉例如下: SUBSR0,R0,#1 ;R0減減1,結果,結果放入放入R0,并且影響標志位,并且影響

4、標志位MOV R0,#0 xFF000 ;將立即數將立即數0 xFF000裝入裝入R0寄存器寄存器 0 x55R0MOV R0,#0 xFF00程序存儲1 ARM處理器尋址方式尋址方式分類立即尋址MOV R0,#0 xFF000 xFF00從代碼中獲得數據第第5頁頁/共共70頁頁第4頁/共70頁 寄存器移位尋址是寄存器移位尋址是ARMARM指令集特有的尋址方式。當指令集特有的尋址方式。當第第2 2個操作數是寄存器移位方式時,第個操作數是寄存器移位方式時,第2 2個寄存器操作數個寄存器操作數在與第在與第1 1個操作數結合之前,選擇進行移位操作。寄存器個操作數結合之前,選擇進行移位操作。寄存器移位

5、尋址指令舉例如下:移位尋址指令舉例如下:MOV R0,R2,LSL #3;R2的值左移的值左移3位,結果放入位,結果放入R0, ;即是即是R0=R28 ANDS R1,R1,R2,LSL R3;R2的值左移的值左移R3位,然后位,然后 ;和和R1相相“與與”操作,結果放入操作,結果放入R10 x55R0R20 x011 ARM處理器尋址方式尋址方式分類寄存器移位尋址MOV R0,R2,LSL #30 x080 x08邏輯左移3位第第6頁頁/共共70頁頁第5頁/共70頁 寄存器間接尋址指令中的地址碼給出的是一寄存器間接尋址指令中的地址碼給出的是一個通用寄存器的編號,所需的操作數保存在寄個通用寄存

6、器的編號,所需的操作數保存在寄存器指定地址的存儲單元中,即寄存器為操作存器指定地址的存儲單元中,即寄存器為操作數的地址指針。例如:數的地址指針。例如: LDR R1,R2 ;將將R2指向的存儲單元的數據指向的存儲單元的數據;讀出保存在讀出保存在R1中中 SWP R1,R1,R2 ;將寄存器將寄存器R1的值和的值和R2;指定的存儲單元的內容交換指定的存儲單元的內容交換 0 x55R0R2 0 x400000000 xAA0 x400000001 ARM處理器尋址方式 尋址方式分類寄存器間接尋址LDR R0,R20 xAA第第7頁頁/共共70頁頁第6頁/共70頁 基址尋址就是將基址寄存器的內容與指

7、令中給出基址尋址就是將基址寄存器的內容與指令中給出的偏移量(的偏移量(4K4K)相加)相加/ /減,形成操作數的有效地址。減,形成操作數的有效地址?;穼ぶ酚糜谠L問基址附近的存儲單元,常用于查表、基址尋址用于訪問基址附近的存儲單元,常用于查表、數組操作、功能部件寄存器訪問等。寄存器間接尋址數組操作、功能部件寄存器訪問等。寄存器間接尋址是偏移量為是偏移量為0 0的基址加偏移尋址。的基址加偏移尋址?;穼ぶ分噶钆e例如下基址尋址指令舉例如下( (前索引尋址前索引尋址) ): LDR R2,R3,#0 x0C ;讀取讀取R3+0 x0C地址上的地址上的 ;存儲單元的內容,放入存儲單元的內容,放入R2

8、STR R1,R0,#-4!;先先R0=R0-4,然后把,然后把R1的值的值;寄存到保存到寄存到保存到R0指定的存儲單元指定的存儲單元 1 ARM處理器尋址方式 尋址方式分類尋址方式分類基址尋址基址尋址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA將R3+0 x0C作為地址裝載數據第第8頁頁/共共70頁頁第7頁/共70頁 基址尋址指令舉例如下:基址尋址指令舉例如下: LDR R0,R1,#4;R0=R1,R1R14 ;后索引基址尋址后索引基址尋址 LDR R0,R1,R2 ;R0=R1+R21 ARM處理器尋址方式 尋址方式

9、分類基址尋址第第9頁頁/共共70頁頁第8頁/共70頁 多寄存器尋址一次可傳送幾個寄存器值,允多寄存器尋址一次可傳送幾個寄存器值,允許一條指令傳送許一條指令傳送1616個寄存器的任何子集或所有寄個寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下:存器。多寄存器尋址指令舉例如下: LDMIAR1!,R2-R7,R12 ;將將R1指向的指向的單元中的數據讀出到單元中的數據讀出到R2R7、R12中中(R1自動加自動加4) STMIAR0!,R2-R7,R12 ;將寄存器將寄存器R2R7、R12的值保存到的值保存到R0指向的存儲指向的存儲; 單元中單元中(R0自動加自動加4)0 x40000000

10、R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存儲器1 ARM處理器尋址方式 尋址方式分類尋址方式分類多寄存器尋址多寄存器尋址LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000010第第10頁頁/共共70頁頁第9頁/共70頁 堆棧是一個按特定順序進行存取的存儲區(qū),操堆棧是一個按特定順序進行存取的存儲區(qū),操作順序為作順序為“后進先出后進先出” 。堆棧尋址是隱含的,它使。堆棧尋址是隱含的,它使用一個專門的寄存器用一個專門的

11、寄存器( (堆棧指針堆棧指針) )指向一塊存儲區(qū)域指向一塊存儲區(qū)域( (堆棧堆棧) ),指針所指向的存儲單元即是堆棧的棧頂。存,指針所指向的存儲單元即是堆棧的棧頂。存儲器堆??煞譃閮煞N:儲器堆??煞譃閮煞N: 向上生長:向高地址方向生長,稱為遞增堆棧向上生長:向高地址方向生長,稱為遞增堆棧向下生長:向低地址方向生長,稱為遞減堆棧向下生長:向低地址方向生長,稱為遞減堆棧1 ARM處理器尋址方式尋址方式分類堆棧尋址第第11頁頁/共共70頁頁第10頁/共70頁1 ARM處理器尋址方式尋址方式分類尋址方式分類堆棧尋址堆棧尋址棧底棧底棧頂棧頂棧區(qū)棧區(qū)SP堆棧存堆棧存儲區(qū)儲區(qū)棧頂棧頂棧底棧底棧區(qū)棧區(qū)SP向下

12、向下增長增長向上向上增長增長0 x123456780 x12345678堆棧壓棧堆棧壓棧堆棧壓棧堆棧壓棧第第12頁頁/共共70頁頁第11頁/共70頁棧頂SP棧頂SP棧底棧底空堆??斩褩5讞5诐M堆棧滿堆棧 堆棧指針指向最后壓入的堆棧的有效數堆棧指針指向最后壓入的堆棧的有效數據項,稱為據項,稱為滿堆棧滿堆棧;堆棧指針指向下一個待;堆棧指針指向下一個待壓入數據的空位置,稱為壓入數據的空位置,稱為空堆??斩褩?。 1 ARM處理器尋址方式尋址方式分類尋址方式分類堆棧尋址堆棧尋址0 x123456780 x12345678棧頂棧頂SP0 x12345678棧頂棧頂SP壓棧壓棧壓棧壓棧第第13頁頁/共共7

13、0頁頁第12頁/共70頁所以可以組合出四種類型的堆棧方式:所以可以組合出四種類型的堆棧方式:滿遞增滿遞增:堆棧向上增長,堆棧指針指向內含有效數:堆棧向上增長,堆棧指針指向內含有效數據項的最高地址。指令如據項的最高地址。指令如LDMFALDMFA、STMFASTMFA等;等; 空遞增空遞增:堆棧向上增長,堆棧指針指向堆棧上的第:堆棧向上增長,堆棧指針指向堆棧上的第一個空位置。指令如一個空位置。指令如LDMEALDMEA、STMEASTMEA等;等; 滿遞減滿遞減:堆棧向下增長,堆棧指針指向內含有效數:堆棧向下增長,堆棧指針指向內含有效數據項的最低地址。指令如據項的最低地址。指令如LDMFDLDM

14、FD、STMFDSTMFD等;等;空遞減空遞減:堆棧向下增長,堆棧指針向堆棧下的第一:堆棧向下增長,堆棧指針向堆棧下的第一個空位置。指令如個空位置。指令如LDMEDLDMED、STMEDSTMED等。等。 1 ARM處理器尋址方式尋址方式分類尋址方式分類堆棧尋址堆棧尋址第第14頁頁/共共70頁頁第13頁/共70頁 多寄存器傳送指令用于將一塊數據從存儲多寄存器傳送指令用于將一塊數據從存儲器的某一位置拷貝到另一位置。器的某一位置拷貝到另一位置。 如:如:STMIAR0!,R1-R7;將將R1R7的數據保的數據保存到存儲器中。存儲指針存到存儲器中。存儲指針R0在保存在保存第一個值之第一個值之后后增加

15、,增長方向為向上增長。增加,增長方向為向上增長。1 ARM處理器尋址方式尋址方式分類尋址方式分類塊拷貝尋址塊拷貝尋址第第15頁頁/共共70頁頁第14頁/共70頁 相對尋址是基址尋址的一種變通。由相對尋址是基址尋址的一種變通。由程序計數程序計數器器PCPC提供基準地址提供基準地址,指令中的地址碼字段作為偏移,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數的有效地址。量,兩者相加后得到的地址即為操作數的有效地址。相對尋址指令舉例如下:相對尋址指令舉例如下: BL SUBR1;調用到調用到SUBR1子程序子程序 BEQLOOP;條件跳轉到條件跳轉到LOOP標號處標號處 .LOOP MO

16、VR6,#1.SUBR1. 1 ARM處理器尋址方式尋址方式分類尋址方式分類相對尋址相對尋址第第16頁頁/共共70頁頁第15頁/共70頁 1 ARM指令集 簡單的ARM程序;文件名:文件名:TEST1.S;功能:實現兩個寄存器相加功能:實現兩個寄存器相加 ;說明:使用說明:使用ARMulate軟件仿真調試軟件仿真調試 AREAExample1,CODE,READONLY ;聲明代碼段聲明代碼段Example1 ENTRY ;標識程序入口標識程序入口 CODE32 ;聲明聲明32位位ARM指令指令START MOVR0,#0 ;設置參數設置參數 MOVR1,#10LOOPBLADD_SUB ;調

17、用子程序調用子程序ADD_SUB BLOOP ;跳轉到跳轉到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回子程序返回 END ;文件結束文件結束 使用“;”進行注釋標號頂格寫實際代碼段聲明文件結束第第17頁頁/共共70頁頁第16頁/共70頁 ARM指令小節(jié)目錄1.指令格式2.條件碼3.存儲器訪問指令4.數據處理指令5.乘法指令6.ARM分支指令7.雜項指令8.偽指令第第18頁頁/共共70頁頁第17頁/共70頁 ARM ARM是三地址指令格式,指令的基本格式如下:是三地址指令格式,指令的基本格式如下:1 ARM指令集介紹 ARM指令集

18、基本指令格式 S , 其中其中號內的項是必須的,號內的項是必須的, 號內的項是可選的。號內的項是可選的。各項的說明如下:各項的說明如下:opcode:指令助記符;:指令助記符;cond:執(zhí)行條件;執(zhí)行條件;S:是否影響:是否影響CPSRCPSR寄存器的值;寄存器的值;Rd:目標寄存器;:目標寄存器; Rn:第:第1 1個操作數的寄存器;個操作數的寄存器;operand2:第:第2 2個操作數;個操作數;指令語法指令語法目標寄存器(目標寄存器(Rd) 源寄存器源寄存器1(Rn)源寄存器源寄存器2(Rm)ADD r3,r1,r2r3r1r2例例:第第19頁頁/共共70頁頁第18頁/共70頁 ARM

19、ARM指令的基本格式如下:指令的基本格式如下:1 ARM指令集介紹ARM指令集第2個操作數 S , 靈活的使用第靈活的使用第2 2個操作數個操作數“operand2”能能夠提高代碼效率。它有如下的形式:夠提高代碼效率。它有如下的形式:#immed_8r#immed_8r常數表達式;常數表達式;RmRm寄存器方式;寄存器方式;Rm,shiftRm,shift寄存器移位方式;寄存器移位方式;第第20頁頁/共共70頁頁第19頁/共70頁1 ARM指令集介紹ARM指令集第2個操作數#immed_8r#immed_8r常數表達式常數表達式例如:例如:ADD R1,R2,#0 x0F說明:說明:ADD條件

20、條件S , , dest = op_1 + op_2 將把兩個操作數加起來,把結果放置到目的寄存器中。將把兩個操作數加起來,把結果放置到目的寄存器中。操作數操作數 1 是一個寄存器,操作數是一個寄存器,操作數 2 可以是一個寄存器,被移位的寄存可以是一個寄存器,被移位的寄存器,或一個立即值器,或一個立即值: 第第21頁頁/共共70頁頁第20頁/共70頁1 ARM指令集介紹ARM指令集第2個操作數RmRm寄存器方式寄存器方式 在寄存器方式下,操作數即為寄存在寄存器方式下,操作數即為寄存器的數值。器的數值。例如:例如:SUB R1,R1,R2說明:說明:SUBSUB條件條件S , , S , ,

21、dest = op_1 - op_2 dest = op_1 - op_2 第第22頁頁/共共70頁頁第21頁/共70頁1 ARM指令集介紹ARM指令集第2個操作數Rm,shiftRm,shift寄存器移位方式寄存器移位方式 將寄存器的移位結果作為操作數(移位操將寄存器的移位結果作為操作數(移位操作不消耗額外的時間),但作不消耗額外的時間),但RmRm值保持不變,值保持不變,移位方法如下:移位方法如下:ADD R0, R2, R3,LSL#1 ; R0 = R2 + (R3 1) ADD R0, R2, R3,LSL#1 ; R0 = R2 + (R3 1) 操作碼操作碼說明說明操作碼操作碼說

22、明說明ASR #n算術右移算術右移n位位ROR #n循環(huán)右移循環(huán)右移n位位LSL #n邏輯左移邏輯左移n位位RRX帶擴展的循環(huán)右移帶擴展的循環(huán)右移1位位LSR #n邏輯右移邏輯右移n位位第第23頁頁/共共70頁頁第22頁/共70頁1 ARM指令集介紹ARM指令集第2個操作數LSL移位操作:移位操作:0LSR移位操作:移位操作:0ASR移位操作:移位操作:ROR移位操作:移位操作:RRX移位操作:移位操作:CArithmetic Shift Right Logic Shift RightLogic Shift LeftRotate Right 第第24頁頁/共共70頁頁第23頁/共70頁1 AR

23、M指令集介紹ARM指令集第2個操作數Rm,shiftRm,shift寄存器移位方式寄存器移位方式例如:例如:A D D R 1 , R 1 , R 1 , L S L #3 ;R1=R1+R1R3第第25頁頁/共共70頁頁第24頁/共70頁 ARM ARM指令的基本格式如下:指令的基本格式如下:1 ARM指令集介紹ARM指令集條件碼 S , 使用條件碼使用條件碼“cond”可以實現高效的邏輯操作可以實現高效的邏輯操作( (節(jié)省節(jié)省跳轉和條件語句跳轉和條件語句) ),提高代碼效率。,提高代碼效率。 所有的所有的ARMARM指令都可以條件執(zhí)行,而指令都可以條件執(zhí)行,而ThumbThumb指令指令只

24、有只有B B(跳轉)指令具有條件執(zhí)行功能。如果指令不標(跳轉)指令具有條件執(zhí)行功能。如果指令不標明條件代碼,將默認為無條件(明條件代碼,將默認為無條件(ALAL)執(zhí)行。)執(zhí)行。第第26頁頁/共共70頁頁第25頁/共70頁1 ARM指令集介紹ARM指令集條件碼示例:示例:第第27頁頁/共共70頁頁第26頁/共70頁1 ARM指令集介紹ARM指令集存儲器訪問指令 ARM ARM處理器是典型的處理器是典型的RISCRISC處理器,對存處理器,對存儲器的訪問只能使用儲器的訪問只能使用加載和存儲加載和存儲指令實現。指令實現。RAMRAM存儲空間及存儲空間及I/OI/O映射空間統(tǒng)一編址,除映射空間統(tǒng)一編址

25、,除對對RAMRAM操作以外,對外圍操作以外,對外圍IOIO、程序數據的訪、程序數據的訪問均要通過加載問均要通過加載/ /存儲指令進行。存儲指令進行。 存儲器訪問指令分為存儲器訪問指令分為單寄存器操作指令單寄存器操作指令和和多寄存器操作指令多寄存器操作指令。第第28頁頁/共共70頁頁第27頁/共70頁助記符助記符說明說明操作操作條件碼位置條件碼位置LDR Rd,addressing 加載字數據加載字數據RdRdaddressingaddressing,addressingaddressing索引索引LDRcondLDRcondLDRB Rd,addressing 加載無符號字節(jié)數據加載無符號字

26、節(jié)數據RdRdaddressingaddressing,addressingaddressing索引索引LDRcondBLDRcondBLDRT Rd,addressing以用戶模式加載字數據以用戶模式加載字數據RdRdaddressingaddressing,addressingaddressing索引索引LDRcondTLDRcondTLDRBT Rd, addressing 以用戶模式加載無符號以用戶模式加載無符號字節(jié)數據字節(jié)數據RdRdaddressingaddressing,addressingaddressing索引索引LDRcondBTLDRcondBTLDRH Rd, addr

27、essing 加載無符號半字數據加載無符號半字數據RdRdaddressingaddressing,addressingaddressing索引索引LDRcondHLDRcondHLDRSB Rd, addressing 加載有符號字節(jié)數據加載有符號字節(jié)數據RdRdaddressingaddressing,addressingaddressing索引索引LDRcondSBLDRcondSBLDRSH Rd, addressing加載有符號半字數據加載有符號半字數據 Rdaddressing,addressing索引索引 LDRcondSH ARM存儲器訪問指令單寄存器加載第第29頁頁/共共70

28、頁頁第28頁/共70頁助記符助記符說明說明操作操作條件碼位置條件碼位置STR Rd, addressing 存儲字數據存儲字數據addressingaddressingRdRd,addressingaddressing索引索引STRcondSTRcondSTRB Rd,addressing 存儲字節(jié)數據存儲字節(jié)數據addressingaddressingRdRd,addressingaddressing索引索引STRcondBSTRcondBSTRT Rd,addressing 以用戶模式存儲字數以用戶模式存儲字數據據addressingaddressingRdRd, addressingad

29、dressing索引索引STRcondTSTRcondTSTRBT Rd,addressing 以用戶模式存儲字節(jié)以用戶模式存儲字節(jié)數據數據addressingaddressingRdRd,addressingaddressing索引索引STRcondBTSTRcondBTSTRH Rd,addressing 存儲半字數據存儲半字數據addressing addressing RdRd,addressingaddressing索引索引STRcondHSTRcondHARM存儲器訪問指令單寄存器存儲 LDR/STRLDR/STR指令用于對指令用于對內存變量的訪問、內存緩沖區(qū)數據的訪問、查表、內存

30、變量的訪問、內存緩沖區(qū)數據的訪問、查表、外圍部件的控制操外圍部件的控制操作等。若使用作等。若使用LDRLDR指令加載數據到指令加載數據到PCPC寄存器,則實現程寄存器,則實現程序跳轉功能,這樣也就實現了程序散轉。序跳轉功能,這樣也就實現了程序散轉。 所有單寄存器加載所有單寄存器加載/ /存儲指令可分為存儲指令可分為“字和無符號字節(jié)加載存儲指令字和無符號字節(jié)加載存儲指令”和和“半字和有符號字節(jié)加載存儲指令。半字和有符號字節(jié)加載存儲指令。第第30頁頁/共共70頁頁第29頁/共70頁LDRLDR和和STRSTR字和無符號字節(jié)加載字和無符號字節(jié)加載/ /存儲指令存儲指令 LDRLDR指令用于從內存中讀

31、取單一字或字節(jié)數指令用于從內存中讀取單一字或字節(jié)數據存入寄存器中,據存入寄存器中,STRSTR指令用于將寄存器中的單一指令用于將寄存器中的單一字或字節(jié)數據保存到內存。指令格式如下:字或字節(jié)數據保存到內存。指令格式如下:ARM存儲器訪問指令單寄存器存儲 LDRcondTRd, ;將指定地址上的將指定地址上的字數據字數據讀入讀入Rd STRcondTRd, ;將將Rd中的字數據存入指定地址中的字數據存入指定地址 LDRcondBTRd, ;將指定地址上的將指定地址上的字節(jié)數據字節(jié)數據讀入讀入Rd STRcondBTRd, ;將將Rd中的字節(jié)數據存入指定地址中的字節(jié)數據存入指定地址 其中,其中,T

32、T為可選后綴。若指令有為可選后綴。若指令有T T,那么即使處,那么即使處理器是在特權模式下,存儲系統(tǒng)也將訪問看成是在理器是在特權模式下,存儲系統(tǒng)也將訪問看成是在用戶模式下進行的。用戶模式下進行的。T T在用戶模式下無效,不能與在用戶模式下無效,不能與前索引偏移一起使用前索引偏移一起使用T T。 第第31頁頁/共共70頁頁第30頁/共70頁ARM存儲器訪問指令單寄存器存儲LDRLDR和和STRSTR字和無符號字節(jié)加載字和無符號字節(jié)加載/ /存儲指令存儲指令 LDR/STRLDR/STR指令尋址非常靈活,它由兩部分組成,其中一部分為一個指令尋址非常靈活,它由兩部分組成,其中一部分為一個基址寄存器,

33、可以為任一個通用寄存器;另一部分為一個地址偏移量?;芳拇嫫?,可以為任一個通用寄存器;另一部分為一個地址偏移量。地址偏移量有以下地址偏移量有以下3 3種格式:種格式: 立即數立即數。立即數可以是一個無符號的數值。這個數據可以加到基址寄存。立即數可以是一個無符號的數值。這個數據可以加到基址寄存器,也可以從基址寄存器中減去這個數值。器,也可以從基址寄存器中減去這個數值。 如:如:LDR R1,R0,#0 x12 ;R1-R0+0 x12寄存器寄存器。寄存器中的數值可以加到基址寄存器,也可以從基址寄存器中。寄存器中的數值可以加到基址寄存器,也可以從基址寄存器中減去這個數值。減去這個數值。 如:如:L

34、DR R1,R0,R2 ; R1-R0+R2 LDR R1,R0,-R2 ; R1-R0-R2寄存器及移位常數寄存器及移位常數。寄存器移位后的值可以加到基址寄存器,也可以從。寄存器移位后的值可以加到基址寄存器,也可以從基址寄存器中減去這個數值?;芳拇嫫髦袦p去這個數值。 如:如:LDR R1,R0,R2,LSL #2 ;R1-R0+R2*4 第第32頁頁/共共70頁頁第31頁/共70頁LDRLDR和和STRSTR半字和有符號字節(jié)加載半字和有符號字節(jié)加載/ /存儲指令存儲指令 這類這類LDR/STRLDR/STR指令可加載有符號半字或字節(jié),指令可加載有符號半字或字節(jié),可加載可加載/ /存儲無符號

35、半字。偏移量格式、尋址方式與存儲無符號半字。偏移量格式、尋址方式與加載加載/ /存儲字和無符號字節(jié)指令相同。存儲字和無符號字節(jié)指令相同。 ARM存儲器訪問指令單寄存器存儲 LDRcondSB Rd,;將指定地址上的將指定地址上的有符號字節(jié)有符號字節(jié)讀入讀入Rd LDRcondSH Rd,;將指定地址上的將指定地址上的有符號半字有符號半字讀入讀入Rd LDRcondH Rd,;將指定地址上的將指定地址上的半字數據半字數據讀入讀入Rd STRcondH Rd,;將將Rd中的中的半字數據存入半字數據存入指定地址指定地址注意注意:1. 1.有符號位半字有符號位半字/ /字節(jié)加載是指用符號位加載擴展到字

36、節(jié)加載是指用符號位加載擴展到3232位,無符號半字加載是位,無符號半字加載是指用零擴展到指用零擴展到3232位;位;2.2.半字讀寫的指定地址必須為半字讀寫的指定地址必須為偶數偶數,否則將產生不可靠的結果;,否則將產生不可靠的結果;第第33頁頁/共共70頁頁第32頁/共70頁LDRLDR和和STRSTR指令應用示例:指令應用示例:1. 1.加載加載/ /存儲字和無符號字節(jié)指令存儲字和無符號字節(jié)指令LDRR2,R5;將將R5指向地址的字數據存入指向地址的字數據存入R2STRR1,R0,#0 x04 ;將將R1的數據存儲到的數據存儲到R0+0 x04地址地址LDRBR3,R2,#-1 ;將將R2指

37、向地址的字節(jié)數據存入指向地址的字節(jié)數據存入R3,R2R21STRBR0,R3,-R8 ASR 2 ;R0-R3-R8/4,存儲存儲R0的最低有效字節(jié)的最低有效字節(jié)2.2.加載加載/ /存儲半字和有符號字節(jié)指令存儲半字和有符號字節(jié)指令LDRSB R1,R0,R3;將將R0+R3地址上的字節(jié)數據存入地址上的字節(jié)數據存入R1,;高高24位用符號擴展位用符號擴展LDRH R6,R2,#2;將將R2指向地址的半字數據存入指向地址的半字數據存入R6,高,高16位用位用0擴展擴展;讀出后,讀出后,R2=R2+2STRH R1,R0,#2!;將將R1的半字數據保存到的半字數據保存到R0+2地址,地址,;只修改

38、低只修改低2字節(jié)數據,然后字節(jié)數據,然后R0=R0+2ARM存儲器訪問指令單寄存器存儲第第34頁頁/共共70頁頁第33頁/共70頁 (3 3)LDRLDR和STRSTR ARM存儲器訪問指令單寄存器存儲第第35頁頁/共共70頁頁第34頁/共70頁助記符助記符說明說明操作操作條件碼位置條件碼位置LDMmode Rn!,reglist 多寄存器加載多寄存器加載reglistreglistRn.Rn.,RnRn回寫等回寫等LDMcondLDMcondmodemodeSTMmode Rn!,reglist 多寄存器存儲多寄存器存儲Rn.reglist,RnRn.reglist,Rn回回寫等寫等STMc

39、ondSTMcondmodemode ARM存儲器訪問指令多寄存器存取第第36頁頁/共共70頁頁第35頁/共70頁ARM存儲器訪問指令多寄存器存取 多寄存器加載多寄存器加載/ /存儲指令格式如下:存儲指令格式如下: LDMcond Rn!,reglist STMcond Rn!,reglistcondcond:指令執(zhí)行的條件;:指令執(zhí)行的條件;模式模式:控制地址的增長方式,一共有:控制地址的增長方式,一共有8 8種模式;種模式;! !:表示在操作結束后,將最后的地址寫回:表示在操作結束后,將最后的地址寫回RnRn中;中;reglistreglist :表示寄存器列表,可以包含多個寄存器,它們使

40、用:表示寄存器列表,可以包含多個寄存器,它們使用“, ,”隔開,如隔開,如R1,R2,R6-R9R1,R2,R6-R9,寄存器由小到大排列;,寄存器由小到大排列;:可選后綴。允許在用戶模式或系統(tǒng)模式下使用。它有以下兩個功能:可選后綴。允許在用戶模式或系統(tǒng)模式下使用。它有以下兩個功能:1 1)若)若opop是是LDMLDM且寄存器列表包含且寄存器列表包含R15R15時,那么除了正常的多寄存器傳送外,時,那么除了正常的多寄存器傳送外,還將還將SPSRSPSR也復制到也復制到CPSRCPSR中。這用于異常處理返回,僅在異常模式下使用。中。這用于異常處理返回,僅在異常模式下使用。2 2)如寄存器列表包

41、含)如寄存器列表包含R15R15時,數據傳入或傳出的是用戶模式下的寄存器,而時,數據傳入或傳出的是用戶模式下的寄存器,而不是當前模式的寄存器。不是當前模式的寄存器。第第37頁頁/共共70頁頁第36頁/共70頁ARM存儲器訪問指令多寄存器存取LDMLDM和和STMSTM多寄存器加載多寄存器加載/ /存儲指令編碼存儲指令編碼指令執(zhí)行的條件碼指令執(zhí)行的條件碼S S 對 應 于 指 令 中對 應 于 指 令 中的的”符號符號P P表示前表示前/ /后變址后變址U U表示加表示加/ /減減WW表示回寫表示回寫寄存器列表寄存器列表RnRn為基址寄存器為基址寄存器L L用于區(qū)別加載(用于區(qū)別加載(L L為為

42、1 1)或存儲(或存儲(L L為為0 0)第第38頁頁/共共70頁頁第37頁/共70頁ARM存儲器訪問指令多寄存器存取 多寄存器加載多寄存器加載/ /存儲指令的存儲指令的8 8種模式如下表所示,右邊四種為堆棧種模式如下表所示,右邊四種為堆棧操作、左邊四種為數據傳送操作。操作、左邊四種為數據傳送操作。模式模式說明說明模式模式說明說明IA每次傳送后地址加每次傳送后地址加4FD滿遞減堆棧滿遞減堆棧IB每次傳送前地址加每次傳送前地址加4ED空遞減堆??者f減堆棧DA每次傳送后地址減每次傳送后地址減4FA滿遞增堆棧滿遞增堆棧DB每次傳送前地址減每次傳送前地址減4EA空遞增堆??者f增堆棧數據塊傳送操作數據塊

43、傳送操作堆棧操作堆棧操作 進行數據復制時,進行數據復制時,先設置好源數據指針和目標指針,然后使用塊先設置好源數據指針和目標指針,然后使用塊拷貝尋址指令拷貝尋址指令LDMIA/STMIALDMIA/STMIA、LDMIB/STMIBLDMIB/STMIB、LDMDA/STMDALDMDA/STMDA、LDMDB/STMDBLDMDB/STMDB進行讀取和存儲進行讀取和存儲 。 進行堆棧操作操作時,進行堆棧操作操作時,要先設置堆棧指針(要先設置堆棧指針(SPSP),然后使用堆棧),然后使用堆棧尋址指令尋址指令STMFD/LDMFD STMFD/LDMFD 、STMED/LDMEDSTMED/LDM

44、ED、STMFA/LDMFASTMFA/LDMFA和和STMEA/LDMEASTMEA/LDMEA實現堆棧操作。實現堆棧操作。第第39頁頁/共共70頁頁第38頁/共70頁ARM存儲器訪問指令多寄存器存取數據塊傳送指數據塊傳送指令令操作過程如操作過程如右圖所示,其右圖所示,其中中R1R1為指令執(zhí)為指令執(zhí)行前的基址寄行前的基址寄存器,存器,R1R1則為則為指令執(zhí)行后的指令執(zhí)行后的基址寄存器?;芳拇嫫?。R5R6R7R1 R1 指令指令STMIA R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令指令STMDA R1!,R5-R74008H40

45、04H4000H4014H4010H400CHR5R6R7R1 R1 指令指令STMIB R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令指令STMDB R1!,R5-R74008H4004H4000H4014H4010H400CH第第40頁頁/共共70頁頁第39頁/共70頁ARM存儲器訪問指令多寄存器存取數據塊傳送數據塊傳送存儲存儲堆棧操作堆棧操作壓棧壓棧說明說明數據塊傳送數據塊傳送加載加載堆棧操作堆棧操作出棧出棧說明說明STMDASTMED空遞減空遞減LDMDALDMFA滿遞減滿遞減STMIASTMEA空遞增空遞增LDMIALDMF

46、D滿遞增滿遞增STMDBSTMFD滿遞減滿遞減LDMDBLDMEA空遞減空遞減STMIBSTMFA滿遞增滿遞增LDMIBLDMED空遞增空遞增;使用數據塊傳送指令進行堆棧操作使用數據塊傳送指令進行堆棧操作STMDAR0!,R5-R6. . .LDMIBR0!,R5-R6;使用堆棧指令進行堆棧操作使用堆棧指令進行堆棧操作STMEDR13!,R5-R6. . .LDMEDR13!,R5-R6 兩段代碼的執(zhí)行結果是一樣的,但是使用堆棧指令的壓棧和出棧兩段代碼的執(zhí)行結果是一樣的,但是使用堆棧指令的壓棧和出棧操作編程很簡單(只要前后一致即可),而使用數據塊指令進行壓棧操作編程很簡單(只要前后一致即可),

47、而使用數據塊指令進行壓棧和出棧操作則需要考慮空與滿、加與減對應的問題。和出棧操作則需要考慮空與滿、加與減對應的問題。 堆棧操作(詳見堆棧操作(詳見“4.1 4.1 尋址方式堆棧尋址尋址方式堆棧尋址”)和數據塊傳送指令)和數據塊傳送指令類似,也有類似,也有4 4種模式,它們之間的關系如下表所示:種模式,它們之間的關系如下表所示:第第41頁頁/共共70頁頁第40頁/共70頁助記符助記符說明說明操作操作條件碼位置條件碼位置SWP Rd,Rm,Rn 寄存器和存儲器字數寄存器和存儲器字數據交換據交換RdRdRnRn,RnRnRm Rm (Rn(RnRdRd或或Rm)Rm)SWPcondSWPcondSW

48、PB Rd,Rm,Rn 寄存器和存儲器字節(jié)寄存器和存儲器字節(jié)數據交換數據交換RdRdRnRn,RnRnRm Rm (Rn(RnRdRd或或Rm)Rm)SWPcondBSWPcondBARM存儲器訪問指令寄存器和存儲器交換指令 SWP SWP指令用于將一個內存單元指令用于將一個內存單元( (該單元地址放在寄存器該單元地址放在寄存器RnRn中中) )的的內容讀取到一個寄存器內容讀取到一個寄存器RdRd中,同時將另一個寄存器中,同時將另一個寄存器RmRm的內容寫入的內容寫入到該內存單元中。使用到該內存單元中。使用SWPSWP可實現信號量操作??蓪崿F信號量操作。 指令格式如下:指令格式如下:SWPco

49、ndB Rd,Rm,Rn 其中,其中,B B為可選后綴,若有為可選后綴,若有B B,則交換字節(jié),否則交換,則交換字節(jié),否則交換3232位字;位字;RdRd用于保存從存儲器中讀入的數據;用于保存從存儲器中讀入的數據;RmRm的數據用于存儲到存儲器的數據用于存儲到存儲器中,若中,若RmRm與與RdRd相同,則為寄存器與存儲器內容進行互換;相同,則為寄存器與存儲器內容進行互換;RnRn為要為要進行數據交換的存儲器地址,進行數據交換的存儲器地址,RnRn不能與不能與RdRd和和RmRm相同。相同。 第第42頁頁/共共70頁頁第41頁/共70頁1 ARM指令集介紹ARMARM指令集指令集ARMARM數據

50、處理指令數據處理指令 數據處理指令大致可分為數據處理指令大致可分為3 3類:類: 數據傳送指令;數據傳送指令;算術邏輯運算指令;算術邏輯運算指令;比較指令。比較指令。 數據處理指令數據處理指令只能對寄存器只能對寄存器的內容進行的內容進行操作,而不能對內存中的數據進行操作。所操作,而不能對內存中的數據進行操作。所有有ARMARM數據處理指令均可選擇使用數據處理指令均可選擇使用S S后綴,以后綴,以使指令影響狀態(tài)標志。使指令影響狀態(tài)標志。 第第43頁頁/共共70頁頁第42頁/共70頁ARM數據處理指令指令編碼帶進位加法ADC0101帶進位減法指令SBC0110帶進位逆向減法指令RSC0111位測試

51、指令TST1000相等測試指令TEQ1001比較指令CMP1010負數比較指令CMN1011邏輯或操作指令ORR1100數據傳送MOV1101位清除指令BIC1110數據非傳送MVN1111加法運算指令ADD0100逆向減法指令RSB0011減法運算指令SUB0010邏輯異或操作指令EOR0001邏輯與操作指令AND0000說明指令助記符操作碼opcode操作碼功能表第第44頁頁/共共70頁頁第43頁/共70頁助記符助記符說明說明操作操作條件碼位置條件碼位置MOV Rd,operand2 Rd,operand2數據傳送數據傳送RdRdoperand2 operand2 MOVcondSMOVc

52、ondSMVN Rd,operand2 Rd,operand2數據非傳送數據非傳送RdRd(operand2)(operand2)MVNcondSMVNcondSARM數據處理指令數據傳送注:當后綴注:當后綴S S時,這些指令根據結果更新標時,這些指令根據結果更新標志志N N和和Z Z,在計算,在計算Operand2Operand2時更新標志時更新標志C C,不,不影響標志影響標志V V。第第45頁頁/共共70頁頁第44頁/共70頁助記符說明操作條件碼位置MOV Rd,operand2MOV Rd,operand2數據傳送數據傳送RdRdoperand2 operand2 MOVcondSMO

53、VcondSMVN Rd,operand2MVN Rd,operand2數據非傳送數據非傳送RdRd(operand2)(operand2)MVNcondSMVNcondSARM數據處理指令數據傳送 MVNMVN指令將指令將8 8位立即數或寄存器(位立即數或寄存器(operand2operand2)按位按位取反取反后傳送到目標寄存器(后傳送到目標寄存器(RdRd),因為其具有取反功能,),因為其具有取反功能,所以可以裝載范圍更廣的立即數。指令格式如下:所以可以裝載范圍更廣的立即數。指令格式如下: MVNcondS Rd,operand2 MVNMVN指令舉例如下:指令舉例如下: MVNR1,#

54、0 xFF;R1=0 xFFFFFF00R1=0 xFFFFFF00 MVNR1,R2 ;將將R2R2按位取反,結果存到按位取反,結果存到R1R1第第46頁頁/共共70頁頁第45頁/共70頁助記符助記符說明說明操作操作條件碼位置條件碼位置ADD Rd, Rn, operand2ADD Rd, Rn, operand2加法運算指令加法運算指令RdRdRn+operand2Rn+operand2ADDcondSADDcondSSUB Rd, Rn, operand2SUB Rd, Rn, operand2減法運算指令減法運算指令RdRdRn-operand2Rn-operand2SUBcondSS

55、UBcondSRSB Rd, Rn, operand2RSB Rd, Rn, operand2逆向減法指令逆向減法指令RdRdoperand2-Rnoperand2-RnRSBcondSRSBcondSADC Rd, Rn, operand2ADC Rd, Rn, operand2帶進位加法帶進位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSADCcondSSBC Rd, Rn, operand2SBC Rd, Rn, operand2帶進位減法指帶進位減法指令令RdRdRn-operand2-Rn-operand2-(NOT)Carry(NO

56、T)CarrySBCcondSSBCcondSRSC Rd, Rn, operand2RSC Rd, Rn, operand2帶進位逆向減帶進位逆向減法指令法指令RdRdoperand2-Rn-operand2-Rn-(NOT)Carry(NOT)CarryRSCcondSRSCcondSARM數據處理指令算術運算 加法運算指令加法運算指令ADDADD指令將指令將operand2operand2的值與的值與RnRn的值相加,的值相加,結果保存到結果保存到RdRd寄存器。指令格式如下:寄存器。指令格式如下: ADDcondS Rd,Rn,operand2 應用示例:應用示例: ADDS R1,R

57、1,#1020; R1=R1+1020; R1=R1+1020,并影響標志位,并影響標志位 ADD R1,R1,R2,LSL #2;R1=R1+R22;R1=R1+R22 第第47頁頁/共共70頁頁第46頁/共70頁助記符助記符說明說明操作操作條件碼位置條件碼位置AND Rd, Rn, operand2AND Rd, Rn, operand2邏 輯 與 操邏 輯 與 操作指令作指令RdRdRn & operand2Rn & operand2ANDcondSANDcondSORR Rd, Rn, operand2ORR Rd, Rn, operand2邏 輯 或 操邏 輯 或 操作指令作指令Rd

58、RdRn | operand2Rn | operand2ORRcondSORRcondSEOR Rd, Rn, operand2EOR Rd, Rn, operand2邏 輯 異 或邏 輯 異 或操作指令操作指令RdRdRn operand2Rn operand2EORcondSEORcondSBIC Rd, Rn, operand2BIC Rd, Rn, operand2位 清 除 指位 清 除 指令令RdRdRn & (operand2)Rn & (operand2) BICcondSBICcondSARM數據處理指令邏輯運算指令第第48頁頁/共共70頁頁第47頁/共70頁助記符助記符說明

59、說明操作操作條件碼位置條件碼位置CMP Rn, operand2CMP Rn, operand2比較指令比較指令標 志標 志 N N 、 Z Z 、 C C 、V VRn-operand2Rn-operand2CMPcondCMPcondCMN Rn, operand2CMN Rn, operand2負數比較指令負數比較指令標 志標 志 N N 、 Z Z 、 C C 、V VRn+operand2Rn+operand2CMNcondCMNcondTST Rn, operand2TST Rn, operand2位測試指令位測試指令標志標志N N、Z Z、C C、V VRn Rn & opera

60、nd2& operand2TSTcondTSTcondTEQ Rn, operand2TEQ Rn, operand2相等測試指令相等測試指令標志標志N N、Z Z、C C、V VRn Rn operand2 operand2TEQcondTEQcondARM數據處理指令比較指令注:這些指令影響注:這些指令影響N,Z,C和和V標志位。標志位。第第49頁頁/共共70頁頁第48頁/共70頁助記符助記符說明說明操作操作條件碼位置條件碼位置MUL Rd,Rm,RsMUL Rd,Rm,Rs3232位乘法指位乘法指令令RdRdRmRm* *Rs Rs (Rd(RdRm)Rm)MULcondSMULcond

溫馨提示

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

評論

0/150

提交評論