ARM_Core的處理器模式與寄存器
相應(yīng)寄存器中的內(nèi)容。
本文引用地址:http://butianyuan.cn/article/201611/317757.htmARM狀態(tài),此時處理器執(zhí)行32位對齊的ARM指令;BX指令,當操作數(shù)寄存器最低位為0時,進入ARM狀態(tài)。
Thumb,此時處理器執(zhí)行16位對齊的Thumb指令。BX指令,當操作數(shù)寄存器最低位為1時,進入Thumb狀態(tài)。
BX(Branch Exchange):BX Rn; ##其中Rn可以是R0-R15中的任意一個。指令通過將寄存器Rn的內(nèi)容拷貝到程序計數(shù)器PC
來完成4Gbyte的地址空間的跳轉(zhuǎn)。
在進入異常中斷后,ARM內(nèi)核會自動切換到ARM狀態(tài),所以在異常中斷處理程序入口的是ARM指令,如果需要切換到Thumb狀態(tài)
必須在異常中斷返回前,切換到ARM工作狀態(tài)。當處理器在Thumb狀態(tài)下發(fā)生異常時,返回后,自動切換到Thumb狀態(tài)。
ARM處理器總是從ARM工作狀態(tài)開始的。
ARM處理器的7中工作模式:
USE模式:正常用戶模式。
FIQ模式:快速中斷模式,支持高速數(shù)據(jù)傳輸。
IRQ模式:普通中斷模式。
SVC模式:Supervisor模式,操作系統(tǒng)保護模式,處理軟件中斷swi,reset.
ABT模式:數(shù)據(jù),指令中止模式。
UND模式:未定義模式,支持軟件仿真。
SYS模式:系統(tǒng)模式,運行特權(quán)操作系統(tǒng)任務(wù)。
除用戶模式之外的6中模式稱為特權(quán)模式,特權(quán)模式下,程序可以訪問所有的系統(tǒng)資源,可以任意的進行處理器模式的切換。
用戶模式下不能訪問一些受操作系統(tǒng)保護的系統(tǒng)資源,不能直接進行處理器模式切換,需要由應(yīng)用程序產(chǎn)生異常處理。
特權(quán)模式中,除系統(tǒng)模式之外的5種模式稱為異常模式。
FIQ要比IRQ的響應(yīng)快很多,首先FIQ的優(yōu)先級比較高,再次ARM的FIQ會有自己更多的寄存器,由ARM自動保存。
異常處理過程:將下一條指令存入LR寄存器,CPSR賦值到SPSR,強制設(shè)置CPSR運行位,跳轉(zhuǎn)到異常處理函數(shù)。
返回:將LR中的值減相應(yīng)的偏移量送到PC中,將SPSR的值到CPSR中。
異常向量表:0x0_0復(fù)位Reset,進入SVC模式。
0x0_4未定義指令,進入UND模式。
0x0_8軟件中斷,進入SVC模式。
0x0_C中止指令,進入ABT模式。
0x0_0010中止數(shù)據(jù),進入ABT模式。
0x0_0014保留
0x0_0018IRQ中斷,進入IRQ模式。
0x0_001CFIQ中斷,進入FIQ模式。
ARM處理器中一共有37個寄存器。分別有31個通用寄存器:R0-R15, R13_svc, R14_svc, R13_abt, R14_abt, R13_und,
R14_und, R13_irq, R14_irq, R8_frq-R14_frq。
6個狀態(tài)寄存器:CPSR, SPSR_svc, SPSR_abt, SPSR_und, SPSR_irq, SPSR_fiq。
R13通常用作堆棧指針。R14通常用作子程序連接。
CPSR當前程序狀態(tài)寄存器。SPSR備份程序狀態(tài)寄存器。
31--28:NZCV(Negative Zero Carry Overflow)
278:Reserve
7-5:IFT(IRQ disable FIQ disable State bit)
4-0:Mode bits
0b10用戶模式,0b11FIQ模式,0b10010IRQ模式,0b10011SVC模式,0b10ABT模式,
0b11011UND模式,0b11SYS模式。
question:為什么會根據(jù)Rn的最低位來切換狀態(tài)呢,最低位是1表示8位對齊而不是16位啊。難道arm本身是16位地址對齊??
評論