ARM處理機模式--內(nèi)部寄存器
處理器模式
用戶模式(user)簡稱usr
快速中斷模式(FIQ)簡稱fiq
外部中斷模式(IRQ)簡稱irq
特權(quán)模式(supervisor)簡稱sve
數(shù)據(jù)訪問終止模式(abort)簡稱abt
未定義指令后終止模式(undefined)簡稱und
除了用戶模式以外,其他的模式成為特權(quán)模式,這些模式下,程序可以訪問所有系統(tǒng)資源,也可以任意進行處理機模式
處理其模式可以通過軟件進行控制,可以同國外部中斷或者是異常處理進行切換,大多數(shù)的用戶程序運行在用戶模式下,這時候應(yīng)用程序不能訪問一些受系統(tǒng)保護的系統(tǒng)資源
ARM處理器共有37個寄存器
其中包括: 31個通用寄存器和程序計數(shù)器(pc)這些寄存器都是32位寄存器
6個狀態(tài)寄存器,這些寄存器都是32位寄存器,但是目前只是用了其中的12位
通用寄存器的分類
未備份的寄存器:R0~R7
備份寄存器P8~R14
程序計數(shù)器PC,即R15
未備份的寄存器:RO~R&,對于每個未備份寄存器來說,在所有的處理器模式下指的都是同一個物理寄存器,在異常中斷造成處理器模式切換,由于不同的處理其模式使用相同的物理地址,可能造成寄存器數(shù)據(jù)被破壞,未備份寄存器沒有被系統(tǒng)用于別的特殊的用途,任何可采用通用寄存器的場合都可以用未備份寄存器
備份寄存器
對于備份寄存器R8~R12來說,每個寄存器對應(yīng)兩個不同的物理地址,例如在快速終端模式下,R8和R9分別記做R8_fiq,R9_fiq,當使用用戶模式下的寄存器的時候,寄存器R8he寄存器R9分別記作R8_usr,R9_usr,這兩種情況使用的物理地址是不同的,系統(tǒng)沒有見這幾個寄存器用于任何的特殊用途
對于備份的寄存器R13和R14來說,每個就處理器對應(yīng)6個不同的物理地址,其中一個是用戶模式和系統(tǒng)模式共用的,另外的5個是對應(yīng)于其他5中處理機模式
寄存器R13在ARM模式下常用作堆棧指針,每一種異常模式都有自己的物理的值的R13,因此,初始化應(yīng)用程序是應(yīng)該初始化R13,使其指向異常模式專用的堆棧地址
寄存器R14又稱為鏈接寄存器,在ARM體系結(jié)構(gòu)中具有下面兩種用途
1:每一種處理器模式自己的物理地址R14中存放當前子程序的返回地址,當通過BL或者BLX指令調(diào)用子程序時,R14被設(shè)置成該子程序的返回地址
2:但異常中斷發(fā)生時,該異常模式特定的物理R14被設(shè)置成異常模式將要返回的地址,對于有些異常模式,R14的值可能與將返回的地址有一個常數(shù)的偏移,具體的返回方式與上面的子程序返回基本相同
程序計數(shù)器PC R15
由于ARM采用了流水線機制,當正確讀取了PC的值的時候,該值為當前指令地址值加8個字節(jié)(因為是32位的)因此一次處理的是32位(也就是4個字節(jié))
當成功向R15寫入一個地址數(shù)值的時候,程序?qū)⑻D(zhuǎn)到改地址進行執(zhí)行
程序狀態(tài)寄存器CPSR
CPSR(當前程序狀態(tài)寄存器)可以在任何處理器模式下被訪問,它包含了條件標志位,中斷凈值為,當前處理器模式標志以及其他的一些控制位,每一種模式下都有個專用的物理狀態(tài)的狀態(tài)寄存器(稱為SPSR)但特定的異常中斷發(fā)生時,這個寄存器用于存放當前程序狀態(tài)寄存器的內(nèi)容,當異常中斷退出時,可以用SPSR中保存的值來恢復(fù)CPSR
程序狀態(tài)寄存器的格式如下:
N = 1表示結(jié)果為負數(shù),N= 0表示結(jié)果為正數(shù)
z = 1表示結(jié)果為0,z = 0表示結(jié)果不為0
c表示有進位借位情況發(fā)生
v表示有溢出
I表示中斷IRQ,F(xiàn)表示中斷FIQ,T表示運行的狀態(tài),當T= 1表示運行在THUMB上,當T = 0 表示運行在ARM狀態(tài)
后面的四位表示其中模式的選擇