嵌入式系統(tǒng)原理(5)_第1頁
嵌入式系統(tǒng)原理(5)_第2頁
嵌入式系統(tǒng)原理(5)_第3頁
嵌入式系統(tǒng)原理(5)_第4頁
嵌入式系統(tǒng)原理(5)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

嵌入式系統(tǒng)原理2023/11/291寄存器移位尋址LSR:邏輯右移,空出的最高有效位用0填充。LSL:邏輯左移,空出的最低有效位用0填充。ASL:算術(shù)左移,由于左移空出的有效位用0填充.ASR:算術(shù)右移,算術(shù)移位的對(duì)象是帶符號(hào)數(shù),移位過程中必須保持操作數(shù)的符號(hào)不變。如果源操作數(shù)是正數(shù),空出的最高有效位用0填充,如果是負(fù)數(shù)用1填充。ROR:循環(huán)右移,移出的字的最低有效位依次填入空出的最高有效位。RRX:帶擴(kuò)展的循環(huán)右移。將寄存器的內(nèi)容循環(huán)右移1位,空位用原來C標(biāo)志位填充。寄存器移位尋址

ADDR3,R2,R1,LSL#2;R3←R2+4*R1ADDR3,R2,R1,LSLR4;R3←R2+R1*2**R4注意:該尋址方式只能用于當(dāng)指令中最后一個(gè)操作數(shù)位寄存器尋址時(shí)使用,如下面的指令則是錯(cuò)誤的:Addr3,r2,lsl#2,r12023/11/292ARM匯編指令格式ARM指令的典型編碼格式:{cond}:指令執(zhí)行的條件編碼,如EQ、NE等。<opcode>:指令操作符編碼,如LDR、STR等。{S}:決定指令的執(zhí)行是否影響CPRS的值。<Rn>:包含第一個(gè)源操作數(shù)的寄存器編碼。<Rd>:目標(biāo)寄存器編碼。<shifter_operand>:第二個(gè)源操作數(shù)。

ARM指令語法格式中,<>中的內(nèi)容是必需的,而{}中的內(nèi)容是可選的。2023/11/293ARM指令的條件碼域

大多ARM指令都可以條件執(zhí)行,也就是根據(jù)CPSR中條件碼的狀態(tài)決定是否執(zhí)行該指令。只有在CPSR中的條件碼標(biāo)志滿足指定的條件時(shí),帶條件碼的指令才可以執(zhí)行,否則指令被忽略(相當(dāng)于一條空操作NOP指令)。每一條ARM指令編碼中包含4位的條件碼,位于指令編碼的最高4位[31:28]。條件碼共有16種,每種條件碼可用兩個(gè)字符(條件碼的助記符)表示,這兩個(gè)字符可以添加在指令助記符的后面和指令同時(shí)使用。在16種條件標(biāo)志碼中,只有15種可以使用,第16種(1111)為系統(tǒng)保留,暫時(shí)不能使用。

2023/11/294ARM指令的條件碼域ARM指令的條件域2023/11/2953.3ARM指令集ARM指令集的種類跳轉(zhuǎn)指令數(shù)據(jù)處理指令乘法指令與乘加指令(不講)程序狀態(tài)寄存器訪問指令加載/存儲(chǔ)指令批量數(shù)據(jù)加載/存儲(chǔ)指令數(shù)據(jù)交換指令移位指令協(xié)處理器指令(不講)異常產(chǎn)生指令2023/11/2963.3ARM指令集-跳轉(zhuǎn)指令

跳轉(zhuǎn)指令用于實(shí)現(xiàn)程序流程的跳轉(zhuǎn),在ARM程序中有兩種方法可以實(shí)現(xiàn)程序流程的跳轉(zhuǎn):使用專門的跳轉(zhuǎn)指令;直接向程序計(jì)數(shù)器PC寫入跳轉(zhuǎn)地址值;

四種跳轉(zhuǎn)指令B跳轉(zhuǎn)指令(前后32MB的地址空間)。B指令編碼中的跳轉(zhuǎn)地址值是相對(duì)當(dāng)前PC值的一個(gè)偏移量,經(jīng)匯編器計(jì)算得到跳轉(zhuǎn)的絕對(duì)地址。BL帶返回的跳轉(zhuǎn)指令。BL指令在執(zhí)行跳轉(zhuǎn)的同時(shí)將轉(zhuǎn)移指令的下一條指令的地址復(fù)制到當(dāng)前處理器模式下的鏈接寄存器LR中,這一般用于子程序的調(diào)用和返回。BLX帶返回和狀態(tài)切換的跳轉(zhuǎn)指令BX帶狀態(tài)切換的跳轉(zhuǎn)指令例:1.CMPR1,#0BEQLabel2.BX

R7

;跳轉(zhuǎn)到R7的值指定的地址,并根據(jù)R7的最低位切換處理器狀態(tài)2023/11/2973.3ARM指令集-數(shù)據(jù)處理指令數(shù)據(jù)處理指令分類數(shù)據(jù)傳送指令比較指令算術(shù)邏輯運(yùn)算指令數(shù)據(jù)傳送指令MOV數(shù)據(jù)傳送指令MVN數(shù)據(jù)取反傳送指令例:MOVR1,R0;將寄存器R0的值傳送到寄存器R1MOVR1,R0,LSL#3;將寄存器R0的值左移3位后傳送;到R1。MVNR0,#0;將立即數(shù)0取反傳送到寄存器

R0中,完成后

;R0=-1。MOVSR2,#0x10;R2=#0x10,并影響標(biāo)志位。MVNSR2,#0xFF;R2=0Xffff00,并影響標(biāo)志位。第三周到此2023/11/2983.3ARM指令集-數(shù)據(jù)處理指令比較指令CMP比較指令CMN反值比較指令TST位測(cè)試指令TEQ相等測(cè)試指令例:CMPR1,#100;將寄存器R1的值與立即數(shù)100相減,并根;據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位。CMNR1,R0;將寄存器R1的值與寄存器R0的值相加,并根;據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位。TSTR1,#0xffe;將寄存器R1的值與立即數(shù)0xffe按位與,;并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位。TEQR1,R2;將寄存器R1的值與寄存器R2的值按位異或,并;根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位,比較R1與R2是否;相等

2023/11/2993.3ARM指令集-數(shù)據(jù)處理指令

算術(shù)運(yùn)算指令

ADD加法指令A(yù)DC帶進(jìn)位加法指令,加上CPSR中的C條件標(biāo)志位的值SUB減法指令SBC帶借位減法指令RSB逆向減法指令RSC帶借位的逆向減法指令例:ADDR0,R1,#256;R0=R1+256SUBR0,R1,R2;R0=R1-R2RSBR0,R2,R3,LSL#1;R0=(R3<<1)-R2SUBSR0,R0,R2SBCR1,R1,R3

;用SBC實(shí)現(xiàn)64位減法,(R1,R0)=(R1,R0)-;(R3,R2)2023/11/29103.3ARM指令集-數(shù)據(jù)處理指令邏輯運(yùn)算指令A(yù)ND按位與指令ORR按位或指令EOR按位異或指令BIC位清除指令例:ANDR0,R0,#3;該指令保持R0的0、1位,其余位清零ORRR0,R0,#3;該指令設(shè)置R0的0、1位,其余位保持不變。EORR0,R0,#3;該指令反轉(zhuǎn)R0的0、1位,其余位保持不變BICR0,R0,#0x1F;該指令清除R0中低5位,其余的位保持不變。

2023/11/29113.3ARM指令集-程序狀態(tài)寄存器訪問指令

程序狀態(tài)寄存器訪問指令包括以下2條:MRS程序狀態(tài)寄存器到通用寄存器的數(shù)據(jù)傳送指令MSR通用寄存器到程序狀態(tài)寄存器的數(shù)據(jù)傳送指令例:MRSR0,CPSR;傳送CPSR的內(nèi)容到R0MRSR0,SPSR;傳送SPSR的內(nèi)容到R0MSRCPSR,R0;傳送R0的內(nèi)容到CPSRMSRSPSR,R0;傳送R0的內(nèi)容到SPSRMSRCPSR_c,R0;傳送R0的內(nèi)容到SPSR,但僅僅;修改CPSR中的控制位域

PSR的控制域:位[31:24]為條件標(biāo)志位域,用f表示;位[23:16]為狀態(tài)位域,用s表示;位[15:8]為擴(kuò)展位域,用x表示;位[7:0]為控制位域,用c表示;

2023/11/29123.3ARM指令集-加載/存儲(chǔ)指令A(yù)RM微處理器支持加載/存儲(chǔ)指令用于在寄存器和存儲(chǔ)器之間傳送數(shù)據(jù)LDR字?jǐn)?shù)據(jù)加載指令LDRB字節(jié)數(shù)據(jù)加載指令LDRH半字?jǐn)?shù)據(jù)加載指令STR字?jǐn)?shù)據(jù)存儲(chǔ)指令STRB字節(jié)數(shù)據(jù)存儲(chǔ)指令STRH半字?jǐn)?shù)據(jù)存儲(chǔ)指令例:LDRR0,[R1,R2];將存儲(chǔ)器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0LDRR0,[R1,R2]?。粚⒋鎯?chǔ)器地址為R1+R2的字?jǐn)?shù)據(jù)讀寄存器R0,并將新地址R1+R2寫入R1。STRR0,[R1],#8;將R0中的字?jǐn)?shù)據(jù)寫入以R1為地址的存儲(chǔ)器中,并將新地址R1+8寫入R1。STRR0,[R1,#8];將R0中的字?jǐn)?shù)據(jù)寫入以R1+8為地址的存儲(chǔ)器中。2023/11/29133.3ARM指令集-批量數(shù)據(jù)加載/存儲(chǔ)指令

ARM微處理器所支持批量數(shù)據(jù)加載/存儲(chǔ)指令可以一次在一片連續(xù)的存儲(chǔ)器單元和多個(gè)寄存器之間傳送數(shù)據(jù)。LDM批量數(shù)據(jù)加載指令STM批量數(shù)據(jù)存儲(chǔ)指令例:STMFDR13!,{R0,R4-R12,LR};將寄存器列表中的寄存器(R0,R4到R12,LR)存入堆棧。LDMFDR13!,{R0,R4-R12,PC};將堆棧內(nèi)容恢復(fù)到寄存器(R0,R4到R12,LR賦值給PC)。注意:IA每次傳送后地址加1;IB每次傳送前地址加1;DA每次傳送后地址減

1;DB每次傳送前地址減1;FD滿遞減堆棧;ED空遞減堆棧;FA滿遞增堆棧;EA空遞增堆棧;

2023/11/29143.3ARM指令集-數(shù)據(jù)交換指令

ARM微處理器所支持的數(shù)據(jù)交換指令能在存儲(chǔ)器和寄存器之間交換數(shù)據(jù)。SWP字?jǐn)?shù)據(jù)交換指令SWPB字節(jié)數(shù)據(jù)交換指令

例:SWPR0,R1,[R2];將R2所指向的存儲(chǔ)器中的字?jǐn)?shù)據(jù)送;到R0,同時(shí)將R1中的字?jǐn)?shù)據(jù)傳送到R2所指向的存儲(chǔ)單元。SWPR0,R0,[R1];該指令完成將R1所指向的存儲(chǔ)器中;的字?jǐn)?shù)據(jù)與R0中的字?jǐn)?shù)據(jù)交換。SWPBR0,R1,[R2];將R2所指向的存儲(chǔ)器中的字節(jié)數(shù);據(jù)傳送到R0,R0的高24位清零,同時(shí)將R1中;的低8位數(shù)據(jù)傳送到R2所指向的存儲(chǔ)單元。SWPBR0,R0,[R1];該指令完成將R1所指向的存儲(chǔ)器;中的字節(jié)數(shù)據(jù)與R0中的低8位數(shù)據(jù)交換。2023/11/29153.3ARM指令集-協(xié)處理器指令

ARM微處理器可支持多達(dá)16個(gè)協(xié)處理器,用于各種協(xié)處理操作,在程序執(zhí)行的過程中,每個(gè)協(xié)處理器只執(zhí)行針對(duì)自身的協(xié)處理指令。CDP協(xié)處理器數(shù)操作指令;用于ARM處理器初始化ARM協(xié)處理器的數(shù)據(jù)處理操作。

LDC協(xié)處理器數(shù)據(jù)加載指令;用于ARM協(xié)處理器寄存器和內(nèi)存單元間的數(shù)據(jù)傳送。STC協(xié)處理器數(shù)據(jù)存儲(chǔ)指令;用于ARM協(xié)處理器寄存器和內(nèi)存單元間的數(shù)據(jù)傳送。MCRARM處理器寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳送指令。MRC協(xié)處理器寄存器到ARM處理器寄存器的數(shù)據(jù)傳送指令。2023/11/29163.3ARM指令集-異常產(chǎn)生指令A(yù)RM微處理器所支持的異常指令有如下兩條:

SWI軟件中斷指令,用來實(shí)現(xiàn)在用戶模式下對(duì)操作系統(tǒng)中特權(quán)模式的程序調(diào)用。BKPT斷點(diǎn)中斷指令,主要用于產(chǎn)生軟件斷點(diǎn),供調(diào)試程序用。

例:SWI0x02;該指令調(diào)用操作系統(tǒng)編號(hào)位02

;的系統(tǒng)例程。B

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論