【文章內(nèi)容簡(jiǎn)介】
R13_und R13_ab 寄存器類別 寄存器在匯編中的名稱 各模式下實(shí)際訪問的寄存器 用戶 系統(tǒng) 管理 中止 未定義 中斷 快中斷 通用寄存器和程序計(jì)數(shù)器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 狀態(tài)寄存器 CPSR CPSR SPSR 無 SPSR_abt SPSR_abt SPSR_und SPSR_irq SPSR_fiq 堆棧指針寄存器 R13( SP) 寄存器 R13常作為 堆棧指針( SP)。在 ARM指令集當(dāng)中,沒有以特殊方式使用 R13的指令或其它功能,只是習(xí)慣上都這樣使用。但是在 Thumb指令集中存在使用R13的指令。 寄存器類別 寄存器在匯編中的名稱 各模式下實(shí)際訪問的寄存器 用戶 系統(tǒng) 管理 中止 未定義 中斷 快中斷 通用寄存器和程序計(jì)數(shù)器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 狀態(tài)寄存器 CPSR CPSR SPSR 無 SPSR_abt SPSR_abt SPSR_und SPSR_irq SPSR_fiq 鏈接寄存器 R14( LR) R14為 鏈接寄存器 ( LR),在結(jié)構(gòu)上有兩個(gè)特殊功能: ?在每種模式下,模式自身的 R14版本用于保存子程序返回地址; ?當(dāng)發(fā)生異常時(shí),將 R14對(duì)應(yīng)的異常模式版本設(shè)置為異常返回地址(有些異常有一個(gè)小的固定偏移量)。 寄存器組織 ARM狀態(tài)下的寄存器組織 狀態(tài) 寄存器 ?當(dāng)前程序狀態(tài)寄存器( Current Program Status Register, CPSR) ?備份的程序狀態(tài)寄存器( Saved Program Status Register, SPSR) 寄存器組織 程序狀態(tài)寄存器格式 N Z C V . . . . . . I F T M 4 M 3 M 2 M 1 M 03 1 3 0 2 9 2 8 2 7 2 6 2 5 2 4 8 7 456 3 012條 件 碼 標(biāo) 志 保 留 控 制 位O v e r f l o wC a r r y / B o r r o w / E x t e n dZ e r oN e g a t i v e / L e s s T h a nM o d e b i t sS t a t e b i tF I Q d i s a b l eI R Q d i s a b l e 寄存器組織 Thumb狀態(tài)下的寄存器組織 Thumb狀態(tài)下的寄存器集是 ARM狀態(tài)下寄存器集的一個(gè)子集,程序可以直接訪問 8個(gè)通用寄存器( R7~R0)、程序計(jì)數(shù)器( PC)、堆棧指針( SP)、連接寄存器( LR)和 CPSR。 Thumb狀態(tài)下的寄存器組織與 ARM狀態(tài)下的寄存器組織的關(guān)系 R 0L R ( R 1 4 )S P ( R 1 3 )R 1R 2R 3R 4R 5R 6R 7A R M S t a t eLoregistersHiregistersP C ( R 1 5 )C P S RS P S RR 0L R ( R 1 4 )S P ( R 1 3 )R 1R 2R 3R 4R 5R 6R 7R 8R 9R 1 0R 1 1R 1 2P C ( R 1 5 )C P S RS P S RT H U M B S t a t e 寄存器組織 ? Thumb狀態(tài)下的寄存器組織與 ARM狀態(tài)下的寄存器組織的關(guān)系: ? Thumb狀態(tài)下和 ARM狀態(tài)下的 R0~R7是相同的; ? Thumb狀態(tài)下的 SP對(duì)應(yīng)于 ARM狀態(tài)下的 R13; ? Thumb狀態(tài)下的 LR對(duì)應(yīng)于 ARM狀態(tài)下的 R14; ? Thumb狀態(tài)下的程序計(jì)數(shù)器對(duì)應(yīng)于 ARM狀態(tài)下R15; ? Thumb狀態(tài)下和 ARM狀態(tài)下的 CPSR和所有的SPSR是相同的 Thumb狀態(tài)下的寄存器組織 R 1 4 _ u n dR 1 3 _ u n dR 1 4 _ i r qR 1 3 _ i r qR 1 4 _ a b tR 1 3 _ a b t R 0 R 1 R 2 R 1 5 ( P C )R 1 4 ( L R )R 1 3 ( S P ) R 7 R 6 R 5 R 4 R 3R 1 3 _ s v cR 1 4 _ f i gR 1 3 _ f i gR 1 4 _ s v cS P S R _ u n dS P S R _ i r qS P S R _ a b tS P S R _ s v c S P S R _ f i gU s e r F I GS u p e r v i s o r A b o r t I R Q U n d e f i n e d狀 態(tài)寄 存 器C P S R分 組 寄 存 器S y s t e m 通用寄存器和程序計(jì)數(shù)器 主要內(nèi)容 ? ARM微處理器的工作狀態(tài) ? ARM微處理器的運(yùn)行模式 ? ARM體系結(jié)構(gòu)的存儲(chǔ)器格式 ? 寄存器組織 ? ARM的異常 ? ARM微處理器的指令系統(tǒng)基礎(chǔ) ? ARM指令的尋址方式 ? ARM指令集 ? Thumb指令及應(yīng)用 ARM的異常 ? 當(dāng)正常的程序執(zhí)行流程發(fā)生暫時(shí)的停止時(shí),稱之為 異常 。 ?在處理異常之前,當(dāng)前處理器的狀態(tài)必須保留 ?處理器允許多個(gè)異常同時(shí)發(fā)生,它們將會(huì)按固定的優(yōu)先級(jí)進(jìn)行處理 ?異常與中斷的概念并不完全等同 ARM的異常 ARM體系結(jié)構(gòu)所支持的異常類型 在 ARM體系結(jié)構(gòu)中,異常中斷用來處理軟件中斷、未定義指令陷阱(不是真正的“意外”事件)、系統(tǒng)復(fù)位功能(在邏輯上發(fā)生在程序執(zhí)行前而不是程序執(zhí)行中)和外部事件。這些“不正?!笔录急粍潥w“異?!?,因?yàn)樵谔幚砥鞯目刂茩C(jī)制中,它們都使用同樣的流程進(jìn)行異常處理。 ARM的異常 ? ARM異常按引起異常事件的不同可分為以下 3類 : ?指令執(zhí)行引起的直接異常 ?指令執(zhí)行引起的間接異常 ?外部產(chǎn)生的與指令流無關(guān)的異常 異常類型 具體含義 復(fù)位 ( RESET) 當(dāng)處理器的復(fù)位電平有效時(shí),產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位異常處理程序處執(zhí)行。 未定義指令 ( UDEF) 當(dāng) ARM處理器或協(xié)處理器遇到不能處理的指令時(shí),產(chǎn)生未定義指令異常??墒褂迷摦惓C(jī)制進(jìn)行軟件仿真。 軟件中斷 ( SWI) 該異常由執(zhí)行 SWI指令產(chǎn)生,可用于用戶模式下的程序調(diào)用特權(quán)操作指令??墒褂迷摦惓C(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用。 指令預(yù)取中止 ( PABT) 若處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問,存儲(chǔ)器會(huì)向處理器發(fā)出中止信號(hào),但當(dāng)預(yù)取的指令被執(zhí)行時(shí),才會(huì)產(chǎn)生指令預(yù)取中止異常。 數(shù)據(jù)中止 ( DABT) 若處理器數(shù)據(jù)訪問指令的地址不存在,或該地址不允許當(dāng)前指令訪問時(shí),產(chǎn)生數(shù)據(jù)中止異常。 外部中斷請(qǐng)求 ( IRQ) 當(dāng)處理器的外部中斷請(qǐng)求引腳有效,且 CPSR中的 I位為 0時(shí),產(chǎn)生 IRQ異常。系統(tǒng)的外設(shè)可通過該異常請(qǐng)求中斷服務(wù)。 快速中斷請(qǐng)求 ( FIQ) 當(dāng)處理器的快速中斷請(qǐng)求引腳有效,且 CPSR中的 F位為 0時(shí),產(chǎn)生 FIQ異常。 ARM體系結(jié)構(gòu)所支持的異常 異常向量( Exception Vectors) 地 址 異 常 進(jìn)入模式 0x0000,0000 復(fù)位 管理模式 0x0000,0004 未定義指令 未定義模式 0x0000,0008 軟件中斷 管理模式 0x0000,000C 中止(預(yù)取指令) 中止模式 0x0000,0010 中止(數(shù)據(jù)) 中止模式 0x0000,0014 保留 保留 0x0000,0018 IRQ IRQ 0x0000,001C FIQ FIQ ARM的異常 對(duì)異常的響應(yīng) ARM微處理器對(duì)異常的響應(yīng)過程如下: 將下一條指令的地址存入相應(yīng)的連接寄存器LR,以便程序在處理異常返回時(shí)能從正確的位置重新開始執(zhí)行; 將 CPSR復(fù)制到相應(yīng)的 SPSR中; 設(shè)置當(dāng)前狀態(tài)寄存器 CPSR中的相應(yīng)位; 給程序計(jì)數(shù)器( PC)強(qiáng)制賦值,使程序從相應(yīng)的異常向量地址開始執(zhí)行中斷處理程序 ; ARM的異常 從異常返回 ARM微處理器會(huì)執(zhí)行以下操作從異常返回 : 所有修改過的用戶寄存器必須從處理程序的保護(hù)堆棧中恢復(fù)(出棧); 將連接寄存器 LR的值減去相應(yīng)的偏移量送到 PC中; 將 SPSR_mode寄存器內(nèi)容復(fù)制回 CPSR中,使得 CPSR從相應(yīng)的 SPSR中恢復(fù),即恢復(fù)被中斷的程序工作狀態(tài); 若在進(jìn)入異常處理時(shí)設(shè)置了中斷禁止位,要