第3章 ARM指令系統(tǒng)_第1頁(yè)
第3章 ARM指令系統(tǒng)_第2頁(yè)
第3章 ARM指令系統(tǒng)_第3頁(yè)
第3章 ARM指令系統(tǒng)_第4頁(yè)
第3章 ARM指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章ARM指令系統(tǒng)

本章以流行ARM處理器為例介紹嵌入式微處理器的指令系統(tǒng),主要介紹ARM微處理器的尋址方式以及ARM指令集、Thumb和Thumb-2指令集。3.1ARM指令分類(lèi)及指令格式ARM指令集特點(diǎn):

ARM使用標(biāo)準(zhǔn)的、固定長(zhǎng)度的32位指令格式所有ARM指令都使用4位的條件編碼來(lái)決定指令是否執(zhí)行,以解決指令執(zhí)行的條件判斷ARM微處理器的指令集是加載/存儲(chǔ)型的,即指令集僅能處理寄存器中的數(shù)據(jù)返回ARM指令分類(lèi)指令分類(lèi)(6類(lèi))

ARM微處理器的指令集可以分為分支指令、數(shù)據(jù)處理指令、程序狀態(tài)寄存器(CPSR)處理指令、加載/存儲(chǔ)指令、協(xié)處理器指令和異常產(chǎn)生指令。

當(dāng)處理器工作在ARM狀態(tài)時(shí),幾乎所有的指令均根據(jù)CPSR中條件碼的狀態(tài)和指令的條件域有條件的執(zhí)行。當(dāng)指令的執(zhí)行條件滿(mǎn)足時(shí),指令被執(zhí)行,否則指令被忽略。每一條ARM指令包含4位的條件碼,位于指令的最高4位[31:28]。

詳見(jiàn)下表指令中的條件域(1)指令中的條件域(2)條件碼助記符后綴標(biāo)志含義0000EQZ置位相等0001NEZ清零不相等0010CSC置位無(wú)符號(hào)數(shù)大于或等于0011CCC清零無(wú)符號(hào)數(shù)小于0100MIN置位負(fù)數(shù)0101PLN清零正數(shù)或零0110VSV置位溢出0111VCV清零未溢出1000HIC置位Z清零無(wú)符號(hào)數(shù)大于1001LSC清零Z置位無(wú)符號(hào)數(shù)小于或等于1010GEN等于V帶符號(hào)數(shù)大于或等于1011LTN不等于V帶符號(hào)數(shù)小于1100GTZ清零且(N等于V)帶符號(hào)數(shù)大于1101LEZ置位或(N不等于V)帶符號(hào)數(shù)小于或等于1110AL忽略無(wú)條件執(zhí)行返回ARM指令中常用的操作數(shù)符號(hào)“#”—立即數(shù)符號(hào)“#”符號(hào)表示立即數(shù),其中后可以是二進(jìn)制數(shù),也可以是十進(jìn)制數(shù)或十六進(jìn)制數(shù)“0x”—十六進(jìn)制符號(hào)

“0x”后面的數(shù)據(jù)(每位可以是0-9,A-F)表示十六進(jìn)制數(shù),如0xFFFF“!”—更新基址寄存器符號(hào)表示指令在完成操作后最后的地址應(yīng)該寫(xiě)入基址寄存器“-”—指示寄存器列表范圍符號(hào)

表示多個(gè)連續(xù)寄存器,如R0-R7表示寄存器共8個(gè)寄存器:R0,R1,R2,R3,R4,R5,R6和R7。即含義“從…到…”

3.2ARM指令的尋址方式定義

所謂尋址方式就是處理器根據(jù)指令中給出的地址信息來(lái)尋找物理地址的方式。尋址方式種類(lèi)目前ARM指令系統(tǒng)支持如下7種常見(jiàn)的尋址方式。

立即尋址,寄存器尋址,寄存器間接尋址

基址加變址尋址,相對(duì)尋址,堆棧尋址

塊拷貝(多寄存器)尋址返回立即尋址

立即尋址也叫立即數(shù)尋址,操作數(shù)本身就在指令中給出,只要取出指令也就取到了操作數(shù),這個(gè)操作數(shù)被稱(chēng)為立即數(shù)。例如:MOVR0,#0x10FF66EDADCR0,R0,#1000立即數(shù)注意立即數(shù)前面的“?!焙x:R0←R0+1000+C返回寄存器尋址寄存器尋址是利用寄存器中的數(shù)值作為操作數(shù)尋址的一種方式,此方式執(zhí)行效率較高,經(jīng)常被各種處理器采用。例如:ADDR0,R1,R2 含義:R0←R1+R2寄存器間接尋址

寄存器間接尋址是以寄存器中的值作為操作數(shù)的地址,而操作數(shù)本身存放在存儲(chǔ)器中,用于間接接尋址的寄存器必須用[]括起來(lái)。例如:ADDR0,R1,[R2] LDRR0,[R1]

含義:R0←R1+[R2]含義:R0←[R1]基址加變址尋址

基址加變址尋址是將寄存器(該寄存器一般稱(chēng)作基址寄存器)的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個(gè)操作數(shù)的有效地址。例如:LDRR0,[R1,#4]LDRR0,[R1,#4]!LDRR0,[R1],#4 變址尋址方式常用于訪(fǎng)問(wèn)某基地址附近的地址單元。R0←[R1+4]R0←[R1+4]、R1←R1+4R0←[R1]、R1←R1+4相對(duì)尋址

相對(duì)尋址以程序計(jì)數(shù)器PC的當(dāng)前值為基地址,指令中的地址標(biāo)號(hào)作為偏移量,將兩者相加之后得到操作數(shù)的有效地址。例如:BL Subroutine_A;跳轉(zhuǎn)到子程序Subroutine_A處執(zhí)行…… Subroutine_A…… MOV PC,LR;從子程序返回0x2100000偏移量為0x0100PC0x2100100

PC執(zhí)行堆棧尋址

堆棧是一種數(shù)據(jù)結(jié)構(gòu),按先進(jìn)后出(FirstInLastOut,F(xiàn)ILO)的方式工作,使用堆棧指針專(zhuān)用寄存器指示當(dāng)前的操作位置,堆棧指針總是指向棧頂。堆棧的生成方式:滿(mǎn)遞增堆棧滿(mǎn)遞減堆??者f增堆棧空遞減堆棧當(dāng)堆棧指針指向最后壓入堆棧的數(shù)據(jù)時(shí),稱(chēng)為滿(mǎn)堆棧(FullStack)

當(dāng)堆棧由低地址向高地址生成時(shí),稱(chēng)為遞增堆棧

當(dāng)堆棧由高地址向低地址生成時(shí),稱(chēng)為遞減堆棧當(dāng)堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置時(shí),稱(chēng)為空堆棧(EmptyStack)

塊拷貝尋址塊拷貝尋址又稱(chēng)多寄存器尋址,采用多寄存器尋址方式,一條指令可以完成多個(gè)寄存器值的傳送。例如:LDMIAR0,{R1,R2,R3,R4} 后綴IA表示在每次執(zhí)行完加載/存儲(chǔ)操作后,R0按字長(zhǎng)度增加

;R1←[R0] ;R2←[R0+4] ;R3←[R0+8] ;R4←[R0+12]3.3ARM指令集程序狀態(tài)指令3.3.2分支指令33.3.3數(shù)據(jù)處理指令33.3.1加載/存儲(chǔ)指令3.3.4協(xié)處理器指令33.3.5異常中斷指令33.3.6返回3.3.1數(shù)據(jù)處理指令

數(shù)據(jù)傳送指令

比較指令

測(cè)試指令

加法指令

減法指令

邏輯運(yùn)算指令

乘法指令與乘加指令MOV—數(shù)據(jù)傳送指令如:MOV R1,R0

MVN—數(shù)據(jù)取反傳送指令如:MVN R0,#0

CMP—比較指令

CMP R1,R0CMN—反值比較指令

CMN R1,#100TEQ—相等測(cè)試指令

TEQ R1,R2TST—位測(cè)試指令

TST R1,#0xfe

ADD—加法指令

ADDR0,R1,#256

ADC—帶進(jìn)位加法指令

ADCR3,R7,R11

SUB—減法指令

SUB R0,R1,#256SBC—帶借位減法指令

SUBSR0,R1,R2

RSB—反向減法指令

RSB R0,R1,R2RSC—帶借位反向減法指令

RSC R0,R1,R2AND—邏輯與指令

ORR—邏輯或指令EOR—邏輯異或指令

BIC—位清除指令

返回3.3.2程序狀態(tài)指令

程序狀態(tài)指令用于在程序狀態(tài)寄存器和通用寄存器之間傳送數(shù)據(jù)。MRS—程序狀態(tài)寄存器到通用寄存器的數(shù)據(jù)傳送指令例如:MRSR0,CPSR;傳送CPSR的內(nèi)容到R0MSR—通用寄存器到程序狀態(tài)寄存器的數(shù)據(jù)傳送指令例如:MSRSPSR,R0;傳送R0的內(nèi)容到SPSR

返回3.3.3分支指令

分支指令用于實(shí)現(xiàn)程序流程的跳轉(zhuǎn),ARM指令集中的分支指令可以完成從當(dāng)前指令向前或向后的32MB的地址空間的跳轉(zhuǎn),包括4條指令:B轉(zhuǎn)移指令BL帶返回的轉(zhuǎn)移指令BLX帶返回且?guī)顟B(tài)切換的轉(zhuǎn)移指令BX帶狀態(tài)切換的轉(zhuǎn)移指令

點(diǎn)擊右圖示例返回3.3.4加載/存儲(chǔ)指令

加載指令用于將存儲(chǔ)器中的數(shù)據(jù)傳送到寄存器,存儲(chǔ)指令則完成相反的操作。加載存儲(chǔ)指令有三類(lèi):?jiǎn)我粩?shù)據(jù)加載/存儲(chǔ)批量數(shù)據(jù)加載/存儲(chǔ)數(shù)據(jù)交換指令返回3.3.5協(xié)處理器指令

ARM協(xié)處理器指令包括5條:CDP(協(xié)處理器數(shù)操作指令)LDC(協(xié)處理器數(shù)據(jù)加載指令)STC(協(xié)處理器數(shù)據(jù)存儲(chǔ)指令)MCR(ARM處理器寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳送指令)MRC(協(xié)處理器寄存器到ARM處理器寄存器的數(shù)據(jù)傳送指令)。返回3.3.6異常中斷指令

ARM微處理器所支持的異常中斷指令有如下兩條:SWI—軟件中斷指令

示例:SWI 0x01

;該指令調(diào)用操作系統(tǒng)編號(hào)為01的系統(tǒng)例程。BKPT—斷點(diǎn)中斷指令

示例:BKPT 0XF010支持16位的立即數(shù)

返回3.4Thumb指令集Thumb指令集指令編碼長(zhǎng)度為16位,但指令的操作數(shù)和指令地址仍是32位;Thumb指令集是ARM指令系統(tǒng)的一個(gè)子集;

Thumb指令集在保留32代碼優(yōu)勢(shì)的同時(shí),大大的節(jié)省了系統(tǒng)的存儲(chǔ)空間。

返回

Thumb指令集

返回

數(shù)據(jù)處理指令分支指令加載/存儲(chǔ)指令異常中斷指令SWI—軟件中斷指令BKPT—斷點(diǎn)異常中斷指令3.5Thumb-2指令集Thumb-2是一種新型混合指令集,融合了16位和32位指令,用于實(shí)現(xiàn)密度和性能的最佳平衡。返回3.6ARM處理器支持的偽指令

指令性指令:可以執(zhí)行的指令偽指令:是一種指示性語(yǔ)句,是不可執(zhí)行的指令。指令性語(yǔ)句匯編后由相應(yīng)的機(jī)器代碼所取代,指示匯編程序?yàn)閿?shù)據(jù)分配內(nèi)存空間或相應(yīng)寄存器,不產(chǎn)生任何機(jī)器代碼。

ARM處理器支持的偽指令有ADR、LDR和NOP三類(lèi)。返回ADR偽指令功能:將程序相對(duì)偏移地址或寄存器偏移地址加載到指定寄存器中。格式:ADR{cond}Rd,expr示例:

Mloop: MOVR1,#0xf9ADR R0,mloop ;將mloop對(duì)應(yīng)相對(duì)偏移地址傳送到R0中 LDR偽指令功能:將32位常量或一個(gè)地址加載到到指定寄存器中。格式:LDR{cond}Rd,=[expr|lable-expr] 示例:

LDRR1,=0x1234 ;R1=0x1234Mloop:LDRR2,=#

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論