ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。

针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器。每个位的含义如下图:

分成了4部分:

1,条件标志位

N(Negative), Z(Zero), C(Carry), V(Verflow)统称为条件标志位。ARM指令可以根据CPSR中的这些条件标志位来选择性的执行。

2,Q标志位

ARM v5的E系列处理器中,CPSR的bit[27]称为Q标志位。主要用于指示增强的DSP指令是否发生了溢出。

3,控制位

I, F, T以及M[4:0]统称为控制位。当异常中断发生时,这些位发生变化。在特权级的处理器模式下,软件可以修改这些控制位。

下表示控制位M[4:0]的含义:


M[4:0]

处理器模式

可访问的寄存器

0b10000

用户模式

PC,CPSR, R14~R0

0b10001

FIQ模式

PC,CPSR, SPSR_fiq,R14_fiq,R8_fiq, R7~R0

0b10010

IRQ模式

PC,CPSR, SPSR_irq,R14_irq,R13_irq,R12~R0

0b10011

管理模式

PC,CPSR, SPSR_svc,R14_svc,R13_svc,R12~R0

0b10111

中止模式

PC,CPSR, SPSR_abt,R14_abt,R13_abt, R12~R0

0b11011

未定义模式

PC,CPSR, SPSR_und,R14_und,R13_und, R12~R0

0b11111

系统模式

PC,CPSR(ARMv4及以上版本), R14~R0

4,保留位
 用于将来ARM版本的扩展。

状态寄存器访问指令仅有两天:

MRS: 状态寄存器到通用寄存器的传送指令。

MSR: 通用寄存器到状态寄存器的传送指令。

MRS指令介绍

MRS的指令编码格式:


 指令的语法格式:

MRS{<cond>}<Rd>, CPSR

MRS{<cond>}<Rd>, SPSR

其中:

<cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行。

<Rd>为目标寄存器。

指令操作的伪代码:

C代码  

  1. if ConditionPassed(cond) then
  2. if R == 1 then
  3. Rd = SPSR
  4. else
  5. Rd = CPSR

MSR指令使用的场合:

  • 通常通过“读取-修改-写回”操作序列修改状态寄存器的内容。MRS指令用于将状态寄存器的内容读到通用寄存器中。
  • 当异常允许嵌套时,需要在进入异常中断之后,嵌套中断发生之前保存当前处理器模式对应的SPSR。这时需要先通过MRS指令读出SPSR的值,在用其他指令将SPSR值保存起来。
  • 在进程切换时也需要保存当前状态寄存器的值。

MSR指令介绍

MRS的指令编码格式:

这里分为两种格式,一种是原操作数为通用寄存器, 另一种是源操作数是立即数。

指令的语法格式:

C代码  

  1. MSR{<cond>} CPSR_<fields>, #<immediate>
  2. MSR{<cond>} CPSR_<fields>, <Rm>
  3. MSR{<cond>} CPSR_<fields>, #<immediate>
  4. MSR{<cond>} CPSR_<fields>, <Rm>

其中:

<cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行。

<fields>设置状态寄存器中需要操作的位。状态寄存器的32位可以分为4个8位的域:

f: 指示bits[31 : 24],又名条件标志位域

s: 指示bits[23 : 16],又名状态标志位域

x: 指示bits[15 : 8], 又名扩展位域

c: 指示bits[7 : 0],又名控制位
<immediate>为将要传送到状态寄存器中的立即数,该立即数的计算方式可以去照看<ARM+Architecture+Reference+Manual.pdf>

<Rm>寄存器包含将要传送到状态寄存器中的数据。

指令的操作伪代码:

指令的使用:
MSR指令通常用于恢复状态寄存器的内容或者改变寄存器的内容。

当退出异常中断处理器程序时,如果事先保存了状态寄存器的内容通常通过MSR指令将事先保存的状态寄存器内容恢复到状态寄存器中。

当需要修改状态寄存器的内容时,通过“读取-修改-写回”指令序列完成。写回操作也是通过MSR指令完成的。

处理器切换到特权模式,使用将要修改某个位域的示例:

C代码  

  1. mrs r0, cpsr ;读取cpsr中的值
  2. bic r0, r0, #0x1F ;修改,去除当前处理器模式
  3. orr r0, r0, #0x13 ;修改,设置特权模式
  4. msr cpsr_c, r0 ;写回,仅仅修改CPRS中的控制位

当进程切换到应用场合,应指定SPSR_fsxc来完全恢复。

ARM中MRS和MSR汇编指令相关推荐

  1. 笔记—ARM体系结构与编程(汇编指令)第二天

    目录 1 移位指令(5种) 2 数据传输指令 MOV{cond}{S}  , MVN{cond}{S}  , 3 算术运算指令 加法指令:ADD{cond}{S}  , , 带C标志位的加法指令:AD ...

  2. arm汇编指令中MRS和MSR

    MRS: Move to Register from State register MSR :Move from State register to Register 1. MRS指令 MRS指令的格 ...

  3. ARM中MRS汇编指令

    ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据. 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器.每个位的含义如下图: 分成了4部分: 1,条件标志位 N(Negative) ...

  4. arm push/pop/b/bl汇编指令

    目录 1. push指令 2. pop指令 3. b指令 4. bl指令 5. bx指令 1. push指令 功能描述:入栈 armv7 芯片手册: Push Multiple Registers s ...

  5. 基于STC15系列单片机课程中讲到的汇编指令(二)

    交换指令 1.字节交换指令 XCH  A,Rn ;A的值给Rn,Rn的值给A,具体数学符号不好敲出来,就是交换的意思,有别于赋值 XCH A,@Ri:A的内容和Ri的内容所表示的地址的内容进行交换,和 ...

  6. 基于STC15系列单片机课程中讲到的汇编指令(一)

    汇编语言指令格式: [标号:] 操作码 [第一操作数][,第二操作数] [,第三操作数] [:注释] 实际书写中没有[] 作者本人使用的单片机教材是丁向荣主编的 指令系统中常用符号 #data 表示8 ...

  7. ARM中C和汇编混合编程及示例

    在嵌入式系统开发中,目前使用的主要编程语言是C和汇编,C++已经有相应的编译器,但是现在使用还是比较少的.在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,主要是因为C语言的结构比较 ...

  8. 【Android 逆向】x86 汇编 ( 参考资料 | Intel 官方的文档 | x86 汇编中文文档 | 汇编指令查询器 )

    文章目录 一.x86 汇编参考文档 1.Intel 官方的文档 2.常用 x86 汇编文档 3.x86 汇编指令查询器 总结 一.x86 汇编参考文档 下面的所有资料 , 都可以在博客资源 https ...

  9. RAM汇编指令DMB、DSB、ISB、SEV等

    最近用keil调试STM32时,在代码中遇到了一些汇编指令,如DMB.DSB.ISB.SEV,现总结如下: DMB.DSB.ISB.SEV等指令都属于RAM汇编指令,在<ARM Cortex-M ...

最新文章

  1. (译)KVO的内部实现
  2. easyui datagrid onLoadSuccess方法 正确使用
  3. 【12】行为型-观察者模式
  4. VS 2005 文本编码小技巧 --中文亂碼問題解決
  5. 解决问题ImportError: HDFStore requires PyTables, quot;No module named 'tables'quot; problem importing
  6. 解决Eclipse里Maven工程报 An error occurred while filtering resources错误
  7. 取模除法(逆元)(费马小定理)(线性求逆元)
  8. matlab from有什么用,Matlab函数使用'fromworkspace'将向量传递给simulink
  9. java.util.concurrent.BlockingQueue指南
  10. ubuntu 安装Docker教程
  11. 显示纯服务器_BBT三行代码搭建服务器,让Dynamo跳出IronPython的封锁
  12. win10安装ipython_在win10下安装 ipython 5
  13. 英语邮件介绍多媒体计算机,多媒体电子邮件,rich media email,音标,读音,翻译,英文例句,英语词典...
  14. html5在线俄罗斯方块,html5网页版俄罗斯方块小游戏代码
  15. 计算机知识学习——window10台式电脑显示未插入扬声器或耳机解决方案
  16. 后端使用SpringBoot和Jwt工具与Redis数据库+前端Vue Element Admin实现用户携带token的登录功能案例
  17. 怎样在线制作视频二维码?多种类型二维码一键生成技巧
  18. Mac系统如何查看更新R版本
  19. 串口波特率115200
  20. 推荐一个基于 Spring Boot+MyBatis Plus+JWT 的问卷系统!

热门文章

  1. 视频合并怎么制作?建议收藏这三款软件
  2. 有没有什么靠谱的副业?
  3. WindowsAPI 窗口
  4. 自动化之RPA工具之影刀
  5. Iris植物分类数据可视化(散点图)(python-nvd3)
  6. WPF 开机启动因为触摸初始化锁住界面显示
  7. 用什么擦地最干净脑筋急转弯_27个有意思的脑筋急转弯(含答案)
  8. 叔本华系列之(一)论独立的思考
  9. APP - APP监控软件,美团 24 小时不间断定位上热搜
  10. CMMI资质认证是什么?