ARM異常與尋址方式_第1頁
ARM異常與尋址方式_第2頁
ARM異常與尋址方式_第3頁
ARM異常與尋址方式_第4頁
ARM異常與尋址方式_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2C H A P T E RARM7體系結(jié)構(gòu)體系結(jié)構(gòu)第2章 ARM7體系結(jié)構(gòu)q2.4 異常q2.5 ARM尋址方式第2章 ARM7體系結(jié)構(gòu)q2.4 異常q2.5 ARM尋址方式2.4 異常n簡介 異常是指由內(nèi)部或外部產(chǎn)生的引起處理器處理的事件,只要正常的程序被暫時中止,處理器就進(jìn)入異常模式。例如響應(yīng)一個來自外設(shè)的中斷。在處理異常之前,ARM7TDMI內(nèi)核保存當(dāng)前的處理器狀態(tài)(CPSR-SPSR),這樣當(dāng)處理程序結(jié)束時可以恢復(fù)執(zhí)行原來的程序(SPSR-CPSR)。 同一時刻可能會出現(xiàn)多個異常,如果同時發(fā)生兩個或更多異常,那么將按照固定的順序來處理異常。 異常類型異常類型說明進(jìn)入時的模式正常地址高

2、向量地址復(fù)位有復(fù)位信號輸入管理0 x0000 00000 xFFFF 0000未定義指令執(zhí)行協(xié)處理器指令時,協(xié)處理器沒有響應(yīng)未定義0 x0000 00040 xFFFF 0004軟件中斷(SWI)執(zhí)行SWI指令時管理0 x0000 00080 xFFFF 0008預(yù)取中止(指令)取指時存儲器發(fā)生中止信號中止0 x0000 000C0 xFFFF 000C數(shù)據(jù)中止讀寫數(shù)據(jù)時存儲器發(fā)生中止中止0 x0000 00100 xFFFF 0010IRQIRQ引腳輸入異常信號中斷0 x0000 00180 xFFFF 0018FIQFIQ引腳輸入異常信號快中斷0 x0000 001C0 xFFFF 001

3、C注: 發(fā)生異常后進(jìn)入高端/正常向量由硬件配置決定。 當(dāng)多個異常同時發(fā)生時,一個固定的優(yōu)先級系統(tǒng)決定它們被處理的順序:2.4 異常n異常優(yōu)先級異常類型優(yōu)先級復(fù)位1(最高優(yōu)先級)數(shù)據(jù)中止2FIQ3IRQ4預(yù)取中止5未定義指令6SWI7(最低優(yōu)先級)優(yōu)先級降低異常入口/出口匯總異常類型返回指令之前的狀態(tài)備注ARM R14_xThumb R14_xBLMOV PC,R14PC+4PC+2 此處PC為BL,SWI,為定義的指令取指或預(yù)取指中止指令的地址軟件中斷 SWIMOVS PC,R14_svcPC+4PC+2未定義的指令MOVS PC,R14_undPC+4PC+2預(yù)取指中止SUBS PC,R14

4、_abt,#4PC+4PC+4FIQ(快中斷)SUBS PC,R14_fiq,#4PC+4PC+4此處PC為由于FIQ或IRQ占先而沒有被執(zhí)行的指令的地址IRQ(中斷)SUBS PC,R14_irq,#4PC+4PC+4數(shù)據(jù)中止SUBS PC,R14_ab t,#8PC+8PC+8此處PC為產(chǎn)生數(shù)據(jù)中止的裝載或保存指令的地址。 復(fù)位無復(fù)位時保存在R14_svc中的值不可預(yù)知。 注意:“MOVS PC,R14_svc”是指在管理模式執(zhí)行MOVS PC,R14指令。“MOVS PC,R14_und”、“SUBS PC,R14_abt,#4”等指令也是類似的。2.4 異常n異常的入口和出口處理 如果

5、異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復(fù)用戶寄存器并實現(xiàn)返回。SUB LR,LR,#4;計算返回地址STMFD SP!,R0-R3,LR;保存使用到的寄存器. . .LDMFD SP!,R0-R3,PC ;中斷返回中斷處理代碼的開始部分和退出部分 如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復(fù)用戶寄存器并實現(xiàn)返回。中斷處理代碼的開始部分和退出部分2.4 異常n異常的入口和出口處理SUB LR,LR,#4;計算返回地址STMFD SP!,R0-R3,LR;保存使用到的寄存器. . .LDMFD SP!,R0-R3,PC ;中斷

6、返回注意:中斷返回指令的寄存器列表(其中必須包括PC)后的“”符號表示這是一條特殊形式的指令。這條指令在從存儲器中裝載PC的同時(PC是最后恢復(fù)的),CPSR也得到恢復(fù)。這里使用的堆棧指針SP(R13)是屬于異常模式的寄存器,每個異常模式有自己的堆棧指針。這個堆棧指針應(yīng)必須在系統(tǒng)啟動時初始化。 2.4 異常n進(jìn)入異常在異常發(fā)生后,ARM7TDMI內(nèi)核會作以下工作:1.在適當(dāng)?shù)腖R中保存下一條指令的地址,當(dāng)異常入口來自:ARM狀態(tài),那么ARM7TDMI將當(dāng)前指令地址加4或加8復(fù)制(取決于異常的類型)到LR中;為Thumb狀態(tài),那么ARM7TDMI將當(dāng)前指令地址加2、4或加8 (取決于異常的類型)

7、復(fù)制到LR中;異常處理器程序不必確定狀態(tài)。2.4 異常n進(jìn)入異常在異常發(fā)生后,ARM7TDMI內(nèi)核會做以下工作:2.將CPSR復(fù)制到對應(yīng)的SPSR中;3. 將CPSR模式位強(qiáng)制設(shè)置為與異常類型相對應(yīng)的值;4.強(qiáng)制PC從相關(guān)的異常向量處取指。 ARM7TDMI內(nèi)核在中斷異常時置位中斷禁止標(biāo)志,這樣可以防止不受控制的異常嵌套。注:異常總是在ARM狀態(tài)中進(jìn)行處理。當(dāng)處理器處于Thumb狀態(tài)時發(fā)生了異常,在異常向量地址裝入PC時,會自動切換到ARM狀態(tài)。2.4 異常n進(jìn)入異常當(dāng)異常結(jié)束時,異常處理程序必須:1.將LR( R14 )中的值減去偏移量后存入PC,偏移量根據(jù)異常的類型而有所不同;2.將SPS

8、R的值復(fù)制回CPSR;3.清零在入口置位的中斷禁止標(biāo)志。注:恢復(fù)CPSR的動作會將T、F和I位自動恢復(fù)為異常發(fā)生前的值。2.4 異常n退出異常程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組圖示進(jìn)入異常過程1. 程序在系統(tǒng)模式下運(yùn)行用戶程序,假定當(dāng)前處理器狀態(tài)為Thumb狀態(tài)、允許IRQ中斷;2. 用戶程序運(yùn)行時發(fā)生IRQ中斷,硬件完成以下動作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0. . .? ? ? ?MODTFI. . .N Z C V置位I位(禁止IRQ中斷)清零T位(進(jìn)入ARM狀態(tài))設(shè)置MOD位,切換處理器模式至IRQ模式將下一條指令的地址存入

9、IRQ模式的LR寄存器將CPSR寄存器內(nèi)容存入IRQ模式的SPSR寄存器將跳轉(zhuǎn)地址存入PC,實現(xiàn)跳轉(zhuǎn)IRQ0?1. . .? ? ? ?BackAddrJumpAddrJumpSYS1?0. . .?“?”表示對該位不關(guān)心在異常處理結(jié)束后,異常處理程序完成以下動作:程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組圖示退出異常過程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0. . .? ? ? ?MODTFI. . .N Z C V將SPSR寄存器的值復(fù)制回CPSR寄存器;將LR寄存的值減去一個常量后復(fù)制到PC寄存器,跳轉(zhuǎn)到被中斷的用戶程序。IRQ0?1. .

10、.? ? ? ?BackAddrJumpAddrreturnSYS1?0. . .?SYS1?0. . .? ? ? ?BackAddr-4Jump“?”表示對該位不關(guān)心 快速中斷請求(FIQ)適用于對一個突發(fā)事件的快速響應(yīng),這得益于在ARM狀態(tài)中,快中斷模式有8個專用的寄存器可用來滿足寄存器保護(hù)的需要(這可以加速上下文切換的速度)。 不管異常入口是來自ARM狀態(tài)還是Thumb狀態(tài),F(xiàn)IQ處理程序都會通過執(zhí)行下面的指令從中斷返回:SUBS PC,R14_fiq,#4 在一個特權(quán)模式中,可以通過置位CPSR中的F位來禁止FIQ異常。2.4 異常n快速中斷請求 中斷請求(IRQ)異常是一個由nIR

11、Q輸入端的低電平所產(chǎn)生的正常中斷(在具體的芯片中,nIRQ由片內(nèi)外設(shè)拉低,nIRQ是內(nèi)核的一個信號,對用戶不可見)。IRQ的優(yōu)先級低于FIQ。對于FIQ序列它是被屏蔽的。任何時候在一個特權(quán)模式下,都可通過置位CPSR中的I 位來禁止IRQ。 不管異常入口是來自ARM狀態(tài)還是Thumb狀態(tài),IRQ處理程序都會通過執(zhí)行下面的指令從中斷返回:SUBS PC,R14_irq,#42.4 異常n中斷請求 中止發(fā)生在對存儲器的訪問不能完成時,中止包含兩種類型:預(yù)取中止 發(fā)生在指令預(yù)取過程中數(shù)據(jù)中止 發(fā)生在對數(shù)據(jù)訪問時2.4 異常n中止 當(dāng)發(fā)生預(yù)取中止時,ARM7TDMI內(nèi)核將預(yù)取的指令標(biāo)記為無效,但在指令

12、到達(dá)流水線的執(zhí)行階段時才進(jìn)入異常。如果指令在流水線中因為發(fā)生分支而沒有被執(zhí)行,中止將不會發(fā)生。 在處理中止的原因之后,不管處于哪種處理器操作狀態(tài),處理程序都會執(zhí)行下面的指令恢復(fù)PC和CPSR并重試被中止的指令: SUBS PC,R14_abt,#42.4 異常n中止預(yù)取指中止 當(dāng)發(fā)生數(shù)據(jù)中止后,根據(jù)產(chǎn)生數(shù)據(jù)中止的指令類型作出不同的處理:2.4 異常n中止數(shù)據(jù)中止數(shù)據(jù)轉(zhuǎn)移指令(LDR、STR)回寫到被修改的基址寄存器。中止處理程序必須注意這一點;交換指令(SWP)中止好像沒有被執(zhí)行過一樣(中止必須發(fā)生在SWP指令進(jìn)行讀訪問時) ; 在修復(fù)產(chǎn)生中止的原因后,不管處于哪種處理器操作狀態(tài),處理程序都必

13、須執(zhí)行下面的返回指令,重試被中止的指令 : SUBS PC,R14_abt,#82.4 異常n中止數(shù)據(jù)中止 使用軟件中斷(SWI)指令可以進(jìn)入管理模式,通常用于請求一個特定的管理函數(shù)。SWI處理程序通過執(zhí)行下面的指令返回:MOVS PC,R14_svc 這個動作恢復(fù)了PC并返回到SWI之后的指令。SWI處理程序讀取操作碼以提取SWI函數(shù)編號。 2.4 異常n軟件中斷指令 當(dāng)ARM7TDMI處理器遇到一條自己和系統(tǒng)內(nèi)任何協(xié)處理器都無法處理的指令時,ARM7TDMI內(nèi)核執(zhí)行未定義指令陷阱。軟件可使用這一機(jī)制通過模擬未定義的協(xié)處理器指令來擴(kuò)展ARM指令集。2.4 異常n未定義的指令 在模擬處理了失敗

14、的指令后,陷阱程序執(zhí)行下面的指令:MOVS PC,R14_svc 這個動作恢復(fù)了PC并返回到未定義指令之后的指令。 2.4 異常n未定義的指令第2章 ARM7體系結(jié)構(gòu)q2.4 異常q2.5 ARM尋址方式2.5 ARM處理器尋址方式n尋址方式分類 尋址方式是根據(jù)指令中給出的地址碼字段來實現(xiàn)尋找真實操作數(shù)地址的方式。ARM處理器具有9種基本尋址方式。1.寄存器尋址;2.立即尋址;3.寄存器移位尋址;4.寄存器間接尋址;5.變址尋址;6.多寄存器尋址;7.堆棧尋址;8.塊拷貝尋址;9.相對尋址。 操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執(zhí)行時直接取出寄存器值來操作。寄存器尋

15、址指令舉例如下: MOV R1,R2 ;將R2的值存入R1 SUB R0,R1,R2 ;將R1的值減去R2的值,結(jié)果保存到R0 2.5 ARM處理器尋址方式n尋址方式分類1 寄存器尋址MOV R1,R2 立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立即使用的操作數(shù)(這樣的數(shù)稱為立即數(shù))。立即尋址指令舉例如下: SUBSR0,R0,#1 ;R0減1,結(jié)果放入R0,并且影響標(biāo)志位MOVR0,#0 xFF000 ;將立即數(shù)0 xFF000裝入R0寄存器 2.5 ARM處理器尋址方式n尋址方式分類2 立即尋址MOV R0,#0 xFF

16、00 寄存器移位尋址是ARM指令集特有的尋址方式。當(dāng)?shù)?個操作數(shù)是寄存器移位方式時,第2個寄存器操作數(shù)在與第1個操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。寄存器移位尋址指令舉例如下:MOVR0,R2,LSL #3 ;R2的值左移3位,結(jié)果放入R0, ;即是R0=R28 ANDSR1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相 ;“與”操作,結(jié)果放入R12.5 ARM處理器尋址方式n尋址方式分類3 寄存器移位尋址MOV R0,R2,LSL #3邏輯左移3位 寄存器間接尋址指令中的地址碼給出的是一個通用寄存器的編號,所需的操作數(shù)保存在寄存器指定地址的存儲單元中,即寄存器為操作數(shù)的地址指針

17、。寄存器間接尋址指令舉例如下: LDRR1,R2;將R2指向的存儲單元的數(shù)據(jù)讀出;保存在R1中 SWPR1,R1,R2;將寄存器R1的值和R2指定的存儲;單元的內(nèi)容交換 0 x55R0R2 0 x400000000 xAA0 x400000002.5 ARM處理器尋址方式n尋址方式分類4 寄存器間接尋址LDR R0,R20 xAA 變址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量(4K)相加/減,形成操作數(shù)的有效地址。基址尋址用于訪問基址附近的存儲單元,常用于查表、數(shù)組操作、功能部件寄存器訪問等。寄存器間接尋址是偏移量為0的基址加偏移尋址。變址尋址指令舉例如下(前索引尋址): LDRR2,R

18、3,#0 x0C ;讀取R3+0 x0C地址上的存儲單元 ;的內(nèi)容,放入R2 2.5 ARM處理器尋址方式n尋址方式分類5 變址尋址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA將R3+0 x0C作為地址裝載數(shù)據(jù) 變址尋址指令舉例如下: LDRR0,R1 ,#4 ;R0=R1,R1R14 ;后索引基址尋址 ;ARM這種自動索引機(jī)制不消耗額外的時間LDR R0,R1,R2 ;R0=R1+R2 ; 基址加索引尋址;2.5 ARM處理器尋址方式n尋址方式分類5 變址尋址 多寄存器尋址一次可傳送幾個寄存器值,允許一條指令傳送16個寄

19、存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下: LDMIAR1!,R2-R4,R6 ;將R1指向的單元中的數(shù)據(jù)讀出到 ;R2R4、R6中(R1自動加16) STMIAR0!,R2-R4,R6 ;將寄存器R2R4、R12的值保 ;存到R0指向的存儲; 單元中 ;(R0自動加16)0 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存儲器2.5 ARM處理器尋址方式n尋址方式分類6 多寄存器尋址LDR R1!,R2-R4,R6 0 x010

20、x020 x030 x040 x40000000 堆棧是一個按特定順序進(jìn)行存取的存儲區(qū),操作順序為“后進(jìn)先出” 。堆棧尋址是隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區(qū)域(堆棧),指針?biāo)赶虻拇鎯卧词嵌褩5臈m?。存儲器堆棧可分為兩種: 向上生長:向高地址方向生長,稱為遞增堆棧向下生長:向低地址方向生長,稱為遞減堆棧2.5 ARM處理器尋址方式n尋址方式分類7 堆棧尋址2.5 ARM處理器尋址方式n尋址方式分類7 堆棧尋址棧底棧頂棧區(qū)SP堆棧存儲區(qū)棧頂棧底棧區(qū)SP向下增長向上增長0 x123456780 x12345678堆棧壓棧堆棧壓棧棧頂SP棧頂SP棧底空堆棧棧底滿堆棧 堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項,稱為滿堆棧;堆棧指針指向下一個待壓入數(shù)據(jù)的空位置,稱為空堆棧。 2.5 ARM處理器尋址方式n尋址方式分類7 堆棧尋址0 x12345

溫馨提示

  • 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

提交評論