版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第八章第八章 ARM匯編指令匯編指令電子工程學(xué)院電子工程學(xué)院2本章主要內(nèi)容本章主要內(nèi)容掌握掌握指令尋址分類及其含義;指令尋址分類及其含義;指令尋址方式及其操作指令尋址方式及其操作;匯編語言指令執(zhí)行結(jié)果的分析方法。匯編語言指令執(zhí)行結(jié)果的分析方法。電子工程學(xué)院電子工程學(xué)院38.1 ARM指令格式指令格式ARM指令長度指令長度指令集可以是以下任一種指令集可以是以下任一種 32 bits 長長 (ARM狀態(tài)狀態(tài)) 16 bits 長長 (Thumb 狀態(tài)狀態(tài))ARM7TDMI 支持支持3種數(shù)據(jù)類型種數(shù)據(jù)類型 字節(jié)字節(jié) (8-bit) 半字半字 (16-bit) 字字 (32-bit)字必須被排成字必須
2、被排成4個(gè)字節(jié)邊界對齊個(gè)字節(jié)邊界對齊,半字必須被排列成半字必須被排列成2個(gè)字節(jié)邊界對個(gè)字節(jié)邊界對齊齊Load-store 結(jié)構(gòu)結(jié)構(gòu)*load/store 從存儲器中讀某個(gè)值從存儲器中讀某個(gè)值,操作完后再將其放回存儲器中操作完后再將其放回存儲器中只對存放在寄存器的數(shù)據(jù)進(jìn)行處理只對存放在寄存器的數(shù)據(jù)進(jìn)行處理對于存儲器中的數(shù)據(jù),只能使用對于存儲器中的數(shù)據(jù),只能使用load/store指令進(jìn)行存取指令進(jìn)行存取電子工程學(xué)院電子工程學(xué)院4ARM指令集指令集指令格式指令格式電子工程學(xué)院電子工程學(xué)院5 ARM是是三三地址指令格式,指令的基本格式如下:地址指令格式,指令的基本格式如下:ARM指令基本指令基本指令
3、格式指令格式 S , , 其中其中號內(nèi)的項(xiàng)是必須的,號內(nèi)的項(xiàng)是必須的,號內(nèi)的項(xiàng)是可選的。各項(xiàng)的說明如下:號內(nèi)的項(xiàng)是可選的。各項(xiàng)的說明如下:opcode:指令助記符;:指令助記符;cond:執(zhí)行條件;:執(zhí)行條件;S:是否影響:是否影響CPSR寄存器的值;寄存器的值;Rd:目標(biāo)寄存器;:目標(biāo)寄存器;Rn:第:第1個(gè)操作數(shù)的寄存器;個(gè)操作數(shù)的寄存器;operand2:第:第2個(gè)操作數(shù);個(gè)操作數(shù);指令語法指令語法目標(biāo)寄存器(目標(biāo)寄存器(Rd) 源寄存器源寄存器1(Rn)源寄存器源寄存器2(Rm)ADD r3,r1,r2r3r1r2例例:電子工程學(xué)院電子工程學(xué)院6操作碼操作碼條件助記符條件助記符標(biāo)志標(biāo)志
4、含義含義0000EQZ=1相等相等0001NEZ=0不相等不相等0010CS/HSC=1無符號數(shù)大于或等于無符號數(shù)大于或等于0011CC/LOC=0無符號數(shù)小于無符號數(shù)小于0100MIN=1負(fù)數(shù)負(fù)數(shù)0101PLN=0正數(shù)或零正數(shù)或零0110VSV=1溢出溢出0111VCV=0沒有溢出沒有溢出1000HIC=1,Z=0無符號數(shù)大于無符號數(shù)大于1001LSC=0,Z=1無符號數(shù)小于或等于無符號數(shù)小于或等于1010GEN=V有符號數(shù)大于或等于有符號數(shù)大于或等于 1011LTN!=V有符號數(shù)小于有符號數(shù)小于 1100GTZ=0,N=V有符號數(shù)大于有符號數(shù)大于 1101LEZ=1,N!=V有符號數(shù)小于或
5、等于有符號數(shù)小于或等于 1110AL任何任何無條件執(zhí)行無條件執(zhí)行 (指令默認(rèn)條件指令默認(rèn)條件) 1111NV任何任何從不執(zhí)行從不執(zhí)行(不要使用不要使用) 指令條件碼表指令條件碼表所有的所有的ARM指令都可以條指令都可以條件執(zhí)行,而件執(zhí)行,而Thumb指令只指令只有有B(跳轉(zhuǎn))(跳轉(zhuǎn))指令具有條件指令具有條件執(zhí)行功能執(zhí)行功能如果指令不標(biāo)如果指令不標(biāo)明條件代碼,明條件代碼,將默認(rèn)為無條將默認(rèn)為無條件(件(AL)執(zhí)行)執(zhí)行電子工程學(xué)院電子工程學(xué)院7指令條件碼指令條件碼C代碼:代碼:If(a b)a+;Elseb+;對應(yīng)的對應(yīng)的ARM匯編代碼:匯編代碼:CMP R0,R1; R0(a)與與R1(b)比
6、較比較ADDHI R0,R0,#1 ; 若若R0R1,則,則R0=R0+1ADDLS R1,R1,#1 ; 若若R0R1, 則則R1=R1+1示例:示例:無符號數(shù)無符號數(shù)大于大于電子工程學(xué)院電子工程學(xué)院8 ARM指令的基本格式如下:指令的基本格式如下:ARM指令的第指令的第2個(gè)操作數(shù)個(gè)操作數(shù) S , 靈活的使用第靈活的使用第2個(gè)操作數(shù)個(gè)操作數(shù)“operand2”能夠提高代碼效率。能夠提高代碼效率。 #immed_8r常數(shù)表達(dá)式;常數(shù)表達(dá)式; Rm寄存器方式;寄存器方式; Rm,shift寄存器移位方式;寄存器移位方式;0 x120 0 0 1 0 0 1 00 x000 0 0 0 0 0 0
7、 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ù)循環(huán)右移位常數(shù)循環(huán)右移10位位常數(shù)常數(shù)#immed_8r是一個(gè)是一個(gè)8位的常數(shù)通過循環(huán)右移偶數(shù)位位的常數(shù)通過循環(huán)右移偶數(shù)位得到得到電子工程學(xué)院電子工程學(xué)院9ARM指令的第指令的第2個(gè)操作數(shù)個(gè)操作數(shù) Rm,shift寄存器移位方式寄存器移位方式 將寄存器的移位結(jié)果作為操作數(shù)(移位操作不消將寄存器的移位結(jié)果作為操作數(shù)(移位操作不消耗額外的時(shí)間),但耗
8、額外的時(shí)間),但Rm值保持不變值保持不變桶形移位器桶形移位器Rd結(jié)果結(jié)果N預(yù)預(yù)處處理理未未預(yù)預(yù)處處理理RmRn電子工程學(xué)院電子工程學(xué)院10n 桶形移位器操作桶形移位器操作助記符助記符 說明說明移位操作移位操作 結(jié)果結(jié)果Y值值LSL邏輯左移邏輯左移 x LSL yxy#1-32 or RsASR算術(shù)算術(shù)右移右移 x ASR y(signed)xY#1-32 or RsROR循環(huán)右移循環(huán)右移 x ROR y(unsigned)xy|(x31)|(unsigned)x1)None 指令指令 Rm,RRXARM指令的第指令的第2個(gè)操作數(shù)個(gè)操作數(shù):向右移:向右移電子工程學(xué)院電子工程學(xué)院11ARM指令的第
9、指令的第2個(gè)操作數(shù)個(gè)操作數(shù)邏輯左移邏輯左移LSL移位操作:移位操作:0邏輯右移邏輯右移LSR移位操作:移位操作:0算數(shù)右移算數(shù)右移ASR移位操作:移位操作:循環(huán)右移循環(huán)右移ROR移位操作:移位操作:帶擴(kuò)展的循環(huán)右移帶擴(kuò)展的循環(huán)右移RRX移位操作:移位操作:C例如:例如:ADDR1, R1, R1, LSL #3 ;R1=R1+(R1R3)電子工程學(xué)院電子工程學(xué)院128.2 ARM處理器尋址方式處理器尋址方式尋址方式是根據(jù)指令中給出的地址碼字段來實(shí)現(xiàn)尋址方式是根據(jù)指令中給出的地址碼字段來實(shí)現(xiàn)尋尋找真實(shí)操作數(shù)地址找真實(shí)操作數(shù)地址的方式。的方式。ARM處理器具有處理器具有9種基本尋址方式種基本尋址方
10、式。1.立即尋址;立即尋址;2. 寄存器直接尋址;寄存器直接尋址;3. 寄存器移位尋址;寄存器移位尋址;4. 寄存器間接尋址;寄存器間接尋址;5. 基址尋址;基址尋址;6. 多寄存器尋址;多寄存器尋址;7. 相對尋址;相對尋址;8. 堆棧尋址;堆棧尋址;9.塊拷貝尋址。塊拷貝尋址。電子工程學(xué)院電子工程學(xué)院13R0MOV R0, #0 xFF00程序存儲程序存儲立即尋址立即尋址操作數(shù)包含在操作數(shù)包含在指令指令當(dāng)中當(dāng)中;指令地址碼部分就是指令地址碼部分就是數(shù)據(jù)數(shù)據(jù)本身;本身;取指時(shí)就取出了可立即使用的操作數(shù);取指時(shí)就取出了可立即使用的操作數(shù);SUBS R0, R0, #1 ;R0減減1,結(jié)果放入,
11、結(jié)果放入R0,并且影響標(biāo)志位,并且影響標(biāo)志位MOV R0, #0 xFF00 ;將立即數(shù)將立即數(shù)0 xFF00裝入裝入R0寄存器寄存器0 xFF00從代碼中從代碼中獲得數(shù)據(jù)獲得數(shù)據(jù)ARM指令中常數(shù)的表示:指令中常數(shù)的表示:十進(jìn)制數(shù):十進(jìn)制數(shù):#21,#4二進(jìn)制數(shù):二進(jìn)制數(shù):#0b01101100十六進(jìn)制數(shù):十六進(jìn)制數(shù):#0 x3200A001電子工程學(xué)院電子工程學(xué)院140 xAA0 x55R2R1寄存器直接尋址寄存器直接尋址1. 操作數(shù)存放在操作數(shù)存放在寄存器寄存器中中;2. 指令地址碼字段給出指令地址碼字段給出寄存器編號(名)寄存器編號(名);3. 指令執(zhí)行時(shí)直接取出寄存器值來操作指令執(zhí)行時(shí)
12、直接取出寄存器值來操作;MOV R1, R2; R1 = R2 SUB R0, R1, R2 ; R0 = R1-R2 0 xAA電子工程學(xué)院電子工程學(xué)院151. 操作數(shù)存放在操作數(shù)存放在寄存器寄存器中中;2. 指令地址碼字段給出指令地址碼字段給出寄存器編號(名)及移位表達(dá)式寄存器編號(名)及移位表達(dá)式;3. 指令執(zhí)行時(shí)取出寄存器值并移位,再將結(jié)果作為源操指令執(zhí)行時(shí)取出寄存器值并移位,再將結(jié)果作為源操作數(shù)作數(shù);MOV R0, R2, LSL #3 ; R0=R28 ANDS R1, R1, R2, LSL R3 ; R1 = R1 and (R2R3)0 x55R0R20 x01寄存器移位尋址
13、寄存器移位尋址0 x080 x08邏輯左移邏輯左移3位位寄存器尋址寄存器尋址影響標(biāo)志位影響標(biāo)志位LSL、LSRASRROR、RRX電子工程學(xué)院電子工程學(xué)院16寄存器間接尋址寄存器間接尋址1. 操作數(shù)存放在操作數(shù)存放在內(nèi)存單元內(nèi)存單元中中;2. 指令地址碼字段給出指令地址碼字段給出 寄存器編號(名)寄存器編號(名);3. 指令執(zhí)行時(shí)根據(jù)寄存器值(指針)找到相應(yīng)的存儲指令執(zhí)行時(shí)根據(jù)寄存器值(指針)找到相應(yīng)的存儲單元單元LDRR1,R2; R1= R2SWPR1,R1,R2 ; R1 R20 x55R0R20 x400000000 xAA0 x400000000 xAA內(nèi)存單元內(nèi)存單元電子工程學(xué)院電
14、子工程學(xué)院17基址變址尋址基址變址尋址1. 操作數(shù)存放在操作數(shù)存放在內(nèi)存單元內(nèi)存單元中中;2.指令地址碼字段給出指令地址碼字段給出 寄存器編號(名)寄存器編號(名)和偏移量和偏移量;3.指令執(zhí)行時(shí)將基址寄存器的內(nèi)容與偏移量(指令執(zhí)行時(shí)將基址寄存器的內(nèi)容與偏移量(4K)相加)相加/減,形減,形成操作數(shù)的有效地址。成操作數(shù)的有效地址。4. 常用于查表、數(shù)組操作、功能部件寄存器訪問等。常用于查表、數(shù)組操作、功能部件寄存器訪問等。LDRR2,R3,#0 x0C ;R2R0-4, R0=R0-4LDRR0,R1 ,#4 ;R0=R1,R1=R1+4LDR R0,R1,R2 ;R0=R1+R2前索引前索引
15、后索引后索引0 x55R2R30 x400000000 xAA0 x4000000C0 xAA內(nèi)存單元內(nèi)存單元電子工程學(xué)院電子工程學(xué)院18多寄存器直接尋址多寄存器直接尋址1. 操作數(shù)存放在操作數(shù)存放在內(nèi)存單元內(nèi)存單元中中;2.指令地址碼字段給出指令地址碼字段給出 寄存器編號(名)列表寄存器編號(名)列表;3.編號高編號高的寄存器總是對應(yīng)內(nèi)存中的的寄存器總是對應(yīng)內(nèi)存中的高地址單元高地址單元;4. 可完成可完成存儲塊存儲塊和和16個(gè)個(gè)寄存器寄存器或其子集之間的數(shù)據(jù)傳送?;蚱渥蛹g的數(shù)據(jù)傳送。 LDMIAR1!,R2-R4,R6 ; R2= R1 , R3= R1+4; R4= R1+8 , R6
16、= R1+C, R1=R1+10 STMDBR1,R2-R4,R6 ; R1-4= R6 , R1-8=R4; R1-C =R3, R1-10=R20 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C0 x010 x020 x030 x040 x40000010內(nèi)存單元內(nèi)存單元Increase AfterDecrease Before電子工程學(xué)院電子工程學(xué)院19相對尋址相對尋址1. 操作數(shù)為操作數(shù)為指令存放地址指令存放地址;2. 指令地址碼字段為
17、指令地址碼字段為地址偏移量地址偏移量;3. 指令執(zhí)行時(shí)同基址尋址,由指令執(zhí)行時(shí)同基址尋址,由PC提供基地址根提供基地址根據(jù)偏移量完成據(jù)偏移量完成跳轉(zhuǎn)跳轉(zhuǎn);BLSUBR1;調(diào)用調(diào)用SUBR1子程序子程序BEQLOOP ;條件跳轉(zhuǎn)到條件跳轉(zhuǎn)到LOOP處處. LOOP MOV R6,#1電子工程學(xué)院電子工程學(xué)院201. 操作數(shù)存放在操作數(shù)存放在內(nèi)存棧頂單元內(nèi)存棧頂單元中中;2. 指令地址碼字段固定使用指令地址碼字段固定使用棧頂指針棧頂指針SP;3. 指令執(zhí)行時(shí)同多寄存器指令執(zhí)行時(shí)同多寄存器/塊尋址,可完成多個(gè)數(shù)據(jù)的入棧和出棧塊尋址,可完成多個(gè)數(shù)據(jù)的入棧和出棧 LDMEASP!,R2-R4,R6 ;
18、R2= SP-10 , R3= SP-C; R4= SP-8 , R6= SP-4,SP=SP-10 STMFDSP!,R2-R4,R6 ; SP-4= R6 , SP-8=R4 ; SP-C =R3, SP-10=R2, SP=SP-10堆棧尋址堆棧尋址0 x40000010SPR20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C0 x010 x020 x030 x040 x40000000堆棧單元堆棧單元Empty AscendingFull Descending多寄
19、存器多寄存器/塊尋址塊尋址電子工程學(xué)院電子工程學(xué)院21堆棧尋址堆棧尋址四種類型的堆棧方式四種類型的堆棧方式n 滿遞增滿遞增(FA):堆棧向上增長,堆棧指針指向內(nèi)含有效數(shù):堆棧向上增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最高地址。指令如據(jù)項(xiàng)的最高地址。指令如LDMFA、STMFA等;等; n 空遞增空遞增(EA):堆棧向上增長,堆棧指針指向堆棧上的:堆棧向上增長,堆棧指針指向堆棧上的第一個(gè)空位置。指令如第一個(gè)空位置。指令如LDMEA、STMEA等;等; n 滿遞減滿遞減(FD):堆棧向下增長,堆棧指針指向內(nèi)含有效數(shù):堆棧向下增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最低地址。指令如據(jù)項(xiàng)的最低地址。指令如LDM
20、FD、STMFD等;等;n 空遞減空遞減(ED):堆棧向下增長,堆棧指針向堆棧下的第:堆棧向下增長,堆棧指針向堆棧下的第一個(gè)空位置。指令如一個(gè)空位置。指令如LDMED、STMED等等電子工程學(xué)院電子工程學(xué)院22堆棧的遞增與遞減堆棧的遞增與遞減n遞增堆棧:向高地址方向生長,即向上生長遞增堆棧:向高地址方向生長,即向上生長n遞減堆棧:向低地址方向生長,即向下生長遞減堆棧:向低地址方向生長,即向下生長棧底棧底棧頂棧頂棧區(qū)棧區(qū)SP堆棧存儲堆棧存儲區(qū)區(qū)棧頂棧頂棧底棧底棧區(qū)棧區(qū)SP地址地址減少減少地址地址增加增加0 x123456780 x12345678遞增堆棧壓棧遞增堆棧壓棧遞減堆棧壓棧遞減堆棧壓棧電
21、子工程學(xué)院電子工程學(xué)院23棧頂棧頂SP棧頂棧頂SP棧底棧底棧底棧底堆棧的空與滿堆棧的空與滿空堆??斩褩#憾褩V羔槪憾褩V羔楽P指向下一個(gè)待壓入數(shù)據(jù)的指向下一個(gè)待壓入數(shù)據(jù)的空位置空位置滿堆棧滿堆棧:堆棧指針:堆棧指針SP指向最后壓入的堆棧的指向最后壓入的堆棧的有效數(shù)據(jù)項(xiàng)有效數(shù)據(jù)項(xiàng)0 x123456780 x12345678棧頂棧頂SP0 x12345678棧頂棧頂SP滿堆棧壓棧滿堆棧壓??斩褩簵?斩褩簵k娮庸こ虒W(xué)院電子工程學(xué)院24塊拷貝尋址塊拷貝尋址多寄存器傳送指令用于將一塊數(shù)據(jù)從存儲器的某一位置拷貝多寄存器傳送指令用于將一塊數(shù)據(jù)從存儲器的某一位置拷貝到另一位置。到另一位置。 如:如:STM
22、IAR0!,R1-R7 ;將將R1R7的數(shù)據(jù)保存到的數(shù)據(jù)保存到 存儲器中存儲器中;存儲指針存儲指針R0在保存第一個(gè)值在保存第一個(gè)值之后之后增加,增加,;增長方向?yàn)橄蛏显鲩L。增長方向?yàn)橄蛏显鲩L。STMIBR0!,R1-R7 ;將將R1R7的數(shù)據(jù)保存到的數(shù)據(jù)保存到 存儲器中存儲器中;存儲指針存儲指針R0在保存第一個(gè)值在保存第一個(gè)值之前之前增加,增加,;增長方向?yàn)橄蛏显鲩L。增長方向?yàn)橄蛏显鲩L。STM:存儲多個(gè)寄存器內(nèi)容至內(nèi)存單元:存儲多個(gè)寄存器內(nèi)容至內(nèi)存單元LDM:加載內(nèi)存單元的值至多個(gè)寄存器:加載內(nèi)存單元的值至多個(gè)寄存器AFTERBEHAND電子工程學(xué)院電子工程學(xué)院258.3 ARM指令集指令集n
23、 數(shù)據(jù)處理指令大致可分為數(shù)據(jù)處理指令大致可分為3類:類: 數(shù)據(jù)傳送數(shù)據(jù)傳送指令:指令: MOV、MVN 算術(shù)邏輯算術(shù)邏輯運(yùn)算運(yùn)算指令:指令:ADD、SUB、RSB、ADC、SBC、RSC、MUL、MLA、UMULL、UMLAL、SMULL、SMLAL、AND、ORR、EOR、BIC 比較比較指令:指令: CMP、CMN、TST、TEQn 數(shù)據(jù)處理指令只能對數(shù)據(jù)處理指令只能對寄存器的內(nèi)容寄存器的內(nèi)容進(jìn)行操作,進(jìn)行操作,而不能對內(nèi)存中的數(shù)據(jù)進(jìn)行操作。而不能對內(nèi)存中的數(shù)據(jù)進(jìn)行操作。n所有所有ARM數(shù)據(jù)處理指令均可選擇使用數(shù)據(jù)處理指令均可選擇使用S后綴,后綴,以使指令以使指令影響狀態(tài)標(biāo)志影響狀態(tài)標(biāo)志。
24、 ARM指令集指令集ARM數(shù)據(jù)處理指令數(shù)據(jù)處理指令電子工程學(xué)院電子工程學(xué)院26ARM數(shù)據(jù)處理指令數(shù)據(jù)處理指令編碼格式編碼格式指令執(zhí)行的條件碼指令執(zhí)行的條件碼I用于區(qū)別立即數(shù)(用于區(qū)別立即數(shù)(I為為1)和寄存器移位)和寄存器移位(I為為0)opcode數(shù)據(jù)處理指數(shù)據(jù)處理指令操作碼令操作碼第二操作數(shù)第二操作數(shù)Rd目標(biāo)寄存器目標(biāo)寄存器Rn第一操作數(shù)寄存器第一操作數(shù)寄存器S設(shè)置條件碼,與指令設(shè)置條件碼,與指令中的中的S位對應(yīng)位對應(yīng)帶進(jìn)位加法帶進(jìn)位加法ADC0101帶進(jìn)位減法指令帶進(jìn)位減法指令SBC0110帶進(jìn)位逆向減法指令帶進(jìn)位逆向減法指令RSC0111位測試指令位測試指令TST1000相等測試指令相
25、等測試指令TEQ1001比較指令比較指令CMP1010負(fù)數(shù)比較指令負(fù)數(shù)比較指令CMN1011邏輯或操作指令邏輯或操作指令ORR1100數(shù)據(jù)傳送數(shù)據(jù)傳送MOV1101位清除指令位清除指令BIC1110數(shù)據(jù)非傳送數(shù)據(jù)非傳送MVN1111加法運(yùn)算指令加法運(yùn)算指令A(yù)DD0100逆向減法指令逆向減法指令RSB0011減法運(yùn)算指令減法運(yùn)算指令SUB0010邏輯異或操作指令邏輯異或操作指令EOR0001邏輯與操作指令邏輯與操作指令A(yù)ND0000說明說明指令助記符指令助記符操作碼操作碼opcode操作碼功能表操作碼功能表電子工程學(xué)院電子工程學(xué)院27乘法指令的編碼格式乘法指令的編碼格式Rm被乘數(shù)寄存器被乘數(shù)寄存
26、器Rn: MLA指令相加的寄存器指令相加的寄存器RdLo: 64位乘法指令目標(biāo)寄位乘法指令目標(biāo)寄存器的低存器的低32位位Rd: 目標(biāo)寄存器目標(biāo)寄存器RdHi: 64位乘法指令目標(biāo)寄存器的高位乘法指令目標(biāo)寄存器的高32位位Rs為乘數(shù)寄存器為乘數(shù)寄存器64位有符號乘加指令位有符號乘加指令SMLAL11164位有符號乘法指令位有符號乘法指令SMULL11064位無符號乘加指令位無符號乘加指令UMLAL10164位無符號乘法指令位無符號乘法指令UMULL10032位乘加指令位乘加指令MLA00132位乘法指令位乘法指令MUL000說明說明指令助記符指令助記符操作碼操作碼電子工程學(xué)院電子工程學(xué)院28助記
27、符助記符說明說明操作操作條件碼位置條件碼位置MOV Rd,operand2數(shù)據(jù)傳送數(shù)據(jù)傳送Rdoperand2 MOVcondSMVN Rd,operand2數(shù)據(jù)非傳送數(shù)據(jù)非傳送Rd(operand2)MVNcondSARM數(shù)據(jù)處理指令數(shù)據(jù)處理指令數(shù)據(jù)傳送數(shù)據(jù)傳送MOV R1,#0 xF000000B;R1= 0 xF000000B MOV R0,R1;R0=R1 MOVS R3,R1,LSL #2;R3=R12,并影響標(biāo)志位,并影響標(biāo)志位 MOV PC,LR;PC=LR,子程序返回,子程序返回 MVN R1,#0 xFFFFFFFF;R1=0 x00MVN R1,R2;將將R2按位取反,結(jié)果
28、存到按位取反,結(jié)果存到R1n 當(dāng)有后綴當(dāng)有后綴S時(shí)指令將根據(jù)結(jié)果更新標(biāo)志時(shí)指令將根據(jù)結(jié)果更新標(biāo)志N和和Z,在計(jì)算,在計(jì)算operand2( 8位立即數(shù)或寄存器)時(shí)更新標(biāo)志位立即數(shù)或寄存器)時(shí)更新標(biāo)志C,不影響標(biāo)志,不影響標(biāo)志V。 n MVN指令具有取反功能,可以裝載范圍更廣的立即數(shù)。指令具有取反功能,可以裝載范圍更廣的立即數(shù)。電子工程學(xué)院電子工程學(xué)院29助記符助記符說明說明操作操作條件碼位置條件碼位置ADD Rd, Rn, operand2加法運(yùn)算指令加法運(yùn)算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2減法運(yùn)算指令減法運(yùn)算指令RdRn-operand2
29、SUBcondSRSB Rd, Rn, operand2逆向減法指令逆向減法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進(jìn)位加法帶進(jìn)位加法RdRn+operand2+CarryADCcondSSBC Rd, Rn, operand2帶進(jìn)位減法指令帶進(jìn)位減法指令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2帶進(jìn)位逆向減法帶進(jìn)位逆向減法指令指令Rdoperand2-Rn-(NOT)CarryRSCcondSARM數(shù)據(jù)處理指令數(shù)據(jù)處理指令算術(shù)運(yùn)算算術(shù)運(yùn)算注:這些指令影響注:這些指令影響N,Z,C和和
30、V標(biāo)志位。標(biāo)志位。電子工程學(xué)院電子工程學(xué)院30助記符助記符說明說明操作操作條件碼位置條件碼位置ADD Rd, Rn, operand2加法運(yùn)算指令加法運(yùn)算指令 RdRn+operand2ADDcondSSUB Rd, Rn, operand2減法運(yùn)算指令減法運(yùn)算指令 RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向減法指令逆向減法指令 Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進(jìn)位加法帶進(jìn)位加法RdRn+operand2+Carry ADCcondSSBC Rd, Rn, operand2帶進(jìn)位減法指帶進(jìn)位減法指令
31、令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2帶進(jìn)位逆向減帶進(jìn)位逆向減法指令法指令Rdoperand2-Rn-(NOT)CarryRSCcondS算術(shù)運(yùn)算算術(shù)運(yùn)算加法運(yùn)算加法運(yùn)算ADD指令將指令將operand2的值與的值與Rn的值相加,結(jié)果保存到的值相加,結(jié)果保存到Rd寄存器寄存器 ADDcondS Rd,Rn,operand2 ADDS R1,R1,#1020;R1=R1+1020,并影響標(biāo)志位,并影響標(biāo)志位 ADD R1,R1,R2,LSL #2;R1=R1+R22 電子工程學(xué)院電子工程學(xué)院31算術(shù)運(yùn)算算術(shù)運(yùn)算減法運(yùn)算減法運(yùn)算S
32、UB指令用寄存器指令用寄存器Rn減去減去operand2,結(jié)果保存到,結(jié)果保存到Rd中。中。SUBcondS Rd,Rn,operand2 SUBS R0,R0,#240;R0=R0-240 ,并影響標(biāo)志位,并影響標(biāo)志位 SUBS R2,R1,R2;R2=R1-R2 ,并影響標(biāo)志位,并影響標(biāo)志位 助記符助記符說明說明操作操作條件碼位置條件碼位置ADD Rd, Rn, operand2加法運(yùn)算指令加法運(yùn)算指令 RdRn+operand2ADDcondSSUB Rd, Rn, operand2減法運(yùn)算指令減法運(yùn)算指令 RdRn-operand2SUBcondSRSB Rd, Rn, operand
33、2逆向減法指令逆向減法指令 Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進(jìn)位加法帶進(jìn)位加法RdRn+operand2+Carry ADCcondSSBC Rd, Rn, operand2帶進(jìn)位減法指帶進(jìn)位減法指令令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2帶進(jìn)位逆向減帶進(jìn)位逆向減法指令法指令Rdoperand2-Rn-(NOT)CarryRSCcondS電子工程學(xué)院電子工程學(xué)院32RSB指令將指令將operand2的值減去的值減去Rn,結(jié)果保存到,結(jié)果保存到Rd中。中。 RSBcondS Rd
34、,Rn,operand2 RSB R3,R1,#0 xFF00 ;R3=0 xFF00-R1 RSBS R1,R2,R2,LSL #2 ;R1=(R22)-R2=R23 影響標(biāo)志位影響標(biāo)志位 助記符助記符說明說明操作操作條件碼位置條件碼位置ADD Rd, Rn, operand2加法運(yùn)算指令加法運(yùn)算指令 RdRn+operand2ADDcondSSUB Rd, Rn, operand2減法運(yùn)算指令減法運(yùn)算指令 RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向減法指令逆向減法指令 Rdoperand2-RnRSBcondSADC Rd, Rn, operan
35、d2帶進(jìn)位加法帶進(jìn)位加法RdRn+operand2+Carry ADCcondSSBC Rd, Rn, operand2帶進(jìn)位減法指帶進(jìn)位減法指令令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2帶進(jìn)位逆向減帶進(jìn)位逆向減法指令法指令Rdoperand2-Rn-(NOT)CarryRSCcondS算術(shù)運(yùn)算算術(shù)運(yùn)算逆向減法運(yùn)算逆向減法運(yùn)算電子工程學(xué)院電子工程學(xué)院33ADC將將operand2的值與的值與Rn的值相加,再加上的值相加,再加上CPSR中的中的C條件標(biāo)志位,結(jié)果條件標(biāo)志位,結(jié)果保存到保存到Rd寄存器。寄存器。ADCcondS Rd,
36、Rn,operand2 應(yīng)用示例(使用應(yīng)用示例(使用ADC實(shí)現(xiàn)實(shí)現(xiàn)64位加法,結(jié)果存于位加法,結(jié)果存于R1(高(高32位)、位)、R0中):中): ADDS R0,R0,R2 ;R0等于低等于低32位相加,并影響標(biāo)志位位相加,并影響標(biāo)志位 ADC R1,R1,R3;R1等于高等于高32位相加,并加上低位進(jìn)位位相加,并加上低位進(jìn)位助記符助記符說明說明操作操作條件碼位置條件碼位置ADD Rd, Rn, operand2加法運(yùn)算指令加法運(yùn)算指令 RdRn+operand2ADDcondSSUB Rd, Rn, operand2減法運(yùn)算指令減法運(yùn)算指令 RdRn-operand2SUBcondSRSB
37、 Rd, Rn, operand2逆向減法指令逆向減法指令 Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進(jìn)位加法帶進(jìn)位加法RdRn+operand2+Carry ADCcondSSBC Rd, Rn, operand2帶進(jìn)位減法指帶進(jìn)位減法指令令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2帶進(jìn)位逆向減帶進(jìn)位逆向減法指令法指令Rdoperand2-Rn-(NOT)CarryRSCcondS算術(shù)運(yùn)算算術(shù)運(yùn)算帶進(jìn)位法運(yùn)算帶進(jìn)位法運(yùn)算電子工程學(xué)院電子工程學(xué)院34SBC用寄存器用寄存器Rn減去減去oper
38、and2,再減去,再減去CPSR中的中的C條件標(biāo)志位的非條件標(biāo)志位的非(即若即若C標(biāo)志清零,則結(jié)果減去標(biāo)志清零,則結(jié)果減去1),結(jié)果保存到,結(jié)果保存到Rd中。中。SBCcondS Rd,Rn,operand2 應(yīng)用示例(使用應(yīng)用示例(使用SBC實(shí)現(xiàn)實(shí)現(xiàn)64位減法,結(jié)果存于位減法,結(jié)果存于R1、R0中):中): SUBS R0,R0,R2 ; 低低32位相減,并影響標(biāo)志位位相減,并影響標(biāo)志位 SBC R1,R1,R3;高高32位相減,并減去低位借位位相減,并減去低位借位助記符助記符說明說明操作操作條件碼位置條件碼位置ADD Rd, Rn, operand2加法運(yùn)算指令加法運(yùn)算指令 RdRn+op
39、erand2ADDcondSSUB Rd, Rn, operand2減法運(yùn)算指令減法運(yùn)算指令 RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向減法指令逆向減法指令 Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進(jìn)位加法帶進(jìn)位加法RdRn+operand2+Carry ADCcondSSBC Rd, Rn, operand2帶進(jìn)位減法指帶進(jìn)位減法指令令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2帶進(jìn)位逆向減帶進(jìn)位逆向減法指令法指令Rdoperand2-Rn-(N
40、OT)CarryRSCcondS算術(shù)運(yùn)算算術(shù)運(yùn)算帶進(jìn)位減法運(yùn)算帶進(jìn)位減法運(yùn)算電子工程學(xué)院電子工程學(xué)院35RSC指令用寄存器指令用寄存器operand2減去減去Rn,再減去,再減去CPSR中的中的C條件標(biāo)志位,結(jié)果保條件標(biāo)志位,結(jié)果保存到存到Rd中。中。 RSCcondS Rd,Rn,operand2 應(yīng)用示例(使用應(yīng)用示例(使用RSC指令實(shí)現(xiàn)求指令實(shí)現(xiàn)求64位數(shù)值位數(shù)值R1R0的負(fù)數(shù)的負(fù)數(shù) ,結(jié)果結(jié)果R3R2):): RSBS R2,R0,#0 ;R2=-R0 RSC R3,R1,#0 ;R3=-R1- !Carry助記符助記符說明說明操作操作條件碼位置條件碼位置ADD Rd, Rn, ope
41、rand2加法運(yùn)算指令加法運(yùn)算指令 RdRn+operand2ADDcondSSUB Rd, Rn, operand2減法運(yùn)算指令減法運(yùn)算指令 RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向減法指令逆向減法指令 Rdoperand2-RnRSBcondSADC Rd, Rn, operand2帶進(jìn)位加法帶進(jìn)位加法RdRn+operand2+Carry ADCcondSSBC Rd, Rn, operand2帶進(jìn)位減法指帶進(jìn)位減法指令令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2帶進(jìn)位逆向減帶進(jìn)位
42、逆向減法指令法指令Rdoperand2-Rn-(NOT)CarryRSCcondS算術(shù)運(yùn)算算術(shù)運(yùn)算帶進(jìn)位逆向減法運(yùn)算帶進(jìn)位逆向減法運(yùn)算電子工程學(xué)院電子工程學(xué)院36乘(加)法指令乘(加)法指令指指 令令 格格 式式說說 明明操操 作作MULcondS Rd,Rm,Rs32位乘法位乘法RdRm*RsMLAcondS Rd,Rm,Rs,Rn32位乘加位乘加RdRm*Rs+RnUMULLcondS RdLo,RdHi,Rm,Rs64位無符號乘法位無符號乘法(RdLo,RdHi) Rm*RsUMLALcondS RdLo,RdHi,Rm,Rs64位無符號乘加位無符號乘加(RdLo,RdHi) Rm*Rs
43、+(RdLo,RdHi)SMULLcondS RdLo,RdHi,Rm,Rs64位有符號乘法位有符號乘法(RdLo,RdHi) Rm*RsSMLALcondS RdLo,RdHi,Rm,Rs64位有符號乘加位有符號乘加(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)MULR1,R2,R3 ;R1=R2R3,結(jié)果的低結(jié)果的低32位保存位保存MLASR1,R2,R3,R0;R1=R2R3+R0,影響標(biāo)志位,影響標(biāo)志位UMULL R0,R1,R5,R8;(R1、R0)=R5R8 UMLAL R0,R1,R5,R8;(R1、R0)=R5R8+(R1、R0)SMULLR2,R3,R7,R6;(
44、R3、R2)=R7R6 SMLALR2,R3,R7,R6;(R3、R2)=R7R6+(R3、R2) 注:注: R不能為不能為R15且且 RdRm ; 可影響可影響N、Z標(biāo)志位;標(biāo)志位; 32位指令不影響位指令不影響V,C不確定;不確定;64位指令位指令V 和和C不確定;不確定;電子工程學(xué)院電子工程學(xué)院37邏輯運(yùn)算指令邏輯運(yùn)算指令指指 令令 格格 式式說說 明明操操 作作ANDcondS Rd, Rn, operand2邏輯與操作邏輯與操作RdRn & operand2ORRcondS Rd, Rn, operand2邏輯或操作邏輯或操作RdRn | operand2EORcondS R
45、d, Rn, operand2邏輯異或操作邏輯異或操作RdRn operand2BICcondS Rd, Rn, operand2位清除位清除RdRn & (operand2)可標(biāo)志可標(biāo)志N和和Z。計(jì)算。計(jì)算Operand2時(shí)更新標(biāo)志時(shí)更新標(biāo)志C,不影響標(biāo)志,不影響標(biāo)志V。ANDS R0,R0,#0 x01;取取R0的最低位數(shù)據(jù),并影響標(biāo)志位的最低位數(shù)據(jù),并影響標(biāo)志位 ORR R0,R0,#0 x0F;將將R0的低的低4位置位置1 ,其它位不變,其它位不變 EOR R1,R1,#0 x0F;將將R1的低的低4位取反,其它位不變位取反,其它位不變 BIC R1,R1,#0 x0F;將將R
46、1的低的低4位清零,其它位不變位清零,其它位不變 ANDEQ R2,R1,R3;若若Z1,則,則R2=R1&R3BIC R1,R2,R3;將將R3的反碼和的反碼和R2相邏輯相邏輯“與與”MOV R1,R2,LSR #24 ; 將將R2的高的高8位移入到位移入到R3低低8位位ORR R3,R1,R3,LSL #8電子工程學(xué)院電子工程學(xué)院388.4.2 跳轉(zhuǎn)指令跳轉(zhuǎn)指令(轉(zhuǎn)移指令轉(zhuǎn)移指令) 在在ARM中有兩種方式可以實(shí)現(xiàn)程序的跳轉(zhuǎn),中有兩種方式可以實(shí)現(xiàn)程序的跳轉(zhuǎn),一種是使用一種是使用轉(zhuǎn)移轉(zhuǎn)移指令直接跳轉(zhuǎn),另一種則是直接向指令直接跳轉(zhuǎn),另一種則是直接向PC寄存器賦值實(shí)現(xiàn)跳轉(zhuǎn)。寄存器賦值實(shí)現(xiàn)跳
47、轉(zhuǎn)。轉(zhuǎn)移轉(zhuǎn)移指令有以下四種:指令有以下四種:轉(zhuǎn)移指令轉(zhuǎn)移指令B;帶帶鏈接鏈接的轉(zhuǎn)移指令的轉(zhuǎn)移指令BL;帶帶狀態(tài)狀態(tài)切換的轉(zhuǎn)移指令切換的轉(zhuǎn)移指令BX;帶帶鏈接及狀態(tài)鏈接及狀態(tài)切換的轉(zhuǎn)移指令切換的轉(zhuǎn)移指令BLX 。ARM指令集指令集轉(zhuǎn)移指令轉(zhuǎn)移指令電子工程學(xué)院電子工程學(xué)院39ARM分支指令分支指令指令編碼指令編碼分支指令分支指令B/BL指令編碼格式指令編碼格式指令執(zhí)行的條件碼指令執(zhí)行的條件碼L區(qū)別區(qū)別B指令(指令(L為為0)和和BL指令(指令(L為為1)2 4 位 有 符 號 立 即 數(shù)位 有 符 號 立 即 數(shù)(偏移量)(偏移量)分支指令分支指令BX指令編碼格式指令編碼格式指令執(zhí)行的條件碼指令執(zhí)
48、行的條件碼Rm目標(biāo)地址寄存器,目標(biāo)地址寄存器,該寄存器裝載跳轉(zhuǎn)地址該寄存器裝載跳轉(zhuǎn)地址電子工程學(xué)院電子工程學(xué)院40助記符助記符說明說明操作操作條件碼位置條件碼位置B label分支指令分支指令PClabelBcondBL label帶鏈接的分支指令帶鏈接的分支指令LRPC-4,PClabelBLcondBX Rm帶狀態(tài)切換的分支指令帶狀態(tài)切換的分支指令PCRm,切換處理器狀態(tài),切換處理器狀態(tài)BXcondBLX label/Rm帶鏈接及狀態(tài)切換的分支帶鏈接及狀態(tài)切換的分支指令指令PCRm/label,切換處理器,切換處理器狀態(tài)狀態(tài)BLXcondARM指令指令轉(zhuǎn)移指令轉(zhuǎn)移指令B WAITA; 跳轉(zhuǎn)
49、到跳轉(zhuǎn)到WAITA標(biāo)號處標(biāo)號處 B0 x1234; 跳轉(zhuǎn)到絕對地址跳轉(zhuǎn)到絕對地址0 x1234處處 電子工程學(xué)院電子工程學(xué)院41BL LabelxxxxxxLabelxxxMOV PC,LRAddr1Addr2xxxxxxLRPCBL指令適用于子程序調(diào)用指令適用于子程序調(diào)用使用該指令后,下一條指令的地址被拷貝到使用該指令后,下一條指令的地址被拷貝到R14(即即LR) 連接寄連接寄存器中,然后跳轉(zhuǎn)到指定地址運(yùn)行程序。跳轉(zhuǎn)范圍限制在當(dāng)前存器中,然后跳轉(zhuǎn)到指定地址運(yùn)行程序。跳轉(zhuǎn)范圍限制在當(dāng)前指令的指令的32M字節(jié)地址內(nèi)。字節(jié)地址內(nèi)。BLcond LabelAddr1LabelAddr2Addr21.
50、當(dāng)程序執(zhí)行到當(dāng)程序執(zhí)行到BL跳轉(zhuǎn)指令跳轉(zhuǎn)指令時(shí),硬件將下一條指令的地時(shí),硬件將下一條指令的地址址Addr2裝入裝入LR寄存器,寄存器,并把跳轉(zhuǎn)地址裝入程序計(jì)數(shù)并把跳轉(zhuǎn)地址裝入程序計(jì)數(shù)器(器(PC)2. 程序跳轉(zhuǎn)到目標(biāo)地址程序跳轉(zhuǎn)到目標(biāo)地址Label繼續(xù)執(zhí)行,當(dāng)子程序繼續(xù)執(zhí)行,當(dāng)子程序執(zhí)行結(jié)束后,將執(zhí)行結(jié)束后,將LR寄存器寄存器內(nèi)容存入內(nèi)容存入PC,返回調(diào)用函,返回調(diào)用函數(shù)繼續(xù)執(zhí)行數(shù)繼續(xù)執(zhí)行 應(yīng)用示例(調(diào)用子程序):應(yīng)用示例(調(diào)用子程序): BL LabelARM指令指令轉(zhuǎn)移指令轉(zhuǎn)移指令電子工程學(xué)院電子工程學(xué)院42BX指令,該指令可以根據(jù)跳轉(zhuǎn)地址(指令,該指令可以根據(jù)跳轉(zhuǎn)地址(Rm)的最低位來切
51、換處)的最低位來切換處理器狀態(tài)。其跳轉(zhuǎn)范圍限制在當(dāng)前指令的理器狀態(tài)。其跳轉(zhuǎn)范圍限制在當(dāng)前指令的32M字節(jié)地址內(nèi)字節(jié)地址內(nèi)(ARM指令為字對齊,最低指令為字對齊,最低2位地址固定為位地址固定為0)。BXcond RmADRL R0,ThumbFun+1 ;將將Thumb程序的入口地址加程序的入口地址加1存入存入R0 BX R0 ; 跳轉(zhuǎn)到跳轉(zhuǎn)到R0指定的地址,指定的地址, ;并根據(jù)并根據(jù)R0的最低位來切換處理器狀態(tài)的最低位來切換處理器狀態(tài)跳轉(zhuǎn)地址跳轉(zhuǎn)地址Rm0跳轉(zhuǎn)后跳轉(zhuǎn)后CPSR標(biāo)志標(biāo)志T位位處理器狀態(tài)處理器狀態(tài)00ARM11ThumbARM指令指令轉(zhuǎn)移指令轉(zhuǎn)移指令電子工程學(xué)院電子工程學(xué)院438
52、.3.3 程序狀態(tài)寄存器訪問指令編碼格式程序狀態(tài)寄存器訪問指令編碼格式指定傳送的區(qū)域,可以為以下字母指定傳送的區(qū)域,可以為以下字母(必須小寫)的一個(gè)或者組合:(必須小寫)的一個(gè)或者組合:c 控制域屏蔽字節(jié)控制域屏蔽字節(jié)(psr7.0)x 擴(kuò)展域屏蔽字節(jié)擴(kuò)展域屏蔽字節(jié)(psr15.8)s 狀態(tài)域屏蔽字節(jié)狀態(tài)域屏蔽字節(jié)(psr23.16)f 標(biāo)志域屏蔽字節(jié)標(biāo)志域屏蔽字節(jié)(psr31.24)要傳送到狀態(tài)寄存要傳送到狀態(tài)寄存器指定域的立即數(shù)器指定域的立即數(shù)MSR指令編碼指令編碼1MSR指令編碼指令編碼28位立即數(shù)位立即數(shù)目標(biāo)寄存器,不能為目標(biāo)寄存器,不能為R15R 0:CPSR R 1:SPSRMRS
53、指令編碼指令編碼立即數(shù)立即數(shù)移位次數(shù)移位次數(shù)電子工程學(xué)院電子工程學(xué)院448.3.3 程序狀態(tài)寄存器訪問指令程序狀態(tài)寄存器訪問指令指指 令令 格格 式式說說 明明操操 作作MRScond Rd, psr讀讀PSRRdpsrMSRcond psr_fields,Rd/#immed_8r寫寫PSRpsr_fieldsRd/#immed_8rn 讀讀CPSR可了解當(dāng)前工作狀態(tài)可了解當(dāng)前工作狀態(tài); 讀讀SPSR可以了解進(jìn)入異常前的狀態(tài)可以了解進(jìn)入異常前的狀態(tài); n MSR與與MRS配合使用,可以切換處理器模式或允許配合使用,可以切換處理器模式或允許/禁止中斷等。禁止中斷等。(1)(2)(3)(4);子程
54、序:使能子程序:使能IRQ中斷中斷ENABLE_IRQ MRS R0, CPSR BIC R0, R0,#0 x80 MSR CPSR_c,R0 MOV PC,LR ;子程序:禁能子程序:禁能IRQ中斷中斷DISABLE_IRQ MRS R0, CPSR ORR R0, R0,#0 x80 MSR CPSR_c,R0 MOV PC,LR 1.將將CPSR寄存器內(nèi)容讀出到寄存器內(nèi)容讀出到R0;2.修改對應(yīng)于修改對應(yīng)于CPSR中的中的I控制位;控制位;3.將修改后的值寫回將修改后的值寫回 CPSR寄存器的寄存器的對應(yīng)控制域;對應(yīng)控制域;4.返回上一層函數(shù);返回上一層函數(shù);電子工程學(xué)院電子工程學(xué)院4
55、58.3.4 加載加載/存儲指令存儲指令A(yù)RM處理器是典型的處理器是典型的RISC處理器,對處理器,對存儲器的訪問存儲器的訪問只能使用只能使用加載加載/存儲指令存儲指令 實(shí)現(xiàn)。實(shí)現(xiàn)。 ARM的存儲空間及的存儲空間及I/O空間統(tǒng)一編址,因此對空間統(tǒng)一編址,因此對外圍外圍I/O及及程序程序數(shù)據(jù)數(shù)據(jù)的訪問均需通過加載的訪問均需通過加載/存儲指令進(jìn)行。存儲指令進(jìn)行。單寄存器操作指令單寄存器操作指令LDR/STR 用于對訪問內(nèi)存變量、內(nèi)存緩沖區(qū)數(shù)據(jù)、查表、控制外圍部件等。用于對訪問內(nèi)存變量、內(nèi)存緩沖區(qū)數(shù)據(jù)、查表、控制外圍部件等。若使用若使用LDR指令加載數(shù)據(jù)到指令加載數(shù)據(jù)到PC寄存器,則實(shí)現(xiàn)程序寄存器,
56、則實(shí)現(xiàn)程序跳轉(zhuǎn)跳轉(zhuǎn)。 又分為又分為“字和無符號字節(jié)加載存儲指令字和無符號字節(jié)加載存儲指令”及及“半字和有符號字節(jié)半字和有符號字節(jié)加載存儲指令加載存儲指令”兩類。兩類。多寄存器操作指令多寄存器操作指令LDM/STM 主要用于現(xiàn)場保護(hù)、數(shù)據(jù)復(fù)制、常數(shù)傳遞等。主要用于現(xiàn)場保護(hù)、數(shù)據(jù)復(fù)制、常數(shù)傳遞等。數(shù)據(jù)交換指令數(shù)據(jù)交換指令SWP電子工程學(xué)院電子工程學(xué)院46單寄存器操作指令的編碼格式單寄存器操作指令的編碼格式字和無符號字節(jié)存取指令字和無符號字節(jié)存取指令LDR/STRP表示前表示前/后變址后變址U=1:加加 U=0: 減減B=0:字節(jié):字節(jié) B=1:字:字 W=1:回寫基址寄存器,對應(yīng)指:回寫基址寄存器
57、,對應(yīng)指令中的令中的“!” W=0:不回寫:不回寫存儲單元尋址方式存儲單元尋址方式L=1:加載:加載 L=0:存儲:存儲Rd為源為源/目標(biāo)寄存器目標(biāo)寄存器Rn為基址寄存器為基址寄存器S=1:有符號數(shù),有符號數(shù), S=0: 無符號數(shù)無符號數(shù)H=1:半字,:半字,H=0:字節(jié):字節(jié)存儲單元尋址方式存儲單元尋址方式半字和有符號字節(jié)存取指令半字和有符號字節(jié)存取指令LDR/STRI=1立即數(shù)立即數(shù) I=0寄存器移位寄存器移位電子工程學(xué)院電子工程學(xué)院47多寄存器操作指令的編碼格式多寄存器操作指令的編碼格式多寄存器操作指令編碼多寄存器操作指令編碼LDM/STMS對應(yīng)于指令中的對應(yīng)于指令中的”符號:在恢復(fù)符號
58、:在恢復(fù)PC時(shí)也時(shí)也同時(shí)恢復(fù)同時(shí)恢復(fù)SPSRP表示前表示前/后變址后變址U表示加表示加/減減W表示回寫表示回寫(!)寄存器列表寄存器列表Rn為基址寄存器為基址寄存器L=1:加載加載 L=0:存儲存儲電子工程學(xué)院電子工程學(xué)院48寄存器寄存器/存儲器交換指令的編碼格式存儲器交換指令的編碼格式B用于區(qū)別無符號字節(jié)用于區(qū)別無符號字節(jié)(B為為1)或字()或字(B為為0)Rm源寄存器源寄存器Rd目標(biāo)寄存器目標(biāo)寄存器Rn為基址寄存器為基址寄存器SWPR1,R1,R0; R1R0SWPB R1,R2,R0;將將R0指向的存儲單元低字節(jié)數(shù)據(jù)讀指向的存儲單元低字節(jié)數(shù)據(jù)讀;取到取到R1中中(高高24位清零位清零),
59、并將,并將R2的的;內(nèi)容寫入到該內(nèi)存單元中的最低字節(jié)內(nèi)容寫入到該內(nèi)存單元中的最低字節(jié)電子工程學(xué)院電子工程學(xué)院49助記符助記符說明說明操作操作條件碼位置條件碼位置LDR Rd,addressing 加載字?jǐn)?shù)據(jù)加載字?jǐn)?shù)據(jù)Rdaddressing,addressing索引索引LDRcondLDRB Rd,addressing 加載無符號字節(jié)數(shù)據(jù)加載無符號字節(jié)數(shù)據(jù)LDRcondBLDRT Rd,addressing以用戶模式加載字?jǐn)?shù)以用戶模式加載字?jǐn)?shù)據(jù)據(jù)LDRcondTLDRBT Rd, addressing 以用戶模式加載無符以用戶模式加載無符號字節(jié)數(shù)據(jù)號字節(jié)數(shù)據(jù)LDRcondBTLDRH Rd,
60、addressing 加載無符號半字?jǐn)?shù)據(jù)加載無符號半字?jǐn)?shù)據(jù)LDRcondHLDRSB Rd, addressing 加載有符號字節(jié)數(shù)據(jù)加載有符號字節(jié)數(shù)據(jù)LDRcondSBLDRSH Rd, addressing加載有符號半字?jǐn)?shù)據(jù)加載有符號半字?jǐn)?shù)據(jù) LDRcondSH 單寄存器加載單寄存器加載電子工程學(xué)院電子工程學(xué)院50助記符助記符說明說明操作操作條件碼位置條件碼位置STR Rd, addressing 存儲字?jǐn)?shù)據(jù)存儲字?jǐn)?shù)據(jù)addressingRd,addressing索引索引STRcondSTRB Rd, addressing 存儲字節(jié)數(shù)據(jù)存儲字節(jié)數(shù)據(jù)STRcondBSTRT Rd, addressing 以用戶模
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高職攝影攝像技術(shù)(視頻拍攝技巧)試題及答案
- 2025年大學(xué)農(nóng)業(yè)工程(農(nóng)機(jī)與農(nóng)藝結(jié)合)試題及答案
- 2025年高職數(shù)字印刷技術(shù)(印刷質(zhì)量控制)試題及答案
- 2025年中職(市場營銷)市場競爭分析綜合測試題及答案
- 2025年大學(xué)通信(移動通信技術(shù))試題及答案
- 2025年大學(xué)廣播電視學(xué)(廣電應(yīng)用研究)試題及答案
- 2025年高職藝術(shù)學(xué)(藝術(shù)創(chuàng)作)試題及答案
- 2025年大學(xué)醫(yī)學(xué)遺傳學(xué)(遺傳規(guī)律應(yīng)用)試題及答案
- 2025年中職數(shù)控技術(shù)應(yīng)用(數(shù)控編程基礎(chǔ))試題及答案
- 2025年中職(建筑材料檢測)水泥性能檢測試題及答案
- 肺含鐵血黃素沉著癥診療指南(2025年版)
- 湖口縣2026年第一批單位公開選調(diào)事業(yè)編制工作人員【32人】參考題庫附答案
- 小區(qū)場地租賃合同協(xié)議
- 統(tǒng)計(jì)分析培訓(xùn)課件
- 2026年山東力明科技職業(yè)學(xué)院單招綜合素質(zhì)筆試備考試題帶答案解析
- 2026年人教版七年級英語上冊期末真題試卷含答案
- 2025年阿勒泰地區(qū)哈巴河縣保安員招聘考試題庫附答案解析
- 廣東省廣州市海珠區(qū)2024-2025學(xué)年七年級上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 地下消防水池設(shè)備安裝方案
- 雨課堂學(xué)堂在線學(xué)堂云《城市規(guī)劃理論與方法(江蘇師大 )》單元測試考核答案
- 高邊坡施工測量方案設(shè)計(jì)
評論
0/150
提交評論