版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、ARM狀態(tài)下的寄存器組織(2)37個(gè)32位寄存器,其中31個(gè)為通用寄存器,6個(gè)為狀態(tài)寄存器。用戶模式、系統(tǒng)模式快速中斷模式管理模式數(shù)據(jù)訪問(wèn)終止模式外部中斷模式未定義指令中止模式第第2頁(yè)頁(yè)/共共70頁(yè)頁(yè)第1頁(yè)/共70頁(yè)1 ARM處理器尋址方式尋址方式分類尋址方式分類 尋址方式是根據(jù)指令中給出的地址碼字段來(lái)實(shí)現(xiàn)尋址方式是根據(jù)指令中給出的地址碼字段來(lái)實(shí)現(xiàn)尋找真實(shí)操作數(shù)地址的方式尋找真實(shí)操作數(shù)地址的方式。ARMARM處理器具有處理器具有9 9種基本尋種基本尋址方式。址方式。1. 1.寄存器尋址;寄存器尋址; 2.2.立即尋址;立即尋址;3.3.寄存器移位尋址;寄存器移位尋址;4.4.寄存器間接尋址;寄
2、存器間接尋址;5.5.基址尋址;基址尋址;6.6.多寄存器尋址;多寄存器尋址;7.7.堆棧尋址;堆棧尋址;8.8.塊拷貝尋址;塊拷貝尋址;9.9.相對(duì)尋址。相對(duì)尋址。第第3頁(yè)頁(yè)/共共70頁(yè)頁(yè)第2頁(yè)/共70頁(yè) 操作數(shù)的值在寄存器中,指令中的地址操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號(hào),指令執(zhí)行時(shí)直碼字段指出的是寄存器編號(hào),指令執(zhí)行時(shí)直接取出寄存器值來(lái)操作。寄存器尋址指令舉接取出寄存器值來(lái)操作。寄存器尋址指令舉例如下:例如下: MOV R1,R2 ;將將R2的值存入的值存入R1 SUB R0,R1,R2 ;將將R1的值減去的值減去R2的值,結(jié)果保存到的值,結(jié)果保存到R0 0 xA
3、A0 x55R2R11 ARM處理器尋址方式尋址方式分類尋址方式分類寄存器尋址寄存器尋址MOV R1,R20 xAA第第4頁(yè)頁(yè)/共共70頁(yè)頁(yè)第3頁(yè)/共70頁(yè) 立即尋址指令中的操作碼字段后面的立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說(shuō),地址碼部分即是操作數(shù)本身,也就是說(shuō),數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立即使用的操作數(shù)出了可以立即使用的操作數(shù)( (這樣的數(shù)稱為這樣的數(shù)稱為立即數(shù)立即數(shù)) )。立即尋址指令舉例如下:。立即尋址指令舉例如下: SUBSR0,R0,#1 ;R0減減1,結(jié)果,結(jié)果放入放入R0,并且影響標(biāo)志位,并且影響
4、標(biāo)志位MOV R0,#0 xFF000 ;將立即數(shù)將立即數(shù)0 xFF000裝入裝入R0寄存器寄存器 0 x55R0MOV R0,#0 xFF00程序存儲(chǔ)1 ARM處理器尋址方式尋址方式分類立即尋址MOV R0,#0 xFF000 xFF00從代碼中獲得數(shù)據(jù)第第5頁(yè)頁(yè)/共共70頁(yè)頁(yè)第4頁(yè)/共70頁(yè) 寄存器移位尋址是寄存器移位尋址是ARMARM指令集特有的尋址方式。當(dāng)指令集特有的尋址方式。當(dāng)?shù)诘? 2個(gè)操作數(shù)是寄存器移位方式時(shí),第個(gè)操作數(shù)是寄存器移位方式時(shí),第2 2個(gè)寄存器操作數(shù)個(gè)寄存器操作數(shù)在與第在與第1 1個(gè)操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。寄存器個(gè)操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。寄存器移位
5、尋址指令舉例如下:移位尋址指令舉例如下:MOV R0,R2,LSL #3;R2的值左移的值左移3位,結(jié)果放入位,結(jié)果放入R0, ;即是即是R0=R28 ANDS R1,R1,R2,LSL R3;R2的值左移的值左移R3位,然后位,然后 ;和和R1相相“與與”操作,結(jié)果放入操作,結(jié)果放入R10 x55R0R20 x011 ARM處理器尋址方式尋址方式分類寄存器移位尋址MOV R0,R2,LSL #30 x080 x08邏輯左移3位第第6頁(yè)頁(yè)/共共70頁(yè)頁(yè)第5頁(yè)/共70頁(yè) 寄存器間接尋址指令中的地址碼給出的是一寄存器間接尋址指令中的地址碼給出的是一個(gè)通用寄存器的編號(hào),所需的操作數(shù)保存在寄個(gè)通用寄存
6、器的編號(hào),所需的操作數(shù)保存在寄存器指定地址的存儲(chǔ)單元中,即寄存器為操作存器指定地址的存儲(chǔ)單元中,即寄存器為操作數(shù)的地址指針。例如:數(shù)的地址指針。例如: LDR R1,R2 ;將將R2指向的存儲(chǔ)單元的數(shù)據(jù)指向的存儲(chǔ)單元的數(shù)據(jù);讀出保存在讀出保存在R1中中 SWP R1,R1,R2 ;將寄存器將寄存器R1的值和的值和R2;指定的存儲(chǔ)單元的內(nèi)容交換指定的存儲(chǔ)單元的內(nèi)容交換 0 x55R0R2 0 x400000000 xAA0 x400000001 ARM處理器尋址方式 尋址方式分類寄存器間接尋址LDR R0,R20 xAA第第7頁(yè)頁(yè)/共共70頁(yè)頁(yè)第6頁(yè)/共70頁(yè) 基址尋址就是將基址寄存器的內(nèi)容與指
7、令中給出基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量(的偏移量(4K4K)相加)相加/ /減,形成操作數(shù)的有效地址。減,形成操作數(shù)的有效地址?;穼ぶ酚糜谠L問(wèn)基址附近的存儲(chǔ)單元,常用于查表、基址尋址用于訪問(wèn)基址附近的存儲(chǔ)單元,常用于查表、數(shù)組操作、功能部件寄存器訪問(wèn)等。寄存器間接尋址數(shù)組操作、功能部件寄存器訪問(wèn)等。寄存器間接尋址是偏移量為是偏移量為0 0的基址加偏移尋址。的基址加偏移尋址。基址尋址指令舉例如下基址尋址指令舉例如下( (前索引尋址前索引尋址) ): LDR R2,R3,#0 x0C ;讀取讀取R3+0 x0C地址上的地址上的 ;存儲(chǔ)單元的內(nèi)容,放入存儲(chǔ)單元的內(nèi)容,放入R2
8、STR R1,R0,#-4!;先先R0=R0-4,然后把,然后把R1的值的值;寄存到保存到寄存到保存到R0指定的存儲(chǔ)單元指定的存儲(chǔ)單元 1 ARM處理器尋址方式 尋址方式分類尋址方式分類基址尋址基址尋址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA將R3+0 x0C作為地址裝載數(shù)據(jù)第第8頁(yè)頁(yè)/共共70頁(yè)頁(yè)第7頁(yè)/共70頁(yè) 基址尋址指令舉例如下:基址尋址指令舉例如下: LDR R0,R1,#4;R0=R1,R1R14 ;后索引基址尋址后索引基址尋址 LDR R0,R1,R2 ;R0=R1+R21 ARM處理器尋址方式 尋址方式
9、分類基址尋址第第9頁(yè)頁(yè)/共共70頁(yè)頁(yè)第8頁(yè)/共70頁(yè) 多寄存器尋址一次可傳送幾個(gè)寄存器值,允多寄存器尋址一次可傳送幾個(gè)寄存器值,允許一條指令傳送許一條指令傳送1616個(gè)寄存器的任何子集或所有寄個(gè)寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下:存器。多寄存器尋址指令舉例如下: LDMIAR1!,R2-R7,R12 ;將將R1指向的指向的單元中的數(shù)據(jù)讀出到單元中的數(shù)據(jù)讀出到R2R7、R12中中(R1自動(dòng)加自動(dòng)加4) STMIAR0!,R2-R7,R12 ;將寄存器將寄存器R2R7、R12的值保存到的值保存到R0指向的存儲(chǔ)指向的存儲(chǔ); 單元中單元中(R0自動(dòng)加自動(dòng)加4)0 x40000000
10、R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存儲(chǔ)器1 ARM處理器尋址方式 尋址方式分類尋址方式分類多寄存器尋址多寄存器尋址LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000010第第10頁(yè)頁(yè)/共共70頁(yè)頁(yè)第9頁(yè)/共70頁(yè) 堆棧是一個(gè)按特定順序進(jìn)行存取的存儲(chǔ)區(qū),操堆棧是一個(gè)按特定順序進(jìn)行存取的存儲(chǔ)區(qū),操作順序?yàn)樽黜樞驗(yàn)椤昂筮M(jìn)先出后進(jìn)先出” 。堆棧尋址是隱含的,它使。堆棧尋址是隱含的,它使用一個(gè)專門(mén)的寄存器用一個(gè)專門(mén)的
11、寄存器( (堆棧指針堆棧指針) )指向一塊存儲(chǔ)區(qū)域指向一塊存儲(chǔ)區(qū)域( (堆棧堆棧) ),指針?biāo)赶虻拇鎯?chǔ)單元即是堆棧的棧頂。存,指針?biāo)赶虻拇鎯?chǔ)單元即是堆棧的棧頂。存儲(chǔ)器堆棧可分為兩種:儲(chǔ)器堆棧可分為兩種: 向上生長(zhǎng):向高地址方向生長(zhǎng),稱為遞增堆棧向上生長(zhǎng):向高地址方向生長(zhǎng),稱為遞增堆棧向下生長(zhǎng):向低地址方向生長(zhǎng),稱為遞減堆棧向下生長(zhǎng):向低地址方向生長(zhǎng),稱為遞減堆棧1 ARM處理器尋址方式尋址方式分類堆棧尋址第第11頁(yè)頁(yè)/共共70頁(yè)頁(yè)第10頁(yè)/共70頁(yè)1 ARM處理器尋址方式尋址方式分類尋址方式分類堆棧尋址堆棧尋址棧底棧底棧頂棧頂棧區(qū)棧區(qū)SP堆棧存堆棧存儲(chǔ)區(qū)儲(chǔ)區(qū)棧頂棧頂棧底棧底棧區(qū)棧區(qū)SP向下
12、向下增長(zhǎng)增長(zhǎng)向上向上增長(zhǎng)增長(zhǎng)0 x123456780 x12345678堆棧壓棧堆棧壓棧堆棧壓棧堆棧壓棧第第12頁(yè)頁(yè)/共共70頁(yè)頁(yè)第11頁(yè)/共70頁(yè)棧頂SP棧頂SP棧底棧底空堆??斩褩5讞5诐M堆棧滿堆棧 堆棧指針指向最后壓入的堆棧的有效數(shù)堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項(xiàng),稱為據(jù)項(xiàng),稱為滿堆棧滿堆棧;堆棧指針指向下一個(gè)待;堆棧指針指向下一個(gè)待壓入數(shù)據(jù)的空位置,稱為壓入數(shù)據(jù)的空位置,稱為空堆??斩褩!?1 ARM處理器尋址方式尋址方式分類尋址方式分類堆棧尋址堆棧尋址0 x123456780 x12345678棧頂棧頂SP0 x12345678棧頂棧頂SP壓棧壓棧壓棧壓棧第第13頁(yè)頁(yè)/共共7
13、0頁(yè)頁(yè)第12頁(yè)/共70頁(yè)所以可以組合出四種類型的堆棧方式:所以可以組合出四種類型的堆棧方式:滿遞增滿遞增:堆棧向上增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù):堆棧向上增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最高地址。指令如據(jù)項(xiàng)的最高地址。指令如LDMFALDMFA、STMFASTMFA等;等; 空遞增空遞增:堆棧向上增長(zhǎng),堆棧指針指向堆棧上的第:堆棧向上增長(zhǎng),堆棧指針指向堆棧上的第一個(gè)空位置。指令如一個(gè)空位置。指令如LDMEALDMEA、STMEASTMEA等;等; 滿遞減滿遞減:堆棧向下增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù):堆棧向下增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最低地址。指令如據(jù)項(xiàng)的最低地址。指令如LDMFDLDM
14、FD、STMFDSTMFD等;等;空遞減空遞減:堆棧向下增長(zhǎng),堆棧指針向堆棧下的第一:堆棧向下增長(zhǎng),堆棧指針向堆棧下的第一個(gè)空位置。指令如個(gè)空位置。指令如LDMEDLDMED、STMEDSTMED等。等。 1 ARM處理器尋址方式尋址方式分類尋址方式分類堆棧尋址堆棧尋址第第14頁(yè)頁(yè)/共共70頁(yè)頁(yè)第13頁(yè)/共70頁(yè) 多寄存器傳送指令用于將一塊數(shù)據(jù)從存儲(chǔ)多寄存器傳送指令用于將一塊數(shù)據(jù)從存儲(chǔ)器的某一位置拷貝到另一位置。器的某一位置拷貝到另一位置。 如:如:STMIAR0!,R1-R7;將將R1R7的數(shù)據(jù)保的數(shù)據(jù)保存到存儲(chǔ)器中。存儲(chǔ)指針存到存儲(chǔ)器中。存儲(chǔ)指針R0在保存在保存第一個(gè)值之第一個(gè)值之后后增加
15、,增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。增加,增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。1 ARM處理器尋址方式尋址方式分類尋址方式分類塊拷貝尋址塊拷貝尋址第第15頁(yè)頁(yè)/共共70頁(yè)頁(yè)第14頁(yè)/共70頁(yè) 相對(duì)尋址是基址尋址的一種變通。由相對(duì)尋址是基址尋址的一種變通。由程序計(jì)數(shù)程序計(jì)數(shù)器器PCPC提供基準(zhǔn)地址提供基準(zhǔn)地址,指令中的地址碼字段作為偏移,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對(duì)尋址指令舉例如下:相對(duì)尋址指令舉例如下: BL SUBR1;調(diào)用到調(diào)用到SUBR1子程序子程序 BEQLOOP;條件跳轉(zhuǎn)到條件跳轉(zhuǎn)到LOOP標(biāo)號(hào)處標(biāo)號(hào)處 .LOOP MO
16、VR6,#1.SUBR1. 1 ARM處理器尋址方式尋址方式分類尋址方式分類相對(duì)尋址相對(duì)尋址第第16頁(yè)頁(yè)/共共70頁(yè)頁(yè)第15頁(yè)/共70頁(yè) 1 ARM指令集 簡(jiǎn)單的ARM程序;文件名:文件名:TEST1.S;功能:實(shí)現(xiàn)兩個(gè)寄存器相加功能:實(shí)現(xiàn)兩個(gè)寄存器相加 ;說(shuō)明:使用說(shuō)明:使用ARMulate軟件仿真調(diào)試軟件仿真調(diào)試 AREAExample1,CODE,READONLY ;聲明代碼段聲明代碼段Example1 ENTRY ;標(biāo)識(shí)程序入口標(biāo)識(shí)程序入口 CODE32 ;聲明聲明32位位ARM指令指令START MOVR0,#0 ;設(shè)置參數(shù)設(shè)置參數(shù) MOVR1,#10LOOPBLADD_SUB ;調(diào)
17、用子程序調(diào)用子程序ADD_SUB BLOOP ;跳轉(zhuǎn)到跳轉(zhuǎn)到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回子程序返回 END ;文件結(jié)束文件結(jié)束 使用“;”進(jìn)行注釋標(biāo)號(hào)頂格寫(xiě)實(shí)際代碼段聲明文件結(jié)束第第17頁(yè)頁(yè)/共共70頁(yè)頁(yè)第16頁(yè)/共70頁(yè) ARM指令小節(jié)目錄1.指令格式2.條件碼3.存儲(chǔ)器訪問(wèn)指令4.數(shù)據(jù)處理指令5.乘法指令6.ARM分支指令7.雜項(xiàng)指令8.偽指令第第18頁(yè)頁(yè)/共共70頁(yè)頁(yè)第17頁(yè)/共70頁(yè) ARM ARM是三地址指令格式,指令的基本格式如下:是三地址指令格式,指令的基本格式如下:1 ARM指令集介紹 ARM指令集
18、基本指令格式 S , 其中其中號(hào)內(nèi)的項(xiàng)是必須的,號(hào)內(nèi)的項(xiàng)是必須的, 號(hào)內(nèi)的項(xiàng)是可選的。號(hào)內(nèi)的項(xiàng)是可選的。各項(xiàng)的說(shuō)明如下:各項(xiàng)的說(shuō)明如下:opcode:指令助記符;:指令助記符;cond:執(zhí)行條件;執(zhí)行條件;S:是否影響:是否影響CPSRCPSR寄存器的值;寄存器的值;Rd:目標(biāo)寄存器;:目標(biāo)寄存器; Rn:第:第1 1個(gè)操作數(shù)的寄存器;個(gè)操作數(shù)的寄存器;operand2:第:第2 2個(gè)操作數(shù);個(gè)操作數(shù);指令語(yǔ)法指令語(yǔ)法目標(biāo)寄存器(目標(biāo)寄存器(Rd) 源寄存器源寄存器1(Rn)源寄存器源寄存器2(Rm)ADD r3,r1,r2r3r1r2例例:第第19頁(yè)頁(yè)/共共70頁(yè)頁(yè)第18頁(yè)/共70頁(yè) ARM
19、ARM指令的基本格式如下:指令的基本格式如下:1 ARM指令集介紹ARM指令集第2個(gè)操作數(shù) S , 靈活的使用第靈活的使用第2 2個(gè)操作數(shù)個(gè)操作數(shù)“operand2”能能夠提高代碼效率。它有如下的形式:夠提高代碼效率。它有如下的形式:#immed_8r#immed_8r常數(shù)表達(dá)式;常數(shù)表達(dá)式;RmRm寄存器方式;寄存器方式;Rm,shiftRm,shift寄存器移位方式;寄存器移位方式;第第20頁(yè)頁(yè)/共共70頁(yè)頁(yè)第19頁(yè)/共70頁(yè)1 ARM指令集介紹ARM指令集第2個(gè)操作數(shù)#immed_8r#immed_8r常數(shù)表達(dá)式常數(shù)表達(dá)式例如:例如:ADD R1,R2,#0 x0F說(shuō)明:說(shuō)明:ADD條件
20、條件S , , dest = op_1 + op_2 將把兩個(gè)操作數(shù)加起來(lái),把結(jié)果放置到目的寄存器中。將把兩個(gè)操作數(shù)加起來(lái),把結(jié)果放置到目的寄存器中。操作數(shù)操作數(shù) 1 是一個(gè)寄存器,操作數(shù)是一個(gè)寄存器,操作數(shù) 2 可以是一個(gè)寄存器,被移位的寄存可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即值器,或一個(gè)立即值: 第第21頁(yè)頁(yè)/共共70頁(yè)頁(yè)第20頁(yè)/共70頁(yè)1 ARM指令集介紹ARM指令集第2個(gè)操作數(shù)RmRm寄存器方式寄存器方式 在寄存器方式下,操作數(shù)即為寄存在寄存器方式下,操作數(shù)即為寄存器的數(shù)值。器的數(shù)值。例如:例如:SUB R1,R1,R2說(shuō)明:說(shuō)明:SUBSUB條件條件S , , S , ,
21、dest = op_1 - op_2 dest = op_1 - op_2 第第22頁(yè)頁(yè)/共共70頁(yè)頁(yè)第21頁(yè)/共70頁(yè)1 ARM指令集介紹ARM指令集第2個(gè)操作數(shù)Rm,shiftRm,shift寄存器移位方式寄存器移位方式 將寄存器的移位結(jié)果作為操作數(shù)(移位操將寄存器的移位結(jié)果作為操作數(shù)(移位操作不消耗額外的時(shí)間),但作不消耗額外的時(shí)間),但RmRm值保持不變,值保持不變,移位方法如下:移位方法如下:ADD R0, R2, R3,LSL#1 ; R0 = R2 + (R3 1) ADD R0, R2, R3,LSL#1 ; R0 = R2 + (R3 1) 操作碼操作碼說(shuō)明說(shuō)明操作碼操作碼說(shuō)
22、明說(shuō)明ASR #n算術(shù)右移算術(shù)右移n位位ROR #n循環(huán)右移循環(huán)右移n位位LSL #n邏輯左移邏輯左移n位位RRX帶擴(kuò)展的循環(huán)右移帶擴(kuò)展的循環(huán)右移1位位LSR #n邏輯右移邏輯右移n位位第第23頁(yè)頁(yè)/共共70頁(yè)頁(yè)第22頁(yè)/共70頁(yè)1 ARM指令集介紹ARM指令集第2個(gè)操作數(shù)LSL移位操作:移位操作:0LSR移位操作:移位操作:0ASR移位操作:移位操作:ROR移位操作:移位操作:RRX移位操作:移位操作:CArithmetic Shift Right Logic Shift RightLogic Shift LeftRotate Right 第第24頁(yè)頁(yè)/共共70頁(yè)頁(yè)第23頁(yè)/共70頁(yè)1 AR
23、M指令集介紹ARM指令集第2個(gè)操作數(shù)Rm,shiftRm,shift寄存器移位方式寄存器移位方式例如:例如:A D D R 1 , R 1 , R 1 , L S L #3 ;R1=R1+R1R3第第25頁(yè)頁(yè)/共共70頁(yè)頁(yè)第24頁(yè)/共70頁(yè) ARM ARM指令的基本格式如下:指令的基本格式如下:1 ARM指令集介紹ARM指令集條件碼 S , 使用條件碼使用條件碼“cond”可以實(shí)現(xiàn)高效的邏輯操作可以實(shí)現(xiàn)高效的邏輯操作( (節(jié)省節(jié)省跳轉(zhuǎn)和條件語(yǔ)句跳轉(zhuǎn)和條件語(yǔ)句) ),提高代碼效率。,提高代碼效率。 所有的所有的ARMARM指令都可以條件執(zhí)行,而指令都可以條件執(zhí)行,而ThumbThumb指令指令只
24、有只有B B(跳轉(zhuǎn))指令具有條件執(zhí)行功能。如果指令不標(biāo)(跳轉(zhuǎn))指令具有條件執(zhí)行功能。如果指令不標(biāo)明條件代碼,將默認(rèn)為無(wú)條件(明條件代碼,將默認(rèn)為無(wú)條件(ALAL)執(zhí)行。)執(zhí)行。第第26頁(yè)頁(yè)/共共70頁(yè)頁(yè)第25頁(yè)/共70頁(yè)1 ARM指令集介紹ARM指令集條件碼示例:示例:第第27頁(yè)頁(yè)/共共70頁(yè)頁(yè)第26頁(yè)/共70頁(yè)1 ARM指令集介紹ARM指令集存儲(chǔ)器訪問(wèn)指令 ARM ARM處理器是典型的處理器是典型的RISCRISC處理器,對(duì)存處理器,對(duì)存儲(chǔ)器的訪問(wèn)只能使用儲(chǔ)器的訪問(wèn)只能使用加載和存儲(chǔ)加載和存儲(chǔ)指令實(shí)現(xiàn)。指令實(shí)現(xiàn)。RAMRAM存儲(chǔ)空間及存儲(chǔ)空間及I/OI/O映射空間統(tǒng)一編址,除映射空間統(tǒng)一編址
25、,除對(duì)對(duì)RAMRAM操作以外,對(duì)外圍操作以外,對(duì)外圍IOIO、程序數(shù)據(jù)的訪、程序數(shù)據(jù)的訪問(wèn)均要通過(guò)加載問(wèn)均要通過(guò)加載/ /存儲(chǔ)指令進(jìn)行。存儲(chǔ)指令進(jìn)行。 存儲(chǔ)器訪問(wèn)指令分為存儲(chǔ)器訪問(wèn)指令分為單寄存器操作指令單寄存器操作指令和和多寄存器操作指令多寄存器操作指令。第第28頁(yè)頁(yè)/共共70頁(yè)頁(yè)第27頁(yè)/共70頁(yè)助記符助記符說(shuō)明說(shuō)明操作操作條件碼位置條件碼位置LDR Rd,addressing 加載字?jǐn)?shù)據(jù)加載字?jǐn)?shù)據(jù)RdRdaddressingaddressing,addressingaddressing索引索引LDRcondLDRcondLDRB Rd,addressing 加載無(wú)符號(hào)字節(jié)數(shù)據(jù)加載無(wú)符號(hào)字
26、節(jié)數(shù)據(jù)RdRdaddressingaddressing,addressingaddressing索引索引LDRcondBLDRcondBLDRT Rd,addressing以用戶模式加載字?jǐn)?shù)據(jù)以用戶模式加載字?jǐn)?shù)據(jù)RdRdaddressingaddressing,addressingaddressing索引索引LDRcondTLDRcondTLDRBT Rd, addressing 以用戶模式加載無(wú)符號(hào)以用戶模式加載無(wú)符號(hào)字節(jié)數(shù)據(jù)字節(jié)數(shù)據(jù)RdRdaddressingaddressing,addressingaddressing索引索引LDRcondBTLDRcondBTLDRH Rd, addr
27、essing 加載無(wú)符號(hào)半字?jǐn)?shù)據(jù)加載無(wú)符號(hào)半字?jǐn)?shù)據(jù)RdRdaddressingaddressing,addressingaddressing索引索引LDRcondHLDRcondHLDRSB Rd, addressing 加載有符號(hào)字節(jié)數(shù)據(jù)加載有符號(hào)字節(jié)數(shù)據(jù)RdRdaddressingaddressing,addressingaddressing索引索引LDRcondSBLDRcondSBLDRSH Rd, addressing加載有符號(hào)半字?jǐn)?shù)據(jù)加載有符號(hào)半字?jǐn)?shù)據(jù) Rdaddressing,addressing索引索引 LDRcondSH ARM存儲(chǔ)器訪問(wèn)指令單寄存器加載第第29頁(yè)頁(yè)/共共70
28、頁(yè)頁(yè)第28頁(yè)/共70頁(yè)助記符助記符說(shuō)明說(shuō)明操作操作條件碼位置條件碼位置STR Rd, addressing 存儲(chǔ)字?jǐn)?shù)據(jù)存儲(chǔ)字?jǐn)?shù)據(jù)addressingaddressingRdRd,addressingaddressing索引索引STRcondSTRcondSTRB Rd,addressing 存儲(chǔ)字節(jié)數(shù)據(jù)存儲(chǔ)字節(jié)數(shù)據(jù)addressingaddressingRdRd,addressingaddressing索引索引STRcondBSTRcondBSTRT Rd,addressing 以用戶模式存儲(chǔ)字?jǐn)?shù)以用戶模式存儲(chǔ)字?jǐn)?shù)據(jù)據(jù)addressingaddressingRdRd, addressingad
29、dressing索引索引STRcondTSTRcondTSTRBT Rd,addressing 以用戶模式存儲(chǔ)字節(jié)以用戶模式存儲(chǔ)字節(jié)數(shù)據(jù)數(shù)據(jù)addressingaddressingRdRd,addressingaddressing索引索引STRcondBTSTRcondBTSTRH Rd,addressing 存儲(chǔ)半字?jǐn)?shù)據(jù)存儲(chǔ)半字?jǐn)?shù)據(jù)addressing addressing RdRd,addressingaddressing索引索引STRcondHSTRcondHARM存儲(chǔ)器訪問(wèn)指令單寄存器存儲(chǔ) LDR/STRLDR/STR指令用于對(duì)指令用于對(duì)內(nèi)存變量的訪問(wèn)、內(nèi)存緩沖區(qū)數(shù)據(jù)的訪問(wèn)、查表、內(nèi)存
30、變量的訪問(wèn)、內(nèi)存緩沖區(qū)數(shù)據(jù)的訪問(wèn)、查表、外圍部件的控制操外圍部件的控制操作等。若使用作等。若使用LDRLDR指令加載數(shù)據(jù)到指令加載數(shù)據(jù)到PCPC寄存器,則實(shí)現(xiàn)程寄存器,則實(shí)現(xiàn)程序跳轉(zhuǎn)功能,這樣也就實(shí)現(xiàn)了程序散轉(zhuǎn)。序跳轉(zhuǎn)功能,這樣也就實(shí)現(xiàn)了程序散轉(zhuǎn)。 所有單寄存器加載所有單寄存器加載/ /存儲(chǔ)指令可分為存儲(chǔ)指令可分為“字和無(wú)符號(hào)字節(jié)加載存儲(chǔ)指令字和無(wú)符號(hào)字節(jié)加載存儲(chǔ)指令”和和“半字和有符號(hào)字節(jié)加載存儲(chǔ)指令。半字和有符號(hào)字節(jié)加載存儲(chǔ)指令。第第30頁(yè)頁(yè)/共共70頁(yè)頁(yè)第29頁(yè)/共70頁(yè)LDRLDR和和STRSTR字和無(wú)符號(hào)字節(jié)加載字和無(wú)符號(hào)字節(jié)加載/ /存儲(chǔ)指令存儲(chǔ)指令 LDRLDR指令用于從內(nèi)存中讀
31、取單一字或字節(jié)數(shù)指令用于從內(nèi)存中讀取單一字或字節(jié)數(shù)據(jù)存入寄存器中,據(jù)存入寄存器中,STRSTR指令用于將寄存器中的單一指令用于將寄存器中的單一字或字節(jié)數(shù)據(jù)保存到內(nèi)存。指令格式如下:字或字節(jié)數(shù)據(jù)保存到內(nèi)存。指令格式如下:ARM存儲(chǔ)器訪問(wèn)指令單寄存器存儲(chǔ) LDRcondTRd, ;將指定地址上的將指定地址上的字?jǐn)?shù)據(jù)字?jǐn)?shù)據(jù)讀入讀入Rd STRcondTRd, ;將將Rd中的字?jǐn)?shù)據(jù)存入指定地址中的字?jǐn)?shù)據(jù)存入指定地址 LDRcondBTRd, ;將指定地址上的將指定地址上的字節(jié)數(shù)據(jù)字節(jié)數(shù)據(jù)讀入讀入Rd STRcondBTRd, ;將將Rd中的字節(jié)數(shù)據(jù)存入指定地址中的字節(jié)數(shù)據(jù)存入指定地址 其中,其中,T
32、T為可選后綴。若指令有為可選后綴。若指令有T T,那么即使處,那么即使處理器是在特權(quán)模式下,存儲(chǔ)系統(tǒng)也將訪問(wèn)看成是在理器是在特權(quán)模式下,存儲(chǔ)系統(tǒng)也將訪問(wèn)看成是在用戶模式下進(jìn)行的。用戶模式下進(jìn)行的。T T在用戶模式下無(wú)效,不能與在用戶模式下無(wú)效,不能與前索引偏移一起使用前索引偏移一起使用T T。 第第31頁(yè)頁(yè)/共共70頁(yè)頁(yè)第30頁(yè)/共70頁(yè)ARM存儲(chǔ)器訪問(wèn)指令單寄存器存儲(chǔ)LDRLDR和和STRSTR字和無(wú)符號(hào)字節(jié)加載字和無(wú)符號(hào)字節(jié)加載/ /存儲(chǔ)指令存儲(chǔ)指令 LDR/STRLDR/STR指令尋址非常靈活,它由兩部分組成,其中一部分為一個(gè)指令尋址非常靈活,它由兩部分組成,其中一部分為一個(gè)基址寄存器,
33、可以為任一個(gè)通用寄存器;另一部分為一個(gè)地址偏移量。基址寄存器,可以為任一個(gè)通用寄存器;另一部分為一個(gè)地址偏移量。地址偏移量有以下地址偏移量有以下3 3種格式:種格式: 立即數(shù)立即數(shù)。立即數(shù)可以是一個(gè)無(wú)符號(hào)的數(shù)值。這個(gè)數(shù)據(jù)可以加到基址寄存。立即數(shù)可以是一個(gè)無(wú)符號(hào)的數(shù)值。這個(gè)數(shù)據(jù)可以加到基址寄存器,也可以從基址寄存器中減去這個(gè)數(shù)值。器,也可以從基址寄存器中減去這個(gè)數(shù)值。 如:如:LDR R1,R0,#0 x12 ;R1-R0+0 x12寄存器寄存器。寄存器中的數(shù)值可以加到基址寄存器,也可以從基址寄存器中。寄存器中的數(shù)值可以加到基址寄存器,也可以從基址寄存器中減去這個(gè)數(shù)值。減去這個(gè)數(shù)值。 如:如:L
34、DR R1,R0,R2 ; R1-R0+R2 LDR R1,R0,-R2 ; R1-R0-R2寄存器及移位常數(shù)寄存器及移位常數(shù)。寄存器移位后的值可以加到基址寄存器,也可以從。寄存器移位后的值可以加到基址寄存器,也可以從基址寄存器中減去這個(gè)數(shù)值?;芳拇嫫髦袦p去這個(gè)數(shù)值。 如:如:LDR R1,R0,R2,LSL #2 ;R1-R0+R2*4 第第32頁(yè)頁(yè)/共共70頁(yè)頁(yè)第31頁(yè)/共70頁(yè)LDRLDR和和STRSTR半字和有符號(hào)字節(jié)加載半字和有符號(hào)字節(jié)加載/ /存儲(chǔ)指令存儲(chǔ)指令 這類這類LDR/STRLDR/STR指令可加載有符號(hào)半字或字節(jié),指令可加載有符號(hào)半字或字節(jié),可加載可加載/ /存儲(chǔ)無(wú)符號(hào)
35、半字。偏移量格式、尋址方式與存儲(chǔ)無(wú)符號(hào)半字。偏移量格式、尋址方式與加載加載/ /存儲(chǔ)字和無(wú)符號(hào)字節(jié)指令相同。存儲(chǔ)字和無(wú)符號(hào)字節(jié)指令相同。 ARM存儲(chǔ)器訪問(wèn)指令單寄存器存儲(chǔ) LDRcondSB Rd,;將指定地址上的將指定地址上的有符號(hào)字節(jié)有符號(hào)字節(jié)讀入讀入Rd LDRcondSH Rd,;將指定地址上的將指定地址上的有符號(hào)半字有符號(hào)半字讀入讀入Rd LDRcondH Rd,;將指定地址上的將指定地址上的半字?jǐn)?shù)據(jù)半字?jǐn)?shù)據(jù)讀入讀入Rd STRcondH Rd,;將將Rd中的中的半字?jǐn)?shù)據(jù)存入半字?jǐn)?shù)據(jù)存入指定地址指定地址注意注意:1. 1.有符號(hào)位半字有符號(hào)位半字/ /字節(jié)加載是指用符號(hào)位加載擴(kuò)展到字
36、節(jié)加載是指用符號(hào)位加載擴(kuò)展到3232位,無(wú)符號(hào)半字加載是位,無(wú)符號(hào)半字加載是指用零擴(kuò)展到指用零擴(kuò)展到3232位;位;2.2.半字讀寫(xiě)的指定地址必須為半字讀寫(xiě)的指定地址必須為偶數(shù)偶數(shù),否則將產(chǎn)生不可靠的結(jié)果;,否則將產(chǎn)生不可靠的結(jié)果;第第33頁(yè)頁(yè)/共共70頁(yè)頁(yè)第32頁(yè)/共70頁(yè)LDRLDR和和STRSTR指令應(yīng)用示例:指令應(yīng)用示例:1. 1.加載加載/ /存儲(chǔ)字和無(wú)符號(hào)字節(jié)指令存儲(chǔ)字和無(wú)符號(hào)字節(jié)指令LDRR2,R5;將將R5指向地址的字?jǐn)?shù)據(jù)存入指向地址的字?jǐn)?shù)據(jù)存入R2STRR1,R0,#0 x04 ;將將R1的數(shù)據(jù)存儲(chǔ)到的數(shù)據(jù)存儲(chǔ)到R0+0 x04地址地址LDRBR3,R2,#-1 ;將將R2指
37、向地址的字節(jié)數(shù)據(jù)存入指向地址的字節(jié)數(shù)據(jù)存入R3,R2R21STRBR0,R3,-R8 ASR 2 ;R0-R3-R8/4,存儲(chǔ)存儲(chǔ)R0的最低有效字節(jié)的最低有效字節(jié)2.2.加載加載/ /存儲(chǔ)半字和有符號(hào)字節(jié)指令存儲(chǔ)半字和有符號(hào)字節(jié)指令LDRSB R1,R0,R3;將將R0+R3地址上的字節(jié)數(shù)據(jù)存入地址上的字節(jié)數(shù)據(jù)存入R1,;高高24位用符號(hào)擴(kuò)展位用符號(hào)擴(kuò)展LDRH R6,R2,#2;將將R2指向地址的半字?jǐn)?shù)據(jù)存入指向地址的半字?jǐn)?shù)據(jù)存入R6,高,高16位用位用0擴(kuò)展擴(kuò)展;讀出后,讀出后,R2=R2+2STRH R1,R0,#2!;將將R1的半字?jǐn)?shù)據(jù)保存到的半字?jǐn)?shù)據(jù)保存到R0+2地址,地址,;只修改
38、低只修改低2字節(jié)數(shù)據(jù),然后字節(jié)數(shù)據(jù),然后R0=R0+2ARM存儲(chǔ)器訪問(wèn)指令單寄存器存儲(chǔ)第第34頁(yè)頁(yè)/共共70頁(yè)頁(yè)第33頁(yè)/共70頁(yè) (3 3)LDRLDR和STRSTR ARM存儲(chǔ)器訪問(wèn)指令單寄存器存儲(chǔ)第第35頁(yè)頁(yè)/共共70頁(yè)頁(yè)第34頁(yè)/共70頁(yè)助記符助記符說(shuō)明說(shuō)明操作操作條件碼位置條件碼位置LDMmode Rn!,reglist 多寄存器加載多寄存器加載reglistreglistRn.Rn.,RnRn回寫(xiě)等回寫(xiě)等LDMcondLDMcondmodemodeSTMmode Rn!,reglist 多寄存器存儲(chǔ)多寄存器存儲(chǔ)Rn.reglist,RnRn.reglist,Rn回回寫(xiě)等寫(xiě)等STMc
39、ondSTMcondmodemode ARM存儲(chǔ)器訪問(wèn)指令多寄存器存取第第36頁(yè)頁(yè)/共共70頁(yè)頁(yè)第35頁(yè)/共70頁(yè)ARM存儲(chǔ)器訪問(wèn)指令多寄存器存取 多寄存器加載多寄存器加載/ /存儲(chǔ)指令格式如下:存儲(chǔ)指令格式如下: LDMcond Rn!,reglist STMcond Rn!,reglistcondcond:指令執(zhí)行的條件;:指令執(zhí)行的條件;模式模式:控制地址的增長(zhǎng)方式,一共有:控制地址的增長(zhǎng)方式,一共有8 8種模式;種模式;! !:表示在操作結(jié)束后,將最后的地址寫(xiě)回:表示在操作結(jié)束后,將最后的地址寫(xiě)回RnRn中;中;reglistreglist :表示寄存器列表,可以包含多個(gè)寄存器,它們使
40、用:表示寄存器列表,可以包含多個(gè)寄存器,它們使用“, ,”隔開(kāi),如隔開(kāi),如R1,R2,R6-R9R1,R2,R6-R9,寄存器由小到大排列;,寄存器由小到大排列;:可選后綴。允許在用戶模式或系統(tǒng)模式下使用。它有以下兩個(gè)功能:可選后綴。允許在用戶模式或系統(tǒng)模式下使用。它有以下兩個(gè)功能:1 1)若)若opop是是LDMLDM且寄存器列表包含且寄存器列表包含R15R15時(shí),那么除了正常的多寄存器傳送外,時(shí),那么除了正常的多寄存器傳送外,還將還將SPSRSPSR也復(fù)制到也復(fù)制到CPSRCPSR中。這用于異常處理返回,僅在異常模式下使用。中。這用于異常處理返回,僅在異常模式下使用。2 2)如寄存器列表包
41、含)如寄存器列表包含R15R15時(shí),數(shù)據(jù)傳入或傳出的是用戶模式下的寄存器,而時(shí),數(shù)據(jù)傳入或傳出的是用戶模式下的寄存器,而不是當(dāng)前模式的寄存器。不是當(dāng)前模式的寄存器。第第37頁(yè)頁(yè)/共共70頁(yè)頁(yè)第36頁(yè)/共70頁(yè)ARM存儲(chǔ)器訪問(wèn)指令多寄存器存取LDMLDM和和STMSTM多寄存器加載多寄存器加載/ /存儲(chǔ)指令編碼存儲(chǔ)指令編碼指令執(zhí)行的條件碼指令執(zhí)行的條件碼S S 對(duì) 應(yīng) 于 指 令 中對(duì) 應(yīng) 于 指 令 中的的”符號(hào)符號(hào)P P表示前表示前/ /后變址后變址U U表示加表示加/ /減減WW表示回寫(xiě)表示回寫(xiě)寄存器列表寄存器列表RnRn為基址寄存器為基址寄存器L L用于區(qū)別加載(用于區(qū)別加載(L L為為
42、1 1)或存儲(chǔ)(或存儲(chǔ)(L L為為0 0)第第38頁(yè)頁(yè)/共共70頁(yè)頁(yè)第37頁(yè)/共70頁(yè)ARM存儲(chǔ)器訪問(wèn)指令多寄存器存取 多寄存器加載多寄存器加載/ /存儲(chǔ)指令的存儲(chǔ)指令的8 8種模式如下表所示,右邊四種為堆棧種模式如下表所示,右邊四種為堆棧操作、左邊四種為數(shù)據(jù)傳送操作。操作、左邊四種為數(shù)據(jù)傳送操作。模式模式說(shuō)明說(shuō)明模式模式說(shuō)明說(shuō)明IA每次傳送后地址加每次傳送后地址加4FD滿遞減堆棧滿遞減堆棧IB每次傳送前地址加每次傳送前地址加4ED空遞減堆??者f減堆棧DA每次傳送后地址減每次傳送后地址減4FA滿遞增堆棧滿遞增堆棧DB每次傳送前地址減每次傳送前地址減4EA空遞增堆??者f增堆棧數(shù)據(jù)塊傳送操作數(shù)據(jù)塊
43、傳送操作堆棧操作堆棧操作 進(jìn)行數(shù)據(jù)復(fù)制時(shí),進(jìn)行數(shù)據(jù)復(fù)制時(shí),先設(shè)置好源數(shù)據(jù)指針和目標(biāo)指針,然后使用塊先設(shè)置好源數(shù)據(jù)指針和目標(biāo)指針,然后使用塊拷貝尋址指令拷貝尋址指令LDMIA/STMIALDMIA/STMIA、LDMIB/STMIBLDMIB/STMIB、LDMDA/STMDALDMDA/STMDA、LDMDB/STMDBLDMDB/STMDB進(jìn)行讀取和存儲(chǔ)進(jìn)行讀取和存儲(chǔ) 。 進(jìn)行堆棧操作操作時(shí),進(jìn)行堆棧操作操作時(shí),要先設(shè)置堆棧指針(要先設(shè)置堆棧指針(SPSP),然后使用堆棧),然后使用堆棧尋址指令尋址指令STMFD/LDMFD STMFD/LDMFD 、STMED/LDMEDSTMED/LDM
44、ED、STMFA/LDMFASTMFA/LDMFA和和STMEA/LDMEASTMEA/LDMEA實(shí)現(xiàn)堆棧操作。實(shí)現(xiàn)堆棧操作。第第39頁(yè)頁(yè)/共共70頁(yè)頁(yè)第38頁(yè)/共70頁(yè)ARM存儲(chǔ)器訪問(wèn)指令多寄存器存取數(shù)據(jù)塊傳送指數(shù)據(jù)塊傳送指令令操作過(guò)程如操作過(guò)程如右圖所示,其右圖所示,其中中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頁(yè)頁(yè)/共共70頁(yè)頁(yè)第39頁(yè)/共70頁(yè)ARM存儲(chǔ)器訪問(wèn)指令多寄存器存取數(shù)據(jù)塊傳送數(shù)據(jù)塊傳送存儲(chǔ)存儲(chǔ)堆棧操作堆棧操作壓棧壓棧說(shuō)明說(shuō)明數(shù)據(jù)塊傳送數(shù)據(jù)塊傳送加載加載堆棧操作堆棧操作出棧出棧說(shuō)明說(shuō)明STMDASTMED空遞減空遞減LDMDALDMFA滿遞減滿遞減STMIASTMEA空遞增空遞增LDMIALDMF
46、D滿遞增滿遞增STMDBSTMFD滿遞減滿遞減LDMDBLDMEA空遞減空遞減STMIBSTMFA滿遞增滿遞增LDMIBLDMED空遞增空遞增;使用數(shù)據(jù)塊傳送指令進(jìn)行堆棧操作使用數(shù)據(jù)塊傳送指令進(jìn)行堆棧操作STMDAR0!,R5-R6. . .LDMIBR0!,R5-R6;使用堆棧指令進(jìn)行堆棧操作使用堆棧指令進(jìn)行堆棧操作STMEDR13!,R5-R6. . .LDMEDR13!,R5-R6 兩段代碼的執(zhí)行結(jié)果是一樣的,但是使用堆棧指令的壓棧和出棧兩段代碼的執(zhí)行結(jié)果是一樣的,但是使用堆棧指令的壓棧和出棧操作編程很簡(jiǎn)單(只要前后一致即可),而使用數(shù)據(jù)塊指令進(jìn)行壓棧操作編程很簡(jiǎn)單(只要前后一致即可),
47、而使用數(shù)據(jù)塊指令進(jìn)行壓棧和出棧操作則需要考慮空與滿、加與減對(duì)應(yīng)的問(wèn)題。和出棧操作則需要考慮空與滿、加與減對(duì)應(yīng)的問(wèn)題。 堆棧操作(詳見(jiàn)堆棧操作(詳見(jiàn)“4.1 4.1 尋址方式堆棧尋址尋址方式堆棧尋址”)和數(shù)據(jù)塊傳送指令)和數(shù)據(jù)塊傳送指令類似,也有類似,也有4 4種模式,它們之間的關(guān)系如下表所示:種模式,它們之間的關(guān)系如下表所示:第第41頁(yè)頁(yè)/共共70頁(yè)頁(yè)第40頁(yè)/共70頁(yè)助記符助記符說(shuō)明說(shuō)明操作操作條件碼位置條件碼位置SWP Rd,Rm,Rn 寄存器和存儲(chǔ)器字?jǐn)?shù)寄存器和存儲(chǔ)器字?jǐn)?shù)據(jù)交換據(jù)交換RdRdRnRn,RnRnRm Rm (Rn(RnRdRd或或Rm)Rm)SWPcondSWPcondSW
48、PB Rd,Rm,Rn 寄存器和存儲(chǔ)器字節(jié)寄存器和存儲(chǔ)器字節(jié)數(shù)據(jù)交換數(shù)據(jù)交換RdRdRnRn,RnRnRm Rm (Rn(RnRdRd或或Rm)Rm)SWPcondBSWPcondBARM存儲(chǔ)器訪問(wèn)指令寄存器和存儲(chǔ)器交換指令 SWP SWP指令用于將一個(gè)內(nèi)存單元指令用于將一個(gè)內(nèi)存單元( (該單元地址放在寄存器該單元地址放在寄存器RnRn中中) )的的內(nèi)容讀取到一個(gè)寄存器內(nèi)容讀取到一個(gè)寄存器RdRd中,同時(shí)將另一個(gè)寄存器中,同時(shí)將另一個(gè)寄存器RmRm的內(nèi)容寫(xiě)入的內(nèi)容寫(xiě)入到該內(nèi)存單元中。使用到該內(nèi)存單元中。使用SWPSWP可實(shí)現(xiàn)信號(hào)量操作??蓪?shí)現(xiàn)信號(hào)量操作。 指令格式如下:指令格式如下:SWPco
49、ndB Rd,Rm,Rn 其中,其中,B B為可選后綴,若有為可選后綴,若有B B,則交換字節(jié),否則交換,則交換字節(jié),否則交換3232位字;位字;RdRd用于保存從存儲(chǔ)器中讀入的數(shù)據(jù);用于保存從存儲(chǔ)器中讀入的數(shù)據(jù);RmRm的數(shù)據(jù)用于存儲(chǔ)到存儲(chǔ)器的數(shù)據(jù)用于存儲(chǔ)到存儲(chǔ)器中,若中,若RmRm與與RdRd相同,則為寄存器與存儲(chǔ)器內(nèi)容進(jìn)行互換;相同,則為寄存器與存儲(chǔ)器內(nèi)容進(jìn)行互換;RnRn為要為要進(jìn)行數(shù)據(jù)交換的存儲(chǔ)器地址,進(jìn)行數(shù)據(jù)交換的存儲(chǔ)器地址,RnRn不能與不能與RdRd和和RmRm相同。相同。 第第42頁(yè)頁(yè)/共共70頁(yè)頁(yè)第41頁(yè)/共70頁(yè)1 ARM指令集介紹ARMARM指令集指令集ARMARM數(shù)據(jù)
50、處理指令數(shù)據(jù)處理指令 數(shù)據(jù)處理指令大致可分為數(shù)據(jù)處理指令大致可分為3 3類:類: 數(shù)據(jù)傳送指令;數(shù)據(jù)傳送指令;算術(shù)邏輯運(yùn)算指令;算術(shù)邏輯運(yùn)算指令;比較指令。比較指令。 數(shù)據(jù)處理指令數(shù)據(jù)處理指令只能對(duì)寄存器只能對(duì)寄存器的內(nèi)容進(jìn)行的內(nèi)容進(jìn)行操作,而不能對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行操作。所操作,而不能對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行操作。所有有ARMARM數(shù)據(jù)處理指令均可選擇使用數(shù)據(jù)處理指令均可選擇使用S S后綴,以后綴,以使指令影響狀態(tài)標(biāo)志。使指令影響狀態(tài)標(biāo)志。 第第43頁(yè)頁(yè)/共共70頁(yè)頁(yè)第42頁(yè)/共70頁(yè)ARM數(shù)據(jù)處理指令指令編碼帶進(jìn)位加法ADC0101帶進(jìn)位減法指令SBC0110帶進(jìn)位逆向減法指令RSC0111位測(cè)試
51、指令TST1000相等測(cè)試指令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說(shuō)明指令助記符操作碼opcode操作碼功能表第第44頁(yè)頁(yè)/共共70頁(yè)頁(yè)第43頁(yè)/共70頁(yè)助記符助記符說(shuō)明說(shuō)明操作操作條件碼位置條件碼位置MOV Rd,operand2 Rd,operand2數(shù)據(jù)傳送數(shù)據(jù)傳送RdRdoperand2 operand2 MOVcondSMOVc
52、ondSMVN Rd,operand2 Rd,operand2數(shù)據(jù)非傳送數(shù)據(jù)非傳送RdRd(operand2)(operand2)MVNcondSMVNcondSARM數(shù)據(jù)處理指令數(shù)據(jù)傳送注:當(dāng)后綴注:當(dāng)后綴S S時(shí),這些指令根據(jù)結(jié)果更新標(biāo)時(shí),這些指令根據(jù)結(jié)果更新標(biāo)志志N N和和Z Z,在計(jì)算,在計(jì)算Operand2Operand2時(shí)更新標(biāo)志時(shí)更新標(biāo)志C C,不,不影響標(biāo)志影響標(biāo)志V V。第第45頁(yè)頁(yè)/共共70頁(yè)頁(yè)第44頁(yè)/共70頁(yè)助記符說(shuō)明操作條件碼位置MOV Rd,operand2MOV Rd,operand2數(shù)據(jù)傳送數(shù)據(jù)傳送RdRdoperand2 operand2 MOVcondSMO
53、VcondSMVN Rd,operand2MVN Rd,operand2數(shù)據(jù)非傳送數(shù)據(jù)非傳送RdRd(operand2)(operand2)MVNcondSMVNcondSARM數(shù)據(jù)處理指令數(shù)據(jù)傳送 MVNMVN指令將指令將8 8位立即數(shù)或寄存器(位立即數(shù)或寄存器(operand2operand2)按位按位取反取反后傳送到目標(biāo)寄存器(后傳送到目標(biāo)寄存器(RdRd),因?yàn)槠渚哂腥》垂δ埽?,因?yàn)槠渚哂腥》垂δ埽钥梢匝b載范圍更廣的立即數(shù)。指令格式如下:所以可以裝載范圍更廣的立即數(shù)。指令格式如下: MVNcondS Rd,operand2 MVNMVN指令舉例如下:指令舉例如下: MVNR1,#
54、0 xFF;R1=0 xFFFFFF00R1=0 xFFFFFF00 MVNR1,R2 ;將將R2R2按位取反,結(jié)果存到按位取反,結(jié)果存到R1R1第第46頁(yè)頁(yè)/共共70頁(yè)頁(yè)第45頁(yè)/共70頁(yè)助記符助記符說(shuō)明說(shuō)明操作操作條件碼位置條件碼位置ADD Rd, Rn, operand2ADD Rd, Rn, operand2加法運(yùn)算指令加法運(yùn)算指令RdRdRn+operand2Rn+operand2ADDcondSADDcondSSUB Rd, Rn, operand2SUB Rd, Rn, operand2減法運(yùn)算指令減法運(yùn)算指令RdRdRn-operand2Rn-operand2SUBcondSS
55、UBcondSRSB Rd, Rn, operand2RSB Rd, Rn, operand2逆向減法指令逆向減法指令RdRdoperand2-Rnoperand2-RnRSBcondSRSBcondSADC Rd, Rn, operand2ADC Rd, Rn, operand2帶進(jìn)位加法帶進(jìn)位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSADCcondSSBC Rd, Rn, operand2SBC Rd, Rn, operand2帶進(jìn)位減法指帶進(jìn)位減法指令令RdRdRn-operand2-Rn-operand2-(NOT)Carry(NO
56、T)CarrySBCcondSSBCcondSRSC Rd, Rn, operand2RSC Rd, Rn, operand2帶進(jìn)位逆向減帶進(jìn)位逆向減法指令法指令RdRdoperand2-Rn-operand2-Rn-(NOT)Carry(NOT)CarryRSCcondSRSCcondSARM數(shù)據(jù)處理指令算術(shù)運(yùn)算 加法運(yùn)算指令加法運(yùn)算指令A(yù)DDADD指令將指令將operand2operand2的值與的值與RnRn的值相加,的值相加,結(jié)果保存到結(jié)果保存到RdRd寄存器。指令格式如下:寄存器。指令格式如下: ADDcondS Rd,Rn,operand2 應(yīng)用示例:應(yīng)用示例: ADDS R1,R
57、1,#1020; R1=R1+1020; R1=R1+1020,并影響標(biāo)志位,并影響標(biāo)志位 ADD R1,R1,R2,LSL #2;R1=R1+R22;R1=R1+R22 第第47頁(yè)頁(yè)/共共70頁(yè)頁(yè)第46頁(yè)/共70頁(yè)助記符助記符說(shuō)明說(shuō)明操作操作條件碼位置條件碼位置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數(shù)據(jù)處理指令邏輯運(yùn)算指令第第48頁(yè)頁(yè)/共共70頁(yè)頁(yè)第47頁(yè)/共70頁(yè)助記符助記符說(shuō)明
59、說(shuō)明操作操作條件碼位置條件碼位置CMP Rn, operand2CMP Rn, operand2比較指令比較指令標(biāo) 志標(biāo) 志 N N 、 Z Z 、 C C 、V VRn-operand2Rn-operand2CMPcondCMPcondCMN Rn, operand2CMN Rn, operand2負(fù)數(shù)比較指令負(fù)數(shù)比較指令標(biāo) 志標(biāo) 志 N N 、 Z Z 、 C C 、V VRn+operand2Rn+operand2CMNcondCMNcondTST Rn, operand2TST Rn, operand2位測(cè)試指令位測(cè)試指令標(biāo)志標(biāo)志N N、Z Z、C C、V VRn Rn & opera
60、nd2& operand2TSTcondTSTcondTEQ Rn, operand2TEQ Rn, operand2相等測(cè)試指令相等測(cè)試指令標(biāo)志標(biāo)志N N、Z Z、C C、V VRn Rn operand2 operand2TEQcondTEQcondARM數(shù)據(jù)處理指令比較指令注:這些指令影響注:這些指令影響N,Z,C和和V標(biāo)志位。標(biāo)志位。第第49頁(yè)頁(yè)/共共70頁(yè)頁(yè)第48頁(yè)/共70頁(yè)助記符助記符說(shuō)明說(shuō)明操作操作條件碼位置條件碼位置MUL Rd,Rm,RsMUL Rd,Rm,Rs3232位乘法指位乘法指令令RdRdRmRm* *Rs Rs (Rd(RdRm)Rm)MULcondSMULcond
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 贛南科技學(xué)院《計(jì)算機(jī)網(wǎng)絡(luò)安全》2023-2024學(xué)年第一學(xué)期期末試卷
- 2022年三年級(jí)下冊(cè)小學(xué)生期末評(píng)語(yǔ)(17篇)
- 七年級(jí)語(yǔ)文上冊(cè)第四單元寫(xiě)作思路要清晰新人教版
- 三年級(jí)數(shù)學(xué)上冊(cè)一混合運(yùn)算過(guò)河說(shuō)課稿北師大版
- 三年級(jí)科學(xué)下冊(cè)第一單元植物的生長(zhǎng)變化第3課我們先看到了根教學(xué)材料教科版
- 小學(xué)生宿舍內(nèi)務(wù)管理制度
- 死因制度培訓(xùn)課件
- 2021年衛(wèi)生招聘(公共衛(wèi)生管理)考試題庫(kù)(帶答案)
- 醫(yī)生輸血培訓(xùn)課件
- 同軸電纜接頭制作(最終版)
- 重慶市渝中區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期末考試數(shù)學(xué)試題含答案及解析
- 水族館改造合同
- 湖南省益陽(yáng)市2022-2023學(xué)年高三上學(xué)期數(shù)學(xué)期末試卷
- 【MOOC】教學(xué)研究的數(shù)據(jù)處理與工具應(yīng)用-愛(ài)課程 中國(guó)大學(xué)慕課MOOC答案
- 《小學(xué)科學(xué)實(shí)驗(yàn)創(chuàng)新》課件
- 拌合站安全事故案例
- 2024年手術(shù)室護(hù)士年度工作計(jì)劃(4篇)
- 《紅色家書(shū)》讀書(shū)分享會(huì)主題班會(huì)課件
- 2025年廣東省春季高考數(shù)學(xué)仿真模擬試卷試題(含答案解析+答題卡)
- 新媒體運(yùn)營(yíng)工作年終總結(jié)
- 財(cái)務(wù)管理基礎(chǔ)規(guī)范操作手冊(cè)
評(píng)論
0/150
提交評(píng)論