程序状态寄存器和操作指令
在ARM Architecture Reference Manual手册中,ProgrammersModel的目录下,有Registers子目录
我们介绍CPSR和SPSR
CPSR:Current Program Status Register
SPSR:Saved Program Status Register
CPSR:cpsr在用户级编程时用于存储条件码;CPSR包含条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息。
SPSR:程序状态保存寄存器,用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。
对于CPSR只有1个,对于SPSR有5个(Supervisor/abort/Undefined/interrupt/Fast各有1个):
CPSR 寄存器(和保存它的 SPSR 寄存器)中的位分配如下:
31 30 29 28 --- 7 6 - 4 3 2 1 0 N Z C V I F M4 M3 M2 M1 M0 0 0 0 0 0 User26 模式 0 0 0 0 1 FIQ26 模式 0 0 0 1 0 IRQ26 模式 0 0 0 1 1 SVC26 模式 1 0 0 0 0 User 模式 1 0 0 0 1 FIQ 模式 1 0 0 1 0 IRQ 模式 1 0 0 1 1 SVC 模式(设定CPU到SVC32模式) 1 0 1 1 1 ABT 模式 1 1 0 1 1 UND 模式 CPSR和SPSR的操作指令:mrs,msr
MRS
功能:将状态寄存器的内容传送至通用寄存器。
指令的格式为:MRS{<条件码>}Rd,CPSR}SPSR其中:Rd目标寄存器,Rd不允许R15。R=0 将CPSR中的内容传送目的寄存器。R=1 将SPSR中的内容传送至目的寄存器。注释:MRS与MSR配合使用,作为更新PSR的读-修改-写序列的一部分。例如:改变处理器或清除标志Q。注意:当处理器在用户模式或系统模式下,一定不能试图访问SPSR这条指令不影响条件码标志。例:MRS R0,CRSR ;将CPSR中的内容传送至R0MRS R3,SPSR ;将SPSR中的内容传送至R3
MSR
指令的格式为:
MSR{条件} 程序状态寄存器(CPSR或SPSR)_<域>,操作数
功能:
MSR指令用于将操作数的内容传送到程序状态寄存器的特定域中。其中,操作数可以为通用寄存器或立即数。<域>用于设置程序状态寄存器中需要操作的位,32位的程序状态寄存器可分为4个域:
位[31:24]为条件标志位域,用f表示;
位[23:16]为状态位域,用s表示;
位[15:8]为扩展位域,用x表示;
位[7:0]为控制位域,用c表示;
该指令通常用于恢复或改变程序状态寄存器的内容,在使用时,一般要在MSR指令中指明将要操作的域。
指令示例:
MSR CPSR,R0 ;传送R0的内容到CPSR
MSR SPSR,R0 ;传送R0的内容到SPSR
MSR CPSR_c,R0 ;传送R0的内容到CPSR,但仅仅修改CPSR中的控制位域
程序状态寄存器操作指令AR 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)