2014-3-嵌入式系統(tǒng)體系結(jié)構(gòu)與開發(fā)-指令系統(tǒng)資料_第1頁
2014-3-嵌入式系統(tǒng)體系結(jié)構(gòu)與開發(fā)-指令系統(tǒng)資料_第2頁
2014-3-嵌入式系統(tǒng)體系結(jié)構(gòu)與開發(fā)-指令系統(tǒng)資料_第3頁
2014-3-嵌入式系統(tǒng)體系結(jié)構(gòu)與開發(fā)-指令系統(tǒng)資料_第4頁
2014-3-嵌入式系統(tǒng)體系結(jié)構(gòu)與開發(fā)-指令系統(tǒng)資料_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

嵌入式系統(tǒng)體系構(gòu)造與開發(fā)

嵌入式處理器ARM指令系統(tǒng)ARM體系的構(gòu)造版本ARM體系的構(gòu)造版本ARM體系構(gòu)造共有6個版本,版本號1-6指令集功能不斷擴(kuò)大特定功能:T——支持Thumb指令集M——支持長乘法指令E——支持增加型DSP指令J——javaSIMD——ARM媒體功能擴(kuò)展ARM微處理器工作模式與存放器ARM微處理器指令集ARMTHUMBARM微處理器工作模式用戶模式特權(quán)模式〔系統(tǒng)模式與特殊模式〕模式切換存放器組織存放器定義模式與存放器ARM與THUMB從編程的角度看,ARM微處理器有兩種指令集,可在兩種指令集之間切換:ARM指令集,處理器執(zhí)行32位的字對齊的ARM指令;Thumb指令集,處理器執(zhí)行16位的、半字對齊Thumb指令。THUMB指令是ARM指令的子集可以相互調(diào)用,只要遵循確定的調(diào)用規(guī)章Thumb指令與ARM指令的時間效率和空間效率關(guān)系為:存儲空間約為ARM代碼的60%~70%指令數(shù)比ARM代碼多約30%~40%存儲器為32位時,ARM代碼比Thumb代碼快約40%存儲器為16位時,Thumb比ARM代碼快約40~50%使用Thumb代碼,存儲器的功耗會降低約30%ARM與THUMB指令指令切換方法ARM指令集和Thumb指令集均有切換處理器狀態(tài)的指令,在開頭執(zhí)行代碼時,應(yīng)當(dāng)處于ARM指令集指令集切換分狀態(tài)位設(shè)置和特殊處理兩種進(jìn)入Thumb指令當(dāng)操作數(shù)存放器的狀態(tài)位〔位0〕為1時,承受執(zhí)行BX指令的方法,使微處理器從ARM指令集切換到Thumb指令集當(dāng)處理器處于Thumb指令時,發(fā)生特殊〔如IRQ、FIQ、Undef、Abort、SWI等〕,則特殊處理返回時,自動切換到Thumb指令。切換到ARM指令當(dāng)操作數(shù)存放器的狀態(tài)位〔位0〕為0時,執(zhí)行BX指令時可以使微處理器從Thumb切換到ARM在處理器進(jìn)展特殊處理時,把PC指針放入特殊模式鏈接存放器中,并從特殊向量地址開頭執(zhí)行程序,也可以使處理器切換到ARM。ARM微處理器運(yùn)行模式User模式用戶程序不能訪問有些受疼惜的資源只能通過特殊的形式來轉(zhuǎn)變CPU的當(dāng)前運(yùn)行模式特權(quán)模式可以存取系統(tǒng)中的任何資源System模式系統(tǒng)模式與User模式的運(yùn)行環(huán)境一樣但是它可以不受任何限制的訪問任何資源該模式主要用于運(yùn)行系統(tǒng)中的一些特權(quán)任務(wù)FIQ模式IRQ模式Supervisor模式Abort模式Undefined模式特殊模式:主要是在外部中斷或者程序執(zhí)行非法操作時會觸發(fā)用戶模式處理器模式用戶模式。usr:ARM處理器正常的程序執(zhí)行狀態(tài)特權(quán)模式〔特殊模式〕fiq:用于高速數(shù)據(jù)傳輸或通道處理irq:用于通用的中斷處理svc:操作系統(tǒng)使用的疼惜模式abt:用于虛擬存儲及存儲疼惜und:當(dāng)消逝未定義指令終止時進(jìn)入該模式sys:運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)ARM微處理器運(yùn)行模式ARM處理器運(yùn)行模式圖ARM微處理器的指令系統(tǒng)

ARM微處理器的指令集是加載/存儲型的指令集僅能處理存放器中的數(shù)據(jù),處理結(jié)果都要放回存放器中對系統(tǒng)存儲器的訪問則需要通過特地的加載/存儲指令來完成。ARM微處理器的指令集可以分為六大類跳轉(zhuǎn)指令數(shù)據(jù)處理指令程序狀態(tài)存放器〔PSR〕處理指令加載/存儲指令協(xié)處理器指令和特殊產(chǎn)生指令OpCode指令助記符Cond:執(zhí)行條件S:是否影響狀態(tài)存放器Rd:目標(biāo)存放器Rn:第1個操作數(shù)存放器Operand2:第2個操作數(shù)ARM指令根本語法格式<Opcode>{<Cond>}{S}<Rd><Rn>{,<Operand2>}例子LDR R0,[R1] ;無條件執(zhí)行BEQ LOOP ;等于條件ADDSR2,R2,#1 ;影響狀態(tài)位,R2<-R2+1指令編碼格式ARM指令編碼構(gòu)造——條件域ARM指令編碼的條件域當(dāng)處理器工作在ARM狀態(tài)時,幾乎全部的指令均依據(jù)CPSR中條件碼的狀態(tài)和指令的條件域有條件的執(zhí)行。當(dāng)指令的執(zhí)行條件滿足時,指令被執(zhí)行,否則指令被無視。每一條ARM指令包含4位的條件碼,位于指令的最高4位[31:28]。條件碼共有16種,每種條件碼可用兩個字符表示,這兩個字符可以添加在指令助記符的后面和指令同時使用。例如,跳轉(zhuǎn)指令B可以加上后綴EQ變?yōu)锽EQ表示“相等則跳轉(zhuǎn)”,即當(dāng)CPSR中的Z標(biāo)志置位時發(fā)生跳轉(zhuǎn)。ARM指令編碼的條件域條件編碼條件碼后綴標(biāo)志含義0000EQZ置位相等0001NEZ清零不相等0010CSC置位無符號數(shù)大于或等于0011CCC清零無符號數(shù)小于0100MIN置位負(fù)數(shù)0101PLN清零正數(shù)或零0110VSV置位溢出0111VCV清零未溢出ARM指令編碼的條件域條件編碼條件碼后綴標(biāo)志含義1001LSC清零Z置位無符號數(shù)小于或等于1010GEN等于V帶符號數(shù)大于或等于1011LTN不等于V帶符號數(shù)小于1100GTZ清零且(N等于V)帶符號數(shù)大于1101LEZ置位或(N不等于V)帶符號數(shù)小于或等于1110AL忽略無條件執(zhí)行ARM微處理器指令表-1助記符指令功能描述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)指令A(yù)RM微處理器指令表-2助記符指令功能描述CDP協(xié)處理器數(shù)據(jù)操作指令CMN比較反值指令CMP比較指令EOR異或指令LDC存儲器到協(xié)處理器的數(shù)據(jù)傳輸指令LDM加載多個寄存器指令LDR存儲器到寄存器的數(shù)據(jù)傳輸指令MCRARM寄存器到協(xié)處理器寄存器數(shù)據(jù)傳輸ARM微處理器指令表-3助記符指令功能描述MLA乘加運(yùn)算指令MOV數(shù)據(jù)傳送指令MRC協(xié)處理器寄存器到ARM寄存器數(shù)據(jù)傳輸MRS傳送CPSR或SPSR的內(nèi)容到通用寄存器MSR傳送通用寄存器到CPSR或SPSR的指令MUL32位乘法指令MLA32位乘加指令MVN數(shù)據(jù)取反傳送指令A(yù)RM微處理器指令表-4助記符指令功能描述ORR邏輯或指令RSB逆向減法指令RSC帶借位的逆向減法指令SBC帶借位減法指令STC協(xié)處理器寄存器寫入存儲器指令STM批量內(nèi)存字寫入指令STR寄存器到存儲器的數(shù)據(jù)傳輸指令SUB減法指令A(yù)RM微處理器指令表-5助記符指令功能描述SWI軟件中斷指令SWP交換指令TEQ相等測試指令TST位測試指令A(yù)RM尋址方式ARM尋址方式馬上尋址存放器尋址存放器間接尋址基址變址尋址多存放器尋址相對尋址堆棧尋址ARM指令的尋址方式ARM指令系統(tǒng)支持如下幾種常見的尋址方式:馬上尋址存放器尋址存放器間接尋址基址變址尋址多存放器尋址相對尋址堆棧尋址ARM指令的尋址方式-馬上尋址馬上尋址操作數(shù)本身就在指令中給出,只要取出指令也就取到了操作數(shù)。這個操作數(shù)被稱為馬上數(shù)。例如以下指令:ADDR0,R0,#1 /*R0←R0+1*/ADDR0,R0,#0x3f /*R0←R0+0x3f*/馬上操作數(shù)在以上兩條指令中,其次個源操作數(shù)即為馬上數(shù),要求以“?!睘榍熬Y,對于以十六進(jìn)制表示的馬上數(shù),還要求在“?!焙蠹由稀?x”。ARM指令的尋址方式-存放器尋址存放器尋址利用存放器中的數(shù)值作為操作數(shù),這種尋址方式是各類微處理器常常承受的一種方式,也是一種執(zhí)行效率較高的尋址方式。以下指令: ADD R0,R1,R2 /*R0←R1+R2*/該指令的執(zhí)行效果是將存放器R1和R2的內(nèi)容相加,其結(jié)果存放在存放器R0中。ARM指令的尋址方式-存放器間接尋址存放器間接尋址以存放器中的值作為操作數(shù)的地址,而操作數(shù)本身存放在存儲器中。例如以下指令:ADDR0,R1,[R2] /*R0←R1+[R2]*/LDR R0,[R1] /*R0←[R1]*/STR R0,[R1] /*[R1]←R0*/第一條指令中,以存放器R2的值作為操作數(shù)的地址,在存儲器中取得一個操作數(shù)后與R1相加,結(jié)果存入存放器R0中;其次條指令將以R1的值為地址的存儲器中的數(shù)據(jù)傳送到R0中。第三條指令將R0的值傳送到以R1的值為地址的存儲器中。ARM指令的尋址方式-基址變址尋址

基址變址尋址將基址存放器的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個操作數(shù)的有效地址。變址尋址方式常用于訪問某基地址四周的地址單元。承受變址尋址方式的指令常見有以下幾種形式,如下所示: LDRR0,[R1,#4] ;R0←[R1+4] LDRR0,[R1,#4]! ;R0←[R1+4]、R1←R1+4 LDRR0,[R1],#4 ;R0←[R1]、R1←R1+4 LDRR0,[R1,R2] ;R0←[R1+R2]在第一條指令中,將存放器R1的內(nèi)容加上4形成操作數(shù)的有效地址,從而取得操作數(shù)存入存放器R0中。在其次條指令中,將存放器R1的內(nèi)容加上4形成操作數(shù)的有效地址,從而取得操作數(shù)存入存放器R0中,然后,R1的內(nèi)容自增4個字節(jié)。在第三條指令中,以存放器R1的內(nèi)容作為操作數(shù)的有效地址,從而取得操作數(shù)存入存放器R0中,然后,R1的內(nèi)容自增4個字節(jié)。在第四條指令中,將存放器R1的內(nèi)容加上存放器R2的內(nèi)容形成操作數(shù)的有效地址,從而取得操作數(shù)存入存放器R0中。ARM指令的尋址方式-多存放器尋址多存放器尋址方式,一條指令可以完成多個存放器值的傳送。這種尋址方式可以用一條指令完成傳送最多16個通用存放器的值。以下指令: LDMIAR0,{R1,R2,R3,R4} ;R1←[R0] ;R2←[R0+4] ;R3←[R0+8] ;R4←[R0+12]該指令的后綴IA表示在每次執(zhí)行完加載/存儲操作后,R0按字長度增加,因此,指令可將連續(xù)存儲單元的值傳送到R1~R4。STMIAR0!,{R1-R4};[R0]←R1 ;[R0+4]←R2 ;[R0+8]←R3 ;[R0+12]←R4ARM指令的尋址方式-相對尋址

與基址變址尋址方式相類似,相對尋址以程序計(jì)數(shù)器PC的當(dāng)前值為基地址,指令中的地址標(biāo)號作為偏移量,將兩者相加之后得到操作數(shù)的有效地址。以下程序段完成子程序的調(diào)用和返回,跳轉(zhuǎn)指令BL承受了相對尋址方式:

BLNEXT ;跳轉(zhuǎn)到子程序NEXT處執(zhí)行 …… NEXT …… MOV PC,LR ;從子程序返回ARM指令的尋址方式-堆棧尋址

堆棧是一種數(shù)據(jù)構(gòu)造,按先進(jìn)后出〔FirstInLastOut,F(xiàn)ILO〕的方式工作,使用一個稱作堆棧指針的專用存放器指示當(dāng)前的操作位置,堆棧指針總是指向棧頂。當(dāng)堆棧指針指向最終壓入堆棧的數(shù)據(jù)時,稱為滿堆?!睩ullStack〕,而當(dāng)堆棧指針指向下一個將要放入數(shù)據(jù)的空位置時,稱為空堆?!睧mptyStack〕。ARM指令的尋址方式-堆棧尋址堆棧的生成方式:遞增堆?!睞scendingStack〕當(dāng)堆棧由低地址向高地址生成時,稱為遞增堆棧;遞減堆?!睤ecendingStack〕,當(dāng)堆棧由高地址向低地址生成時,稱為遞減堆棧。四種類型的堆棧工作方式:滿遞增堆棧:堆棧指針指向最終壓入的數(shù)據(jù),且由低地址向高地址生成。滿遞減堆棧:堆棧指針指向最終壓入的數(shù)據(jù),且由高地址向低地址生成。空遞增堆棧:堆棧指針指向下一個將要放入數(shù)據(jù)的空位置,且由低地址向高地址生成??者f減堆棧:堆棧指針指向下一個將要放入數(shù)據(jù)的空位置,且由高地址向低地址生成ARM偽指令A(yù)RM偽指令數(shù)據(jù)定義偽指令把握偽指令地址加載偽指令聲明引用段域偽指令A(yù)RM的偽指令定義數(shù)據(jù)偽指令DCB安排連續(xù)的字節(jié)存儲單元,并設(shè)置初值DCW/DCWU安排連續(xù)的半字存儲單元,并設(shè)置初值DCD/DCDU安排連續(xù)的字存儲單元,并設(shè)置初值DCQ/DCQU安排8字節(jié)為塊存儲單元,并設(shè)置初值DCFS/DCFSU為單精度浮點(diǎn)數(shù)安排連續(xù)存儲單元,并設(shè)置初值DCFD/DCFDU為雙精度浮點(diǎn)數(shù)安排連續(xù)的字存儲單元,并設(shè)置初值SPACE安排一塊連續(xù)的存儲單元FIELD安排一塊連續(xù)的存儲單元MAP定義一個構(gòu)造化的內(nèi)存表的首地址ARM的偽指令把握偽指令I(lǐng)F指令序列ELSE指令序列ENDIF條件編譯指令WHILEWEND條件循環(huán)執(zhí)行指令地址加載偽指令A(yù)DR 小范圍的地址讀取ADRL 中范圍的地址讀取LDR 大范圍的地址讀取NOPARM的偽指令聲明引用EQU定義字符名稱EXPORT聲明全局標(biāo)號IMPORT在其他源文件中定義標(biāo)號EXTERN在其他源文件中定義標(biāo)號GET(或Include)包含源文件指令I(lǐng)NCBIN包含目標(biāo)文件和數(shù)據(jù)文件包指令RN定義存

溫馨提示

  • 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

提交評論