基于ARM9程序状态寄存器CPSR
扫描二维码
随时随地手机看文章
定义:程序状态寄存器;
功能:反映数据运算状态,控制系统模式等;
特点:程序状态寄存器不属于通用寄存器;
关于CPSR的访问,ARM专门为其设立了两条指令:
MRS:CPSR到通用寄存器传递数据指令;
MSR:通用寄存器到CPRS传递数据指令;
(1)MSR 通用寄存器→CPSR
格式:MSR{条件} CPSR | SPSR_field,寄存器Rm或立即数
功能:恢复或改变CPSR的值。
CPRS | SPRS:尖括号内只能是CPRS或SPRS指令,这取决于当前处理器工作模式;
field域:用于设置CPSR中需要操作的位;(下面详细介绍)
CPSR位域:
field域的表示:
[31:24]为条件标志位域,用f表示
[23:16]为状态位域,用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的值的时,改变后在写回数据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,只能在特权模式下修改状态寄存器;