版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、ARM指令系統(tǒng)自學(xué)指導(dǎo) ARM的指令比較精簡,只有裝載、存儲(chǔ)和交換指令可以對(duì)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行訪問。找出能訪問存儲(chǔ)器的這些指令。 找出ARM指令格式的特點(diǎn),了解桶形移位器的作用。 如:ADDR1,R1,R1,LSL #3 ARM匯編程序的結(jié)構(gòu)是怎樣的? 結(jié)合硬件知識(shí),分析一段典型的啟動(dòng)代碼。(LPC2129的Startup.S,課堂分析P147-297,uVision3中)示例代碼分析 L156-164的指令有什么作用? L253的指令有什么特殊的地方? L295-297的指令有什么作用? 簡介 ARM處理器是基于精簡指令集計(jì)算機(jī)(RISC)原理設(shè)計(jì)的,指令集和相關(guān)譯碼機(jī)制較為簡單。ARM7T
2、DMI(-S)具有32位ARM指令集和16位Thumb指令集,ARM指令集效率高,但是代碼密度低;而Thumb指令集具有較高的代碼密度,卻仍然保持ARM的大多數(shù)性能上的優(yōu)勢,它是ARM指令集的子集。所有的ARM指令都是可以有條件執(zhí)行的,而Thumb指令僅有一條指令具備條件執(zhí)行功能。ARM程序和Thumb程序可相互調(diào)用,相互之間的狀態(tài)切換開銷幾乎為零。 2.4 ARM指令系統(tǒng)2.4 ARM7TDMI(-S)指令系統(tǒng) ARM指令集與Thumb指令集的關(guān)系Thumb指令集具有靈活、小巧的特點(diǎn)ARM指令集支持ARM核所有的特性,具有高效、快速的特點(diǎn)2.4.2 ARM處理器尋址方式 尋址方式分類 尋址方
3、式是根據(jù)指令中給出的地址碼字段來實(shí)現(xiàn)尋找真實(shí)操作數(shù)地址的方式。ARM處理器具有9種基本尋址方式。1.寄存器尋址;2.立即尋址;3.寄存器移位尋址;4.寄存器間接尋址;5.基址尋址;6.多寄存器尋址;7.堆棧尋址;8.塊拷貝尋址;9.相對(duì)尋址。 操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號(hào),指令執(zhí)行時(shí)直接取出寄存器值來操作。寄存器尋址指令舉例如下: MOV R1,R2 ;將R2的值存入R1 SUB R0,R1,R2 ;將R1的值減去R2的值,結(jié)果保存到R0 0 xAA0 x55R2R1 尋址方式分類寄存器尋址MOV R1,R20 xAA2.4.2 ARM處理器尋址方式 立即尋址指令
4、中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立即使用的操作數(shù)(這樣的數(shù)稱為立即數(shù))。立即尋址指令舉例如下: SUBSR0,R0,#1 ;R0減1,結(jié)果放入R0,并且影響標(biāo)志位MOVR0,#0 xFF000 ;將立即數(shù)0 xFF000裝入R0寄存器 0 x55R0MOV R0,#0 xFF00程序存儲(chǔ) 尋址方式分類立即尋址MOV R0,#0 xFF000 xFF00從代碼中獲得數(shù)據(jù)2.4.2 ARM處理器尋址方式 寄存器移位尋址是ARM指令集特有的尋址方式。當(dāng)?shù)?個(gè)操作數(shù)是寄存器移位方式時(shí),第2個(gè)寄存器操作數(shù)在與第1個(gè)操作數(shù)結(jié)合之前,選擇進(jìn)
5、行移位操作。寄存器移位尋址指令舉例如下:MOVR0,R2,LSL #3 ;R2的值左移3位,結(jié)果放入R0, ;即是R0=R28 ANDSR1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相 ;“與”操作,結(jié)果放入R10 x55R0R20 x01 尋址方式分類寄存器移位尋址MOV R0,R2,LSL #30 x080 x08邏輯左移3位2.4.2 ARM處理器尋址方式 寄存器間接尋址指令中的地址碼給出的是一個(gè)通用寄存器的編號(hào),所需的操作數(shù)保存在寄存器指定地址的存儲(chǔ)單元中,即寄存器為操作數(shù)的地址指針。寄存器間接尋址指令舉例如下: LDRR1,R2;將R2指向的存儲(chǔ)單元的數(shù)據(jù)讀出;保存
6、在R1中 SWPR1,R1,R2;將寄存器R1的值和R2指定的存儲(chǔ);單元的內(nèi)容交換 0 x55R0R2 0 x400000000 xAA0 x40000000 尋址方式分類寄存器間接尋址LDR R0,R20 xAA2.4.2 ARM處理器尋址方式 基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量(4K)相加/減,形成操作數(shù)的有效地址?;穼ぶ酚糜谠L問基址附近的存儲(chǔ)單元,常用于查表、數(shù)組操作、功能部件寄存器訪問等。寄存器間接尋址是偏移量為0的基址加偏移尋址。基址尋址指令舉例如下(前索引尋址): LDRR2,R3,#0 x0C ;讀取R3+0 x0C地址上的存儲(chǔ)單元 ;的內(nèi)容,放入R2 STRR
7、1,R0,#-4! ;先R0=R0-4,然后把R0的值寄存 ;到保存到R1指定的存儲(chǔ)單元 尋址方式分類基址尋址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA將R3+0 x0C作為地址裝載數(shù)據(jù)2.4.2 ARM處理器尋址方式 基址尋址指令舉例如下: LDRR0,R1 ,#4 ;R0=R1,R1R14 ;后索引基址尋址 ;ARM這種自動(dòng)索引機(jī)制不消耗額外的時(shí)間LDR R0,R1,R2 ;R0=R1+R2 尋址方式分類基址尋址2.4.2 ARM處理器尋址方式 多寄存器尋址一次可傳送幾個(gè)寄存器值,允許一條指令傳送16個(gè)寄存器的任何子
8、集或所有寄存器。多寄存器尋址指令舉例如下: LDMIAR1!,R2-R7,R12 ;將R1指向的單元中的數(shù)據(jù)讀出到 ;R2R7、R12中(R1自動(dòng)加4) STMIAR0!,R2-R7,R12 ;將寄存器R2R7、R12的值保 ;存到R0指向的存儲(chǔ); 單元中 ;(R0自動(dòng)加4)0 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存儲(chǔ)器 尋址方式分類多寄存器尋址LDR R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000
9、0102.4.2 ARM處理器尋址方式 堆棧是一個(gè)按特定順序進(jìn)行存取的存儲(chǔ)區(qū),操作順序?yàn)椤昂筮M(jìn)先出” 。堆棧尋址是隱含的,它使用一個(gè)專門的寄存器(堆棧指針)指向一塊存儲(chǔ)區(qū)域(堆棧),指針?biāo)赶虻拇鎯?chǔ)單元即是堆棧的棧頂。存儲(chǔ)器堆??煞譃閮煞N: 向上生長:向高地址方向生長,稱為遞增堆棧向下生長:向低地址方向生長,稱為遞減堆棧 尋址方式分類堆棧尋址2.4.2 ARM處理器尋址方式 尋址方式分類堆棧尋址棧底棧頂棧區(qū)SP堆棧存儲(chǔ)區(qū)棧頂棧底棧區(qū)SP向下增長向上增長0 x123456780 x12345678堆棧壓棧堆棧壓棧2.4.2 ARM處理器尋址方式棧頂SP棧頂SP棧底空堆棧棧底滿堆棧 堆棧指針指向最
10、后壓入的堆棧的有效數(shù)據(jù)項(xiàng),稱為滿堆棧;堆棧指針指向下一個(gè)待壓入數(shù)據(jù)的空位置,稱為空堆棧。 尋址方式分類堆棧尋址0 x123456780 x12345678棧頂SP0 x12345678棧頂SP壓棧壓棧2.4.2 ARM處理器尋址方式所以可以組合出四種類型的堆棧方式:滿遞增:堆棧向上增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最高地址。指令如LDMFA、STMFA等; 空遞增:堆棧向上增長,堆棧指針指向堆棧上的第一個(gè)空位置。指令如LDMEA、STMEA等; 滿遞減:堆棧向下增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最低地址。指令如LDMFD、STMFD等;空遞減:堆棧向下增長,堆棧指針向堆棧下的第一個(gè)空位置。指令
11、如LDMED、STMED等。 尋址方式分類堆棧尋址2.4.2 ARM處理器尋址方式 多寄存器傳送指令用于將一塊數(shù)據(jù)從存儲(chǔ)器的某一位置拷貝到另一位置。 如:STMIAR0!,R1-R7;將R1R7的數(shù)據(jù)保存到存儲(chǔ)器中。;存儲(chǔ)指針R0在保存第一個(gè)值之后增加,;增長方向?yàn)橄蛏显鲩L。STMIBR0!,R1-R7;將R1R7的數(shù)據(jù)保存到存儲(chǔ)器中。;存儲(chǔ)指針R0在保存第一個(gè)值之前增加,;增長方向?yàn)橄蛏显鲩L。 尋址方式分類塊拷貝尋址2.4.2 ARM處理器尋址方式 相對(duì)尋址是基址尋址的一種變通。由程序計(jì)數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對(duì)尋址指令
12、舉例如下:BLSUBR1;調(diào)用到SUBR1子程序BEQLOOP;條件跳轉(zhuǎn)到LOOP標(biāo)號(hào)處.LOOPMOVR6,#1.SUBR1. 尋址方式分類相對(duì)尋址2.4.2 ARM處理器尋址方式2.4 ARM指令系統(tǒng)q2.4.2 ARM處理器尋址方式q2.4.3 指令集介紹 ARM指令集 Thumb指令集 簡單的ARM程序;文件名:TEST1.S ;功能:實(shí)現(xiàn)兩個(gè)寄存器相加 ;說明:使用ARMulate軟件仿真調(diào)試 AREAExample1,CODE,READONLY ;聲明代碼段Example1 ENTRY ;標(biāo)識(shí)程序入口 CODE32 ;聲明32位ARM指令START MOVR0,#0 ;設(shè)置參數(shù) M
13、OVR1,#10LOOPBLADD_SUB ;調(diào)用子程序ADD_SUB BLOOP ;跳轉(zhuǎn)到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回 END ;文件結(jié)束 使用“;”進(jìn)行注釋標(biāo)號(hào)頂格寫實(shí)際代碼段聲明文件結(jié)束 簡單的ARM程序;文件名:TEST1.S ;功能:實(shí)現(xiàn)兩個(gè)寄存器相加 ;說明:使用ARMulate軟件仿真調(diào)試 AREAExample1,CODE,READONLY ;聲明代碼段Example1 ENTRY ;標(biāo)識(shí)程序入口 CODE32 ;聲明32位ARM指令START MOVR0,#0 ;設(shè)置參數(shù) MOVR1,#10LOO
14、PBLADD_SUB ;調(diào)用子程序ADD_SUB BLOOP ;跳轉(zhuǎn)到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回 END ;文件結(jié)束 ARM指令小節(jié)目錄1.指令格式2.條件碼3.存儲(chǔ)器訪問指令4.數(shù)據(jù)處理指令5.乘法指令6.ARM分支指令7.雜項(xiàng)指令8.偽指令A(yù)RM指令小節(jié)目錄1.指令格式2.條件碼3.存儲(chǔ)器訪問指令4.數(shù)據(jù)處理指令5.乘法指令6.ARM分支指令7.雜項(xiàng)指令8.偽指令2.4.3 指令集介紹n ARM指令集指令格式 ARM是三地址指令格式,指令的基本格式如下: ARM指令集基本指令格式 S , 其中號(hào)內(nèi)的項(xiàng)是必須的
15、,號(hào)內(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)源寄存器2(Rm)ADD r3,r1,r2r3r1r2例:2.4.3 指令集介紹 ARM指令的基本格式如下: ARM指令集第2個(gè)操作數(shù) S , 靈活的使用第2個(gè)操作數(shù)“operand2”能夠提高代碼效率。它有如下的形式:#immed_8r常數(shù)表達(dá)式;Rm寄存器方式;Rm,shift寄存器移位方式;2.4.3 指令集介紹 ARM指令集第2個(gè)操作數(shù)#immed_
16、8r常數(shù)表達(dá)式 該常數(shù)必須對(duì)應(yīng)8位位圖,即一個(gè)8位的常數(shù)通過循環(huán)右移偶數(shù)位得到。循環(huán)右移10位0 x120 0 0 1 0 0 1 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x801 0 0 0 0 0 0 00 x040 0 0 0 0 1 0 08位常數(shù)2.4.3 指令集介紹 ARM指令集第2個(gè)操作數(shù)#immed_8r常數(shù)表達(dá)式 該常數(shù)必須對(duì)應(yīng)8位位圖,即一個(gè)8位的常數(shù)通過循環(huán)右移偶數(shù)位得到。例如:ANDR1,R2,#0 x0F
17、2.4.3 指令集介紹 ARM指令集第2個(gè)操作數(shù)Rm寄存器方式 在寄存器方式下,操作數(shù)即為寄存器的數(shù)值。例如:SUBR1,R1,R22.4.3 指令集介紹 ARM指令集第2個(gè)操作數(shù)Rm,shift寄存器移位方式 將寄存器的移位結(jié)果作為操作數(shù)(移位操作不消耗額外的時(shí)間),但Rm值保持不變,移位方法如下:操作碼說明操作碼說明ASR #n算術(shù)右移n位ROR #n循環(huán)右移n位LSL #n邏輯左移n位RRX帶擴(kuò)展的循環(huán)右移1位LSR #n邏輯右移n位Type RsType為移位的一種類型,Rs為偏移量寄存器,低8位有效。2.4.3 指令集介紹n 桶形移位桶形移位器器ALU桶形移位器Rd結(jié)果N預(yù)處理未預(yù)處
18、理RmRn2.4.3 指令集介紹n 桶形移位器操作桶形移位器操作助記符說明移位操作結(jié)果Y值LSL邏輯左移x LSL yxy#1-32 or RsASR算術(shù)右移x ASR y(signed)xY#1-32 or RsROR算術(shù)左移x ROR y(unsigned)xy|(x32-y)#1-32 or RsRRX擴(kuò)展的循環(huán)右移x RRX y(c flag1)none2.4.3 指令集介紹 ARM指令集第2個(gè)操作數(shù)LSL移位操作:0LSR移位操作:0ASR移位操作:ROR移位操作:RRX移位操作:C2.4.3 指令集介紹 ARM指令集第2個(gè)操作數(shù)Rm,shift寄存器移位方式例如:ADDR1,R1,
19、R1,LSL #3;R1=R1+R1R32.4.3 指令集介紹1.指令格式2.條件碼3.存儲(chǔ)器訪問指令4.數(shù)據(jù)處理指令5.乘法指令6.ARM分支指令7.雜項(xiàng)指令8.偽指令2.4.3 指令集介紹 ARM指令的基本格式如下: ARM指令集條件碼 S , 使用條件碼“cond”可以實(shí)現(xiàn)高效的邏輯操作(節(jié)省跳轉(zhuǎn)和條件語句),提高代碼效率。 所有的ARM指令都可以條件執(zhí)行,而Thumb指令只有B(跳轉(zhuǎn))指令具有條件執(zhí)行 功能。如果指令不標(biāo)明條件代碼,將默認(rèn)為無條件(AL)執(zhí)行。2.4.3 指令集介紹操作碼條件助記符標(biāo)志含義0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1無符號(hào)數(shù)大于
20、或等于0011CC/LOC=0無符號(hào)數(shù)小于0100MIN=1負(fù)數(shù)0101PLN=0正數(shù)或零0110VSV=1溢出0111VCV=0沒有溢出1000HIC=1,Z=0無符號(hào)數(shù)大于1001LSC=0,Z=1無符號(hào)數(shù)小于或等于1010GEN=V有符號(hào)數(shù)大于或等于 1011LTN!=V有符號(hào)數(shù)小于 1100GTZ=0,N=V有符號(hào)數(shù)大于 1101LEZ=1,N!=V有符號(hào)數(shù)小于或等于 1110AL任何無條件執(zhí)行 (指令默認(rèn)條件) 1111NV任何從不執(zhí)行(不要使用) 2.4.3 指令集介紹 ARM指令集條件碼C代碼:If(a b)a+;Elseb+;對(duì)應(yīng)的匯編代碼:CMPR0,R1 ;R0(a)與R1
21、(b)比較ADDHI R0,R0,#1 ;若R0R1,則R0=R0+1ADDLS R1,R1,#1 ;若R01,則R1=R1+1示例:2.4.3 指令集介紹ARM指令目錄1.指令格式2.條件碼3.存儲(chǔ)器訪問指令4.數(shù)據(jù)處理指令5.乘法指令6.ARM分支指令7.雜項(xiàng)指令8.偽指令 ARM指令集存儲(chǔ)器訪問指令 ARM處理器是典型的RISC處理器,對(duì)存儲(chǔ)器的訪問只能使用加載和存儲(chǔ)指令實(shí)現(xiàn)。ARM7處理器是馮諾依曼存儲(chǔ)結(jié)構(gòu),RAM存儲(chǔ)空間及I/O映射空間統(tǒng)一編址,除對(duì)RAM操作以外,對(duì)外圍IO、程序數(shù)據(jù)的訪問均要通過加載/存儲(chǔ)指令進(jìn)行。 存儲(chǔ)器訪問指令分為單寄存器操作指令和多寄存器操作指令。2.4.3
22、 指令集介紹助記符說明操作條件碼位置LDR Rd,addressing 加載字?jǐn)?shù)據(jù)Rdaddressing,addressing索引LDRcondLDRB Rd,addressing 加載無符號(hào)字節(jié)數(shù)據(jù)Rdaddressing,addressing索引LDRcondBLDRT Rd,addressing以用戶模式加載字?jǐn)?shù)據(jù)Rdaddressing,addressing索引LDRcondTLDRBT Rd, addressing 以用戶模式加載無符號(hào)字節(jié)數(shù)據(jù)Rdaddressing,addressing索引LDRcondBTLDRH Rd, addressing 加載無符號(hào)半字?jǐn)?shù)據(jù)Rdaddre
23、ssing,addressing索引LDRcondHLDRSB Rd, addressing 加載有符號(hào)字節(jié)數(shù)據(jù)Rdaddressing,addressing索引LDRcondSBLDRSH Rd, addressing加載有符號(hào)半字?jǐn)?shù)據(jù) Rdaddressing,addressing索引 LDRcondSH ARM存儲(chǔ)器訪問指令單寄存器加載助記符說明操作條件碼位置STR Rd, addressing 存儲(chǔ)字?jǐn)?shù)據(jù)addressingRd,addressing索引STRcondSTRB Rd,addressing 存儲(chǔ)字節(jié)數(shù)據(jù)addressingRd,addressing索引STRcondBST
24、RT Rd,addressing 以用戶模式存儲(chǔ)字?jǐn)?shù)據(jù)addressingRd, addressing索引STRcondTSTRBT Rd,addressing 以用戶模式存儲(chǔ)字節(jié)數(shù)據(jù)addressingRd,addressing索引STRcondBTSTRH Rd,addressing 存儲(chǔ)半字?jǐn)?shù)據(jù)addressing Rd,addressing索引STRcondHARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ) LDR/STR指令用于對(duì)內(nèi)存變量的訪問、內(nèi)存緩沖區(qū)數(shù)據(jù)的訪問、查表、外圍部件的控制操作等。若使用LDR指令加載數(shù)據(jù)到PC寄存器,則實(shí)現(xiàn)程序跳轉(zhuǎn)功能,這樣也就實(shí)現(xiàn)了程序散轉(zhuǎn)。 所有單寄存器加載/存儲(chǔ)
25、指令可分為“字和無符號(hào)字節(jié)加載存儲(chǔ)指令”和“半字和有符號(hào)字節(jié)加載存儲(chǔ)指令。LDR和STR字和無符號(hào)字節(jié)加載/存儲(chǔ)指令 LDR指令用于從內(nèi)存中讀取單一字或字節(jié)數(shù)據(jù)存入寄存器中,STR指令用于將寄存器中的單一字或字節(jié)數(shù)據(jù)保存到內(nèi)存。指令格式如下:ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ) LDRcondTRd, ;將指定地址上的字?jǐn)?shù)據(jù)讀入Rd STRcondTRd, ;將Rd中的字?jǐn)?shù)據(jù)存入指定地址 LDRcondBTRd, ;將指定地址上的字節(jié)數(shù)據(jù)讀入Rd STRcondBTRd, ;將Rd中的字節(jié)數(shù)據(jù)存入指定地址 其中,T為可選后綴。若指令有T,那么即使處理器是在特權(quán)模式下,存儲(chǔ)系統(tǒng)也將訪問看成是在用戶模
26、式下進(jìn)行的。T在用戶模式下無效,不能與前索引偏移一起使用T。 ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ)LDR和STR字和無符號(hào)字節(jié)加載/存儲(chǔ)指令編碼指令執(zhí)行的條件碼I為0時(shí),偏移量為12位立即數(shù),為1時(shí),偏移量為寄存器移位P表示前/后變址U表示加/減B為1表示字節(jié)訪問,為0表示字訪問W表示回寫為指令的尋址方式Rd為源/目標(biāo)寄存器Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(chǔ)(L為0)ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ)LDR和STR字和無符號(hào)字節(jié)加載/存儲(chǔ)指令 LDR/STR指令尋址非常靈活,它由兩部分組成,其中一部分為一個(gè)基址寄存器,可以為任一個(gè)通用寄存器;另一部分為一個(gè)地址偏移量。地址偏移量有以下3種
27、格式: 立即數(shù)。立即數(shù)可以是一個(gè)無符號(hào)的數(shù)值。這個(gè)數(shù)據(jù)可以加到基址寄存器,也可以從基址寄存器中減去這個(gè)數(shù)值。 如:LDR R1,R0,#0 x12 ;R1-R0+0 x12寄存器。寄存器中的數(shù)值可以加到基址寄存器,也可以從基址寄存器中減去這個(gè)數(shù)值。 如:LDR R1,R0,R2 ; R1-R0+R2 LDR R1,R0,-R2 ; R1-R0-R2寄存器及移位常數(shù)。寄存器移位后的值可以加到基址寄存器,也可以從基址寄存器中減去這個(gè)數(shù)值。 如:LDR R1,R0,R2,LSL #2 ;R1-R0+R2*4 ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ) 從尋址方式的地址計(jì)算方法分,加載/存儲(chǔ)指令有以下4種格式:
28、 零偏移。如:LDR Rd,Rn 前索引偏移。如:LDR Rd,Rn,#0 x04!程序相對(duì)偏移。如:LDR Rd,labe1 后索引偏移。如:LDR Rd,Rn,#-0 x04注意:必須保證字?jǐn)?shù)據(jù)操作的地址是32位對(duì)齊的。LDR和STR字和無符號(hào)字節(jié)加載/存儲(chǔ)指令LDR和STR半字和有符號(hào)字節(jié)加載/存儲(chǔ)指令 這類LDR/STR指令可加載有符號(hào)半字或字節(jié),可加載/存儲(chǔ)無符號(hào)半字。偏移量格式、尋址方式與加載/存儲(chǔ)字和無符號(hào)字節(jié)指令相同。 ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ) LDRcondSB Rd, ;將指定地址上的有符號(hào)字節(jié)讀入Rd LDRcondSH Rd, ;將指定地址上的有符號(hào)半字讀入Rd
29、 LDRcondH Rd, ;將指定地址上的半字?jǐn)?shù)據(jù)讀入Rd STRcondH Rd, ;將Rd中的半字?jǐn)?shù)據(jù)存入指定地址注意:1.有符號(hào)位半字/字節(jié)加載是指用符號(hào)位加載擴(kuò)展到32位,無符號(hào)半字加載是指用零擴(kuò)展到32位;2.半字讀寫的指定地址必須為偶數(shù),否則將產(chǎn)生不可靠的結(jié)果;ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ)LDR和STR半字和有符號(hào)字節(jié)加載/存儲(chǔ)指令編碼指令執(zhí)行的條件碼I為0時(shí),偏移量為12位立即數(shù),為1時(shí),偏移量為寄存器移位P表示前/后變址U表示加/減W表示回寫為指令的尋址方式Rd為源/目標(biāo)寄存器Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(chǔ)(L為0)S為1表示有符號(hào)訪問,為0表示無符號(hào)訪問
30、H為1表示半字訪問,為0表示字節(jié)訪問LDR和STR指令應(yīng)用示例:1.加載/存儲(chǔ)字和無符號(hào)字節(jié)指令LDRR2,R5;將R5指向地址的字?jǐn)?shù)據(jù)存入R2STRR1,R0,#0 x04 ;將R1的數(shù)據(jù)存儲(chǔ)到R0+0 x04地址LDRBR3,R2,#-1 ;將R2指向地址的字節(jié)數(shù)據(jù)存入R3,R2R21STRBR0,R3,-R8 ASR 2 ;R0-R3-R8/4,存儲(chǔ)R0的最低有效字節(jié)2.加載/存儲(chǔ)半字和有符號(hào)字節(jié)指令LDRSB R1,R0,R3;將R0+R3地址上的字節(jié)數(shù)據(jù)存入R1,;高24位用符號(hào)擴(kuò)展LDRH R6,R2,#2;將R2指向地址的半字?jǐn)?shù)據(jù)存入R6,高16位用0擴(kuò)展;讀出后,R2=R2+2
31、STRH R1,R0,#2!;將R1的半字?jǐn)?shù)據(jù)保存到R0+2地址,;只修改低2字節(jié)數(shù)據(jù),然后R0=R0+2ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ) (3 3)LDRLDR和STR -STR -雙字:加載/存儲(chǔ)兩個(gè)相鄰的寄存器,64位雙字。其句法有4種: Op cond D Rd,Rn 零偏移 Op cond D Rd,Rn,offset ! 前索引偏移 Op cond D Rd,label 程序相對(duì)偏移 Op cond D T Rd,Rn,offset 后索引偏移 ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ) 其中: Rd Rd 加載/ /存儲(chǔ)寄存器中的一個(gè),另一個(gè)是R R(d+1d+1)。RdRd必須是偶數(shù)寄存
32、器,且不是R14R14。 Rn Rn 除非指令為零偏移,或不帶寫回的前索引,否則,RnRn不允許與RdRd和R R(d+1d+1)相同。label labellabel label必須是在當(dāng)前指令的上下252252字節(jié)范圍內(nèi)。例如:LDRD R6,R11 ;R6R11,R7R11+4STRD R4,R9,#24 ;R4R9+24,R5R9+28ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ)助記符說明操作條件碼位置LDMmode Rn!,reglist 多寄存器加載reglistRn.,Rn回寫等LDMcondmodeSTMmode Rn!,reglist 多寄存器存儲(chǔ)Rn.reglist,Rn回寫等STMc
33、ondmodeARM存儲(chǔ)器訪問指令多寄存器存取 多寄存器加載/存儲(chǔ)指令可以實(shí)現(xiàn)在一組寄存器和一塊連續(xù)的內(nèi)存單元之間傳輸數(shù)據(jù)。LDM為加載多個(gè)寄存器;STM為存儲(chǔ)多個(gè)寄存器。允許一條指令傳送16個(gè)寄存器的任何子集或所有寄存器。它們主要用于現(xiàn)場保護(hù)、數(shù)據(jù)復(fù)制、常數(shù)傳遞等。ARM存儲(chǔ)器訪問指令多寄存器存取 多寄存器加載/存儲(chǔ)指令格式如下: LDMcond Rn!,reglist STMcond Rn!,reglistcond:指令執(zhí)行的條件;模式:控制地址的增長方式,一共有8種模式;!:表示在操作結(jié)束后,將最后的地址寫回Rn中;reglist :表示寄存器列表,可以包含多個(gè)寄存器,它們使用“,”隔開
34、,如R1,R2,R6-R9,寄存器由小到大排列;:可選后綴。允許在用戶模式或系統(tǒng)模式下使用。它有以下兩個(gè)功能:1)若op是LDM且寄存器列表包含R15時(shí),那么除了正常的多寄存器傳送外,還將SPSR也復(fù)制到CPSR中。這用于異常處理返回,僅在異常模式下使用。2)數(shù)據(jù)傳入或傳出的是用戶模式下的寄存器,而不是當(dāng)前模式的寄存器。ARM存儲(chǔ)器訪問指令多寄存器存取LDM和STM多寄存器加載/存儲(chǔ)指令編碼指令執(zhí)行的條件碼S 對(duì) 應(yīng) 于 指 令 中的”符號(hào)P表示前/后變址U表示加/減W表示回寫寄存器列表Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(chǔ)(L為0)ARM存儲(chǔ)器訪問指令多寄存器存取 多寄存器加載/存儲(chǔ)
35、指令的8種模式如下表所示,右邊四種為堆棧操作、左邊四種為數(shù)據(jù)傳送操作。模式說明模式說明IA每次傳送后地址加4FD滿遞減堆棧IB每次傳送前地址加4ED空遞減堆棧DA每次傳送后地址減4FA滿遞增堆棧DB每次傳送前地址減4EA空遞增堆棧數(shù)據(jù)塊傳送操作堆棧操作 進(jìn)行數(shù)據(jù)復(fù)制時(shí),先設(shè)置好源數(shù)據(jù)指針和目標(biāo)指針,然后使用塊拷貝尋址指令LDMIA/STMIA、LDMIB/STMIB、LDMDA/STMDA、LDMDB/STMDB進(jìn)行讀取和存儲(chǔ) 。 進(jìn)行堆棧操作操作時(shí),要先設(shè)置堆棧指針(SP),然后使用堆棧尋址指令STMFD/LDMFD 、STMED/LDMED、STMFA/LDMFA和STMEA/LDMEA實(shí)
36、現(xiàn)堆棧操作。ARM存儲(chǔ)器訪問指令多寄存器存取數(shù)據(jù)塊傳送指令操作過程如右圖所示,其中R1為指令執(zhí)行前的基址寄存器,R1則為指令執(zhí)行后的基址寄存器。R5R6R7R1 R1 指令STMIA R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMDA R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMIB R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMDB R1!,R5-R74008H4004H4000H4014H40
37、10H400CHARM存儲(chǔ)器訪問指令多寄存器存取數(shù)據(jù)塊傳送存儲(chǔ)堆棧操作壓棧說明數(shù)據(jù)塊傳送加載堆棧操作出棧說明STMDASTMED空遞減LDMDALDMFA滿遞減STMIASTMEA空遞增LDMIALDMFD滿遞增STMDBSTMFD滿遞減LDMDBLDMEA空遞減STMIBSTMFA滿遞增LDMIBLDMED空遞增;使用數(shù)據(jù)塊傳送指令進(jìn)行堆棧操作STMDAR0!,R5-R6. . .LDMIBR0!,R5-R6;使用堆棧指令進(jìn)行堆棧操作STMEDR13!,R5-R6. . .LDMEDR13!,R5-R6 兩段代碼的執(zhí)行結(jié)果是一樣的,但是使用堆棧指令的壓棧和出棧操作編程很簡單(只要前后一致即可
38、),而使用數(shù)據(jù)塊指令進(jìn)行壓棧和出棧操作則需要考慮空與滿、加與減對(duì)應(yīng)的問題。 堆棧操作(詳見“4.1 尋址方式堆棧尋址”)和數(shù)據(jù)塊傳送指令類似,也有4種模式,它們之間的關(guān)系如下表所示:助記符說明操作條件碼位置SWP Rd,Rm,Rn 寄存器和存儲(chǔ)器字?jǐn)?shù)據(jù)交換RdRn,RnRm (RnRd或Rm)SWPcondSWPB Rd,Rm,Rn 寄存器和存儲(chǔ)器字節(jié)數(shù)據(jù)交換RdRn,RnRm (RnRd或Rm)SWPcondBARM存儲(chǔ)器訪問指令寄存器和存儲(chǔ)器交換指令 SWP指令用于將一個(gè)內(nèi)存單元(該單元地址放在寄存器Rn中)的內(nèi)容讀取到一個(gè)寄存器Rd中,同時(shí)將另一個(gè)寄存器Rm的內(nèi)容寫入到該內(nèi)存單元中。使用
39、SWP可實(shí)現(xiàn)信號(hào)量操作。 指令格式如下:SWPcondB Rd,Rm,Rn 其中,B為可選后綴,若有B,則交換字節(jié),否則交換32位字;Rd用于保存從存儲(chǔ)器中讀入的數(shù)據(jù);Rm的數(shù)據(jù)用于存儲(chǔ)到存儲(chǔ)器中,若Rm與Rd相同,則為寄存器與存儲(chǔ)器內(nèi)容進(jìn)行互換;Rn為要進(jìn)行數(shù)據(jù)交換的存儲(chǔ)器地址,Rn不能與Rd和Rm相同。 ARM存儲(chǔ)器訪問指令寄存器和存儲(chǔ)器交換指令SWP和SWPB寄存器和存儲(chǔ)器交換指令編碼指令執(zhí)行的條件碼B用于區(qū)別無符號(hào)字節(jié)(B為1)或字(B為0)Rm源寄存器Rd目標(biāo)寄存器Rn為基址寄存器SWP指令應(yīng)用示例:SWPR1,R1,R0;將R1的內(nèi)容與R0指向的存儲(chǔ)單元的內(nèi)容進(jìn)行互換 SWPBR1
40、,R2,R0;將R0指向的存儲(chǔ)單元低字節(jié)數(shù)據(jù)讀取到R1中;(高24位清零),并將R2的內(nèi)容寫入到該內(nèi)存單元中;(最低字節(jié)有效) ARM指令目錄1.指令格式2.條件碼3.存儲(chǔ)器訪問指令4.數(shù)據(jù)處理指令5.乘法指令6.ARM分支指令7.雜項(xiàng)指令8.偽指令 ARM指令集ARM數(shù)據(jù)處理指令 數(shù)據(jù)處理指令大致可分為3類: 數(shù)據(jù)傳送指令;算術(shù)邏輯運(yùn)算指令;比較指令。 數(shù)據(jù)處理指令只能對(duì)寄存器的內(nèi)容進(jìn)行操作,而不能對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行操作。所有ARM數(shù)據(jù)處理指令均可選擇使用S后綴,以使指令影響狀態(tài)標(biāo)志。 2.4.3 指令集介紹ARM數(shù)據(jù)處理指令指令編碼指令執(zhí)行的條件碼I用于區(qū)別立即數(shù)(I為1)和寄存器移位(I
41、為0)opcode數(shù)據(jù)處理指令操作碼第二操作數(shù)Rd目標(biāo)寄存器Rn第一操作數(shù)寄存器S設(shè)置條件碼,與指令中的S位對(duì)應(yīng)帶進(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說明指令助記符操作碼opcode操作碼功能表助記符說明操作條件碼位置MO
42、V 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。助記符說明操作條件碼位置MOV Rd,operand2MOV Rd,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á)式 ”)或寄存器
43、傳送到目標(biāo)寄存器(Rd),可用于移位運(yùn)算等操作。指令格式如下: MOVcondS Rd,operand2 MOV指令舉例如下: MOVR11,#0 xF000000B;R1= 0 xF000000B MOVR0,R1;R0=R1 MOVSR3,R1,LSL #2;R3=R12,并影響標(biāo)志位 MOVPC,LR;PC=LR,子程序返回 助記符說明操作條件碼位置MOV Rd,operand2數(shù)據(jù)傳送Rdoperand2 MOVcondSMVN Rd,operand2MVN Rd,operand2數(shù)據(jù)非傳送Rd(operand2)MVNcondSARM數(shù)據(jù)處理指令數(shù)據(jù)傳送 MVN指令將8位圖立即數(shù)(參
44、看“第2操作數(shù):#immed_8r常數(shù)表達(dá)式 ”)或寄存器(operand2)按位取反后傳送到目標(biāo)寄存器(Rd),因?yàn)槠渚哂腥》垂δ埽钥梢匝b載范圍更廣的立即數(shù)。指令格式如下: MVNcondS Rd,operand2 MVN指令舉例如下: MVNR1,#0 xFF;R1=0 xFFFFFF00 MVNR1,R2;將R2按位取反,結(jié)果存到R1助記符說明操作條件碼位置ADD Rd, Rn, operand2加法運(yùn)算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2減法運(yùn)算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆
45、向減法指令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)算注:這些指令影響N,Z,C和V標(biāo)志位。助記符說明操作條件碼位置ADD Rd, Rn, operand2ADD Rd, Rn, operand2加法運(yùn)算指令RdRn+operand
46、2ADDcondSSUB 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-(NOT)CarryRSCcondSARM數(shù)據(jù)處理指令算術(shù)運(yùn)算 加法運(yùn)算指令A(yù)DD指令
47、將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 助記符說明操作條件碼位置ADD Rd, Rn, operand2加法運(yùn)算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2SUB Rd, Rn, operand2減法運(yùn)算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向減法指令Rdoperand2-RnRS
48、BcondSADC 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,結(jié)果保存到Rd中。指令格式如下: SUBcondS Rd,Rn,operand2 應(yīng)用示例: SUBSR0,R0,#240;R0=R0-240 ,并影響標(biāo)志位
49、SUBSR2,R1,R2;R2=R1-R2 ,并影響標(biāo)志位 助記符說明操作條件碼位置ADD Rd, Rn, operand2加法運(yùn)算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2減法運(yùn)算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2RSB Rd, Rn, operand2逆向減法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進(jìn)位加法RdRn+operand2+CarryADCcondSSBC Rd, Rn, operand2帶進(jìn)位減法指令RdRn-operand2-(NOT
50、)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í)行本指令 助記符說明操作條件碼位置CMP Rn, operand2比較指令標(biāo)志N、Z、C、VRn-operand2CMPcondCMN
51、 Rn, operand2CMN 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)志來判斷是否執(zhí)行。指令格式如下: CMNcondRn, operand2 應(yīng)用示例:
52、CMNR0,#1 ; R0+1,判斷R0是否為1的補(bǔ)碼;如果是,則設(shè)置Z標(biāo)志位助記符說明操作條件碼位置CMP Rn, operand2比較指令標(biāo)志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2CMN 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指令使用
53、寄存器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ù)位。 助記符說明操作條件碼位置CMP Rn, operand2比較指令標(biāo)志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2負(fù)數(shù)比較指令標(biāo) 志 N 、 Z 、 C 、VRn+operand2CM
54、NcondTST Rn, operand2TST 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;
55、 判斷R1的低4位是否為0 助記符說明操作條件碼位置CMP Rn, operand2比較指令標(biāo)志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2負(fù)數(shù)比較指令標(biāo) 志 N 、 Z 、 C 、VRn+operand2CMNcondTST Rn, operand2TST Rn, operand2位測試指令標(biāo)志N、Z、C、VRn & operand2TSTcondTEQ Rn, operand2相等測試指令標(biāo)志N、Z、C、VRn operand2TEQcondARM數(shù)據(jù)處理指令比較指令 位測試指令TST指令將寄存器Rn的值與operand2的值按位作邏輯“與”操
56、作,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(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) 。 助記符說明操作條件碼位置CMP Rn, operand2比較指令標(biāo)志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2負(fù)數(shù)比較指令標(biāo) 志 N 、 Z 、 C 、VRn+operand2CMNcondTST Rn,
57、 operand2位測試指令標(biāo)志N、Z、C、VRn & operand2TSTcondTEQ Rn, operand2TEQ 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位)助記符說明操作條件碼位置CMP Rn
58、, 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, operand2TEQ Rn, operand2相等測試指令標(biāo)志N、Z、C、VRn operand2TEQcondARM數(shù)據(jù)處理指令比較指令 相等測試指令TEQ指令將寄存器Rn的值與operand2的值按位作邏輯“異或”操作,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的
59、指令根據(jù)相應(yīng)的條件標(biāo)志來判斷是否執(zhí)行。指令格式如下: TEQcond Rn, operand2注意:TEQ指令與EORS指令的區(qū)別在于TEQ指令不保存運(yùn)算結(jié)果。使用TEQ進(jìn)行相等測試時(shí),常與EQ、NE條件碼配合使用。當(dāng)兩個(gè)數(shù)據(jù)相等時(shí),EQ有效;否則NE有效。 ARM指令目錄1.指令格式2.條件碼3.存儲(chǔ)器訪問指令4.數(shù)據(jù)處理指令5.乘法指令6.ARM分支指令7.雜項(xiàng)指令8.偽指令 ARM指令集乘法指令 ARM7TDMI具有三種乘法指令,分別為:3232位乘法指令;32 32位乘加指令;32 32位結(jié)果為64位的乘/乘加指令。2.4.3 指令集介紹ARM指令乘法指令乘法指令編碼指令執(zhí)行的條件碼O
60、pcode乘法指令操作碼S設(shè)置條件碼,與指令中的S位對(duì)應(yīng)Rm為被乘數(shù)寄存器Rn/RdLo為MLA指令相加的寄存器或64位乘法指令的目標(biāo)寄存器(低32位)Rd/RdHi為目標(biāo)寄存器或64位乘法指令的目標(biāo)寄存器(高32位)Rs為乘數(shù)寄存器64位有符號(hào)乘加指令SMLAL11164位有符號(hào)乘法指令SMULL11064位無符號(hào)乘加指令UMLAL10164位無符號(hào)乘法指令UMULL10032位乘加指令MLA00132位乘法指令MUL000說明指令助記符操作碼opcode操作碼功能表助記符說明操作條件碼位置MUL Rd,Rm,Rs32位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度攝影師與攝影棚運(yùn)營方居間合同2篇
- 二零二五版社區(qū)配送訂餐服務(wù)合同范本與社區(qū)管理協(xié)議3篇
- 二零二五年度酒店地毯綠色生產(chǎn)與環(huán)保認(rèn)證合同3篇
- 二零二五年新能源充電樁建設(shè)運(yùn)營合同樣本3篇
- 二零二五版高端住宅項(xiàng)目全程代理銷售合同3篇
- 二零二五版基因合成與生物技術(shù)知識(shí)產(chǎn)權(quán)轉(zhuǎn)讓合同3篇
- 二零二五版10月大型設(shè)備運(yùn)輸委托合同2篇
- 二零二五版廣西事業(yè)單位聘用示范性合同模板12篇
- 2025年度出口貨物環(huán)保認(rèn)證服務(wù)合同3篇
- 二零二五年度膩?zhàn)硬牧蠂H貿(mào)易代理合同2篇
- 納米技術(shù)增強(qiáng)早期疾病生物標(biāo)志物的檢測
- 產(chǎn)品銷量分析表折線圖excel模板
- 辦公設(shè)備(電腦、一體機(jī)、投影機(jī)等)采購 投標(biāo)方案(技術(shù)方案)
- 【真題】2023年南京市中考語文試卷(含答案解析)
- 功率模塊可靠性壽命評(píng)估與預(yù)測
- 案卷評(píng)查培訓(xùn)課件模板
- 湘教版七年級(jí)地理第一學(xué)期期末試卷分析
- 上海春季高考英語真題試題word精校版(含答案)
- “數(shù)”我精彩-“學(xué)”有特色-小學(xué)六年級(jí)數(shù)學(xué)寒假特色作業(yè)展示
- 牛津譯林版八年級(jí)上冊(cè)英語8A期末復(fù)習(xí)-閱讀理解(含答案)
- 普通高等新郎接親試卷(2022全國卷)
評(píng)論
0/150
提交評(píng)論