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





