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