汇编指令mrs_ARM汇编指令MRS和MSR(转)

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进行处理,非常感谢!

上一篇 2021年1月4日
下一篇 2021年1月4日

相关推荐