第3章ARM微處理器的指令系統(tǒng)1-尋址方式_第1頁
第3章ARM微處理器的指令系統(tǒng)1-尋址方式_第2頁
第3章ARM微處理器的指令系統(tǒng)1-尋址方式_第3頁
第3章ARM微處理器的指令系統(tǒng)1-尋址方式_第4頁
第3章ARM微處理器的指令系統(tǒng)1-尋址方式_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第3章 ARM微處理器的指令系統(tǒng) 尋址方式 算術(shù)指令 特殊指令 應(yīng)用舉例Assemble Language of ARM2o 本章的主要內(nèi)容有:n ARM指令集、Thumb指令集概述n ARM指令的尋址方式n ARM指令集的分類與具體應(yīng)用n Thumb指令集簡介及應(yīng)用場合Assemble Language of ARM33.1 ARM微處理器的指令集概述o 3.1.1 ARM微處理器的指令的分類與格式nARM微處理器的指令集是加載/存儲型的,也即指令集僅能處理寄存器中的數(shù)據(jù),而且處理結(jié)果都要放回寄存器中,而對系統(tǒng)存儲器的訪問則需要通過專門的加載/存儲指令來完成。nARM微處理器的指令集可以分為

2、:o跳轉(zhuǎn)指令o數(shù)據(jù)處理指令o加載/存儲指令o程序狀態(tài)寄存器(PSR)處理指令o協(xié)處理器指令o異常產(chǎn)生指令n六大類,具體的指令及功能如下表所示(表中指令為基本ARM指令,不包括派生的ARM指令)。Assemble Language of ARM4o ARM指令及功能描述 助記符指令功能描述ADC帶進(jìn)位加法指令A(yù)DD加法指令A(yù)ND邏輯與指B跳轉(zhuǎn)指令BIC位清零指令BL帶返回的跳轉(zhuǎn)指BLX帶返回和狀態(tài)切換的跳轉(zhuǎn)指令BX帶狀態(tài)切換的跳轉(zhuǎn)指令CDP協(xié)處理器數(shù)據(jù)操作指令A(yù)ssemble Language of ARM5o 助記符指令功能描述CMN比較反值指令CMP比較指令EOR異或指令LDC存儲器到協(xié)處理

3、器的數(shù)據(jù)傳輸指令LDM加載多個寄存器指令LDR存儲器到寄存器的數(shù)據(jù)傳輸指令MCR從ARM寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳輸指令MOV數(shù)據(jù)傳送指令A(yù)ssemble Language of ARM6o 助記符指令功能描述MRC從協(xié)處理器寄存器到ARM寄存器的數(shù)據(jù)傳輸指令MRS傳送CPSR或SPSR的內(nèi)容到通用寄存器指令MSR傳送通用寄存器到CPSR或SPSR的指MUL32位乘法指MLA32位乘加指令MVN數(shù)據(jù)取反傳送指令ORR邏輯或指令RSB逆向減法指令RSC帶借位的逆向減法指令A(yù)ssemble Language of ARM7o 助記符指令功能描述SBC帶借位減法指令STC協(xié)處理器寄存器寫入存儲器

4、指STM批量內(nèi)存字寫入指令STR寄存器到存儲器的數(shù)據(jù)傳輸指SUB減法指令SWI軟件中斷指令SWP交換指令TEQ相等測試指TST位測試指Assemble Language of ARM8ARM指令編碼格式o說明nCondo指令執(zhí)行的條件編碼nOpcodeo指令操作符編碼nSo決定指令的操作是否影響CPSR的值nRdo操作目標(biāo)寄存器編碼nRno包含第一操作數(shù)的寄存器編碼nShifter_operando表示第二操作數(shù)Shifter_operandRdRnsopcode001cond 31 28 27 25 24 21 20 19 16 15 12 11 8 7 0參見參見“ARM Architec

5、ture Reference Manual”Assemble Language of ARM9o 3.1.2 指令的條件域n當(dāng)處理器工作在ARM狀態(tài)時,幾乎所有的指令均根據(jù)CPSR中條件碼的狀態(tài)和指令的條件域有條件的執(zhí)行。當(dāng)指令的執(zhí)行條件滿足時,指令被執(zhí)行,否則指令被忽略。n每一條ARM指令包含4位的條件碼,位于指令的最高4位31:28。條件碼共有16種,每種條件碼可用兩個字符表示,這兩個字符可以添加在指令助記符的后面和指令同時使用。o 例如,跳轉(zhuǎn)指令B可以加上后綴EQ變?yōu)锽EQ表示“相等則跳轉(zhuǎn)”,即當(dāng)CPSR中的Z標(biāo)志置位時發(fā)生跳轉(zhuǎn)。n在16種條件標(biāo)志碼中,只有15種可以使用,如表3-2所示

6、,第16種(1111)為系統(tǒng)保留,暫時不能使用。Assemble Language of ARM10o 指令的條件碼 條件碼助記符后綴標(biāo) 志含 義0000EQZ置位相等0001NEZ清零不相等0010CSC置位無符號數(shù)大于或等于0011CCC清零無符號數(shù)小于0100MIN置位負(fù)數(shù)0101PLN清零正數(shù)或零0110VSV置位溢出0111VCV清零未溢出Assemble Language of ARM11o Cf. p.15 條件碼助記符后綴標(biāo) 志含 義1000HIC置位Z清零無符號數(shù)大于1001LSC清零Z置位無符號數(shù)小于或等于1010GEN等于V帶符號數(shù)大于或等于1011LTN不等于V帶符號數(shù)

7、小于1100GTZ清零且(N等于V)帶符號數(shù)大于1101LEZ置位或(N不等于V)帶符號數(shù)小于或等于1110AL忽略無條件執(zhí)行1111NV該指令從不執(zhí)行cc: Condition CodesGeneric Unsigned SignedCS Carry Set HI Higher Than GT Greater ThanCC Carry Clear HS Higher or Same GE Greater Than or EqualEQ Equal (Zero Set) LO Lower Than LT Less ThanNE Not Equal (Zero Clear) LS Lower T

8、han or Same LE Less Than or EqualVS Overflow Set MI Minus (Negative)VC Overflow Clear PL Plus (Positive)Assemble Language of ARM12條件執(zhí)行及標(biāo)志位nARM指令可以通過添加適當(dāng)?shù)臈l件碼后綴來達(dá)到條件執(zhí)行的目的。n這樣可以提高代碼密度,減少分支跳轉(zhuǎn)指令數(shù)目,提高性能。 CMP r3,#0 BEQ skip ADD r0,r1,r2skipn默認(rèn)情況下,數(shù)據(jù)處理指令不影響條件碼標(biāo)志位,但可以選擇通過添加“S”來影響標(biāo)志位。CMP不需要增加“S”就可改變相應(yīng)的標(biāo)志位。loo

9、p SUBS r1,r1,#1 BNE loop如果Z標(biāo)志清零則跳轉(zhuǎn)R1減1,并設(shè)置標(biāo)志位CMP r3,#0ADDNE r0,r1,r2Assemble Language of ARM133.2 ARM指令的尋址方式 所謂尋址方式尋址方式就是處理器根據(jù)指令中給出的地址信息來尋找物理地址的方式。目前ARM指令系統(tǒng)支持如下幾種常見的尋址方式。o3.2.1 立即尋址立即尋址也叫立即數(shù)尋址,這是一種特殊的尋址方式,操作數(shù)本身就在指令中給出,只要取出指令也就取到了操作數(shù)。這個操作數(shù)被稱為立即數(shù),對應(yīng)的尋址方式也就叫做立即尋址。例如以下指令:ADD R0,R0,1 ;R0R01ADD R0,R0,0 x3

10、f ;R0R00 x3f 在以上兩條指令中,第二個源操作數(shù)即為立即數(shù),要求以“”為前綴,對于以十六進(jìn)制表示的立即數(shù),還要求在“”后加上“0 x”或“&” ,另外表示二進(jìn)制數(shù)。Assemble Language of ARM14立即數(shù) (1)o沒有任何一條ARM 指令可包括一個32 bit的立即數(shù)n所有的ARM指令都是32 bits固定長度o數(shù)據(jù)處理指令格式中,第二個操作數(shù)有12位o4 bit 移位值 (0-15)乘于2,得到一個范圍在0-30,步長為 2的移位值。o記住一條準(zhǔn)則: “最后最后8位一定要移動偶數(shù)位一定要移動偶數(shù)位位”.07118immed_8ShifterRORrotx2

11、Quick Quiz:0 x3F0 #?0 xe3a004ffMOV r0, #?Immed_8=0 x3F, rotate_imm=0 xEorImmed_8=0 xFC, rotate_imm=0 xFAssemble Language of ARM15立即數(shù) (2)o Examples:o下列命令中,匯編器把立即數(shù)轉(zhuǎn)換為移位操作:n MOV r0,#4096n ADD r1,r2,#0 xFF0000o也可使用 MVN來進(jìn)行位反轉(zhuǎn):n MOV r0, #0 xFFFFFFFF o使用無法用上述方法生成的數(shù)據(jù),將產(chǎn)生錯誤。031ror#0range0-0 xff000000step0 x0

12、1000000ror#8range0-0 x000000ffstep0 x00000001range0-0 x000003fcstep0 x00000004ror#300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0; uses 0 x40 ROR 26; uses 0 xFF ROR 16; assembles to MVN r0,#0Assemble Langu

13、age of ARM16o 3.2.2 寄存器尋址 寄存器尋址就是利用寄存器中的數(shù)值作為操作數(shù),這種尋址方式是各類微處理器經(jīng)常采用的一種方式,也是一種執(zhí)行效率較高的尋址方式。如下指令:ADD R0,R1,R2 ;R0R1R2 該指令的執(zhí)行效果是將寄存器R1和R2的內(nèi)容相加,其結(jié)果存放在寄存器R0中。Assemble Language of ARM17o 3.2.3 寄存器間接尋址 寄存器間接尋址就是以寄存器中的值作為操作數(shù)的地址,而操作數(shù)本身存放在存儲器中。例如以下指令:LDR R0,R1 ;R0R1STR R0,R1 ;R1R0n第一條指令將以R1的值為地址的存儲器中的數(shù)據(jù)傳送到R0中。n第

14、二條指令將R0的值傳送到以R1的值為地址的存儲器中。Assemble Language of ARM18o3.2.4 基址變址尋址基址變址尋址就是將寄存器(該寄存器一般稱作基址寄存器基址寄存器)的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個操作數(shù)的有效地址。變址尋址方式常用于訪問某基地址附近的地址單元。地址偏移量通常有以下三種表示方式: 常量 寄存器 比例(scaled)Assemble Language of ARM19偏移尋址(offset addressing)o LDR R0, R1o LDR R0, R1, #4o LDR R0, R1, R2o LDR R0, R1, R2, L

15、SL #2Assemble Language of ARM20地址的偏移(offset)o使用一個絕對值不大于4095的數(shù)值,可使用帶符號數(shù),即在-4095+4095之間;如:LDR R2, Rn, #-0 x8o使用對寄存器移位的方法計(jì)算偏移量;如:LDR R2, Rn, R3,LSL #2o使用寄存器偏移的方法計(jì)算偏移量;如:LDR R2, Rn, -R3o使用語句標(biāo)號。如:LDR R2, START;R2-STARTn在這種尋址方式中,程序計(jì)算器PC是隱含的基址寄存器,偏移量是語句標(biāo)號所在的地址和PC(當(dāng)前正在執(zhí)行的指令)之間的差值。Assemble Language of ARM21事

16、先更新尋址(pre-index addressing)o LDR R0, R1, #4!o LDR R0, R1, R2!o LDR R0, R1, R2, LSL #2!Assemble Language of ARM22事后更新尋址(pre-index addressing)o LDR R0, R1, #4o LDR R0, R1, R2o LDR R0, R1, R2, LSL #2Assemble Language of ARM23PreorPostIndexed尋址?0 x5r10 x200原基址原基址寄存器寄存器0 x200r00 x5源寄存器源寄存器for STR偏移量偏移量12

17、0 x20cr10 x20c更新基址寄存器0 x5r10 x200原基址原基址寄存器寄存器0 x200r00 x5源寄存器源寄存器for STR偏移量偏移量120 x20c通過通過 STR r0,r1,#12!來自動更新基址寄存器來自動更新基址寄存器o Post-indexed:STR r0,r1,#12o Pre-indexed:STR r0,r1,#12!0 x20cr1更新基址寄存器通過通過 STR r0,r1,#12來自動更新基址寄存器來自動更新基址寄存器Assemble Language of ARM24數(shù)據(jù)移動尋址方式(data movement addressing modes)

18、op1: Data AccessImmediate # - IR(value)Register Rm - RmLogical Shift Left Immediate Rm, LSL # - Rm IR(value)Logical Shift Left Register Rm, LSL Rs - Rm Rs(7:0)Logical Shift Right Immediate Rm, LSR # IR(value)Logical Shift Right Register Rm, LSR Rs Rs(7:0)Arithmetic Shift Right Immediate Rm, ASR # IR

19、(value)Arithmetic Shift Right Register Rm, ASR Rs Rs(7:0)Rotate Right Immediate Rm, ROR # hvaluei Rotate Right Register Rm, ROR Rs Rs(4:0)Rotate Right with Extend Rm, RRX Rm CPSR(C)Assemble Language of ARM25內(nèi)存尋址方式(memory addressing modes)op2: Memory AccessImmediate Offset Rn, # - Rn + IR(value)Regis

20、ter Offset Rn, Rm - Rn + RmScaled Register Offset , Rm, # - Rn + (Rm shift IR(value)Immediate Pre-indexed Rn, #! - Rn + IR(value) Rn - Register Pre-indexed Rn, Rm! - Rn + Rm Rn - Scaled Register Pre-indexed Rn, Rm, #! - Rn + (Rm shift IR(value) Rn - Immediate Post-indexed Rn, # - Rn Rn - Rn + IR(val

21、ue)Register Post-indexed Rn, Rm - Rn Rn - Rn + RmScaled Register Post-indexed Rn, Rm, # - Rn Rn - Rn + Rm shift IR(value)Assemble Language of ARM26o 3.2.5 多寄存器尋址采用多寄存器尋址方式,一條指令可以完成多個寄存器值的傳送。這種尋址方式可以用一條指令完成傳送最多16個通用寄存器的值。以下指令:LDMIA R13,R1,R2,R3,R4 ;R1R13;R2R134;R3R138;R4R1312n該指令的后綴IA表示在每次執(zhí)行完加載/存儲操作后

22、,Rn按字長度增加,因此,指令可將連續(xù)存儲單元的值傳送到R1R4。n指令中寄存器和內(nèi)存單元的對應(yīng)關(guān)系:編號低的寄存器編號低的寄存器對應(yīng)于內(nèi)存中低地址單元,編號高的寄存器對應(yīng)于內(nèi)存對應(yīng)于內(nèi)存中低地址單元,編號高的寄存器對應(yīng)于內(nèi)存中高地址單元。中高地址單元?;?qū)懗桑夯驅(qū)懗桑篖DMIA R13,R1-R4 Assemble Language of ARM27o 3.2.6 堆棧尋址n 堆棧是一種數(shù)據(jù)結(jié)構(gòu),按先進(jìn)后出(First In Last Out,F(xiàn)ILO)的方式工作,使用一個稱作堆棧指針的專用寄存器指示當(dāng)前的操作位置,堆棧指針總是指向棧頂。n 當(dāng)堆棧指針指向最后壓入堆棧的數(shù)據(jù)時,稱為滿堆棧滿堆

23、棧(Full Stack),而當(dāng)堆棧指針指向下一個將要放入數(shù)據(jù)的空位置時,稱為空堆??斩褩#‥mpty Stack)。Assemble Language of ARM28n同時,根據(jù)堆棧的生成方式,又可以分為遞增堆棧遞增堆棧(Ascending Stack)和遞減堆棧遞減堆棧(Decending Stack),當(dāng)堆棧由低地址向高地址生成時,稱為遞增堆棧,當(dāng)堆棧由高地址向低地址生成時,稱為遞減堆棧。這樣就有四種類型的堆棧工作方式,ARM微處理器支持這四種類型的堆棧工作方式,即:o 滿遞增堆棧 (FA):堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生成。o 滿遞減堆棧(FD) :堆棧指針指向最后壓入的數(shù)據(jù),且由高地址向低地址生成。o 空遞增堆棧(EA) :堆棧指針指向下一個將要放入數(shù)據(jù)的空位置,且由低地址向高地址生成。o 空遞減堆棧(ED) :堆棧指針指向下一個將要放入數(shù)據(jù)的空位置,且由高地址向低地址生成。參考教材P.53Assemble Language of ARM29o 3.2.7 塊拷貝尋址n多寄存器傳送指令用于將一塊數(shù)據(jù)從存儲器的某一位置拷貝到另一位置。 如:STMIA

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論