ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。
针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器。每个位的含义如下图:
指令的语法格式:
MRS{}, CPSR
MRS{}, SPSR
其中:
为指令执行的条件码。当忽略时指令为无条件执行。
为目标寄存器。
指令操作的伪代码:
C代码
if ConditionPassed(cond) then
if R == 1 then
Rd = SPSR
else
Rd = CPSR
MSR指令使用的场合:
通常通过“读取-修改-写回”操作序列修改状态寄存器的内容。MRS指令用于将状态寄存器的内容读到通用寄存器中。
当异常允许嵌套时,需要在进入异常中断之后,嵌套中断发生之前保存当前处理器模式对应的SPSR。这时需要先通过MRS指令读出SPSR的值,在用其他指令将SPSR值保存起来。
在进程切换时也需要保存当前状态寄存器的值。
MSR指令介绍
MRS的指令编码格式:
这里分为两种格式,一种是原操作数为通用寄存器, 另一种是源操作数是立即数。
指令的使用:
MSR指令通常用于恢复状态寄存器的内容或者改变寄存器的内容。
当退出异常中断处理器程序时,如果事先保存了状态寄存器的内容通常通过MSR指令将事先保存的状态寄存器内容恢复到状态寄存器中。
当需要修改状态寄存器的内容时,通过“读取-修改-写回”指令序列完成。写回操作也是通过MSR指令完成的。
处理器切换到特权模式,使用将要修改某个位域的示例:
C代码
mrs r0, cpsr ;读取cpsr中的值
bic r0, r0, #0x1F ;修改,去除当前处理器模式
orr r0, r0, #0x13 ;修改,设置特权模式
msr cpsr_c, r0 ;写回,仅仅修改CPRS中的控制位
当进程切换到应用场合,应指定SPSR_fsxc来完全恢复。
相关资源:聚会喝酒看美女必备APP_秀人 -Android其他资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!