基于ARM9程序狀態(tài)寄存器CPSR
定義:程序狀態(tài)寄存器;
功能:反映數(shù)據(jù)運(yùn)算狀態(tài),控制系統(tǒng)模式等;
特點(diǎn):程序狀態(tài)寄存器不屬于通用寄存器;
關(guān)于CPSR的訪問,ARM專門為其設(shè)立了兩條指令:
MRS:CPSR到通用寄存器傳遞數(shù)據(jù)指令;
MSR:通用寄存器到CPRS傳遞數(shù)據(jù)指令;
(1)MSR 通用寄存器→CPSR
格式:MSR{條件} CPSR | SPSR_field,寄存器Rm或立即數(shù)
功能:恢復(fù)或改變CPSR的值。
CPRS | SPRS:尖括號(hào)內(nèi)只能是CPRS或SPRS指令,這取決于當(dāng)前處理器工作模式;
field域:用于設(shè)置CPSR中需要操作的位;(下面詳細(xì)介紹)
CPSR位域:
field域的表示:
[31:24]為條件標(biāo)志位域,用f表示
[23:16]為狀態(tài)位域,用s表示
[15:8]為擴(kuò)展位域,用x表示
[7:0]為控制位域,用c表示
表達(dá)式舉栗:
MSR CPSR,R0 ;傳送R0的內(nèi)容到CPSR
MSR SPSR,R0 ;傳送R0的內(nèi)容到SPSR
MSR CPSR_c,R0 ;傳送R0的內(nèi)容到寄存器CPSR,但是僅修改CPSR的控制位域;
(2)MRS CPSR→通用寄存器;
格式:MRS{條件} 寄存器Rd,CPSR " SPSR
功能:讀出CPSR的值;
應(yīng)用的兩種情況:
1. 異常處理或進(jìn)程切換時(shí),將CPSR的值保存起來
2. 改變CPSR的值的時(shí),改變后在寫回?cái)?shù)據(jù)CPSR
舉例:
MRS R0,CPSR
MRS R0,SPSR
MRS和MSR的配合使用可以對(duì)CPSR進(jìn)行修改,修改步驟共分3步:
1. 讀取CPSR的值
2. 修改
3. 寫入CPSR的值
例程(SVC模式下):使能中斷IRQ
MRS R1,CPSR ;讀
BIC R1,R1,0x80 ;改,使能位7
MSR CPSR_c,R1 ;寫
用戶模式下可以讀取CPSR,但是只能改變標(biāo)識(shí)位f,只能在特權(quán)模式下修改狀態(tài)寄存器;