ARM学习笔记6——程序状态寄存器访问指令
这两条指令结合,可用于对CPSR或SPSR进行读/写操作。 当需要保存或修改当前模式下CPSR或SPSR的内容时,首先必须将这些内容传递到通用寄存器中
1、MRS指令(Move to Register from Status Register)
1.1、作用
它将程序状态寄存器内容传输到通用寄存器
1.2、语法格式
MRS{<condition>} <Rd>,CPSR
MRS{<condition>} <Rd>,SPSR
1.3、参数说明
<Rd>:确定指令的目标寄存器,如果R15被用作目标寄存器,指令的执行结果不可预知,因为每执行一个指令,PC都会改变。
1.4、使用场合
1.4.1、当需要保存或修改当前模式下CPSR或SPSR的内容时,首先必须将这些内容传送到通用寄存器中,对选择的位进行修改,然后将数据回写到状态寄存器
1.4.2、当异常中断允许嵌套时,需要在进入异常处理程序之后,嵌套中断发生之前保存当前处理器模式对应的SPSR。这时需要先通过MRS指令读出SPSR的值,再用其他指令(如压栈指令)将SPSR值保存起来。
1.4.3、在进程切换时也需要保存当前程序状态寄存器的值。
1.5、使用举例
1.5.1、将CPSR状态寄存器读取,保存到R1中
MRS R1,CPSR
1.5.2、将SPSR状态寄存器读取,保存到R2中
MRS R2,SPSR
2、MSR指令(Move to Status Register from Register)
2.1、作用
MSR指令用于通用寄存器内容传输到程序状态寄存器
2.2、语法格式
MSR{<condition>} CPSR_<fields>,#<immediate>
MSR{<condition>} CPSR_<fields>,<Rm>
MSR{<condition>} SPSR_<fields>,#<immediate>
MSR{<condition>} SPSR_<fields>,<Rm>
2.3、参数说明
2.3.1、<fields>:域标志位,是下面选项中的一种或几种的组合
C:设置控制位掩码域(bit[16])
X:设置扩展位掩码域(bit[17])
S:设置状态位掩码域(bit[18])
F:设置标志位掩码域(bit[19])
2.3.2、<immediate>:被传送到CPSR和SPSR寄存器的立即数,此立即数可以为8位立即数(范围在0x00-0xff之间)
2.3.3、<Rm>:指定的通用寄存器,此寄存器包含将要被传送状态寄存器中的数据