1.MSR和MRS指令介绍

MRS 指令:  对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以获得当前处理器的工作状态。读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有SPSR寄存器)。

MSR指令:    对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。

2.CPSR 程序状态寄存器(current program status register)

如图所示,ARM每种工作模式除R0~R15共16个寄存器外,还有第17个寄存器CPSR,叫做 当前程序状态寄存器

CPSR寄存器格式:

在CPSR寄存器中主要用到了控制位,每个标志位如下图所示:

3.使用MSR指令写入数据

例:

msr cpsr_c, #0xd2       @0xd2=1100 0010//禁止中断使能,进入中断模式

msr cpsr_c, #0x53        @0x53=0101 0011//开IRQ中断,禁止FIQ中断,进入ARM状态,设为管理(svc32)模式

其中cpsr_c是因为CPSR有4个8位区域:

  • C 控制域屏蔽字节([7:0])
  • X 扩展域屏蔽字节([15:8])
  • S 状态域屏蔽字节([23:16])
  • F 标志域屏蔽字节([31:24])

所以cpsr_c表示的是CPSR控制位、

4.使用MRS和MSR来设置2440位管理模式,实例:

mrs r0,cpsr         //读状态寄存器cpsr的数据到r0中

bic  r0,r0,#0x1f    //对r0低5位进行清0,清除模式位
orr    r0,r0,#0xd3  //低8位或(110 10011), 设为管理(svc32)模式,禁止IRQ和FIQ中断
msr    cpsr,r0      //写入状态寄存器cpsr,更新。

5.SPSR程序保存状态寄存器(saved program status register)

SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用SPSR来恢复CPSR。

(注意:用户user模式和系统system模式不是异常中断模式,所以他没有SPSR。当用户在用户模式或系统模式访问SPSR,将产生不可预知的后果。)

在异常模式返回时,如果指令带有S后缀(除了比较指令以外),同时又以PC为目标寄存器进行操作,则操作的同时从SPSR恢复CPSR。以下都是可以恢复CPSR寄存器

例如:

movs pc, #0xff             // cpsr = spsr; pc = 0xff 

adds pc, r1, #0xffffff00   //cpsr = spsr; pc = r1 + 0xffffff00  

ands pc, r1, r2         //cpsr = spsr; pc = r1 & r2; 

ldmia   sp!,    { r0-r12,pc }^ //中断返回, ^表示将spsr的值复制到cpsr

汇编指令-MRS(读)和MSR(写)指令操作CPSR寄存器和SPSR寄存器使用(1)相关推荐

  1. 汇编指令:MRS(读)和MSR(写)指令操作CPSR寄存器和SPSR寄存器使用

    1.MSR和MRS指令介绍 MRS 指令: 对状态寄存器CPSR和SPSR进行读操作.通过读CPSR可以获得当前处理器的工作状态.读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有S ...

  2. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (14) - 读存操作写存操作

    Load and Store Operation Overview 本节讲述读存与写存操作. Loads 当指令从回写式类型的存储器中的某个地址读取数据时,处理器会从高速缓存和存储器中查找数据.下表描 ...

  3. 汇编指令msr_ARM汇编:MRS和MSR指令

    1.MSR和MRS指令介绍 MRS 指令:  对状态寄存器CPSR和SPSR进行读操作.通过读CPSR可以获得当前处理器的工作状态.读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有 ...

  4. ARM汇编指令MRS和MSR

    在ARM处理器中,只有MRS(Move to Register from State register)指令可以对状态寄存器CPSR和SPSR进行读操作.通过读CPSR可以获得当前处理器的工作状态.读 ...

  5. ARM汇编:MRS和MSR指令

    ARM汇编:MRS和MSR指令 ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据. 一:下面先来说说状态寄存器 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器.每个位的含义如下 ...

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

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

  7. 汇编指令msr_ARM汇编指令MRS和MSR(转)

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

  8. MCS-51单片机指令系统“读-改-写”指令

    定义 单片机首先将欲修改的寄存器的内容读回ALU,对相应位进行修改,然后再整个写回原来的寄存器地址,完成该功能的指令就叫做"读-改-写"指令. 读锁存器和读引脚的区别 在51单片机 ...

  9. 汇编指令mrs_汇编指令 - Mrs.kang - 博客园

    1.debug的常用命令 1.r命令 查看.修改CPU中寄存器的值 -r :查看寄存器的值 -r  cs :修改寄存器cs的值 2.D命令 查看内存中的内容 1.-d  段地址:偏移地址 -d 100 ...

最新文章

  1. mysql 时间点_MySQL 基于时间点与位置恢复
  2. 佳能2900打印机与win10不兼容_佳能mg3660 3680 系列喷墨打印机更换搓纸轮解决不进纸教程...
  3. 大话数据结构15 : 线索二叉树
  4. 递归 求一个数的阶乘
  5. mysql存储过程输出多个参数值_MySQL 存储过程返回多个值
  6. 添加Zabbix Agent客户端,并解决报错。
  7. uni.startPullDownRefresh 只能执行一次的解决方案
  8. 拒绝瞎忙,高效的学习与工作经验谈
  9. @Value竟然能玩出这么多花样,涨知识了
  10. 读书印记 - 《终极算法》
  11. 加工中心计算机编程自学,自学加工中心编程(简单易学)图文讲解
  12. linux虚拟内存满了怎么办,解决linux虚拟内存不够用的方法
  13. 2应用层 - P2P应用
  14. android自定义秒表(精确到0.1秒,带计次功能)
  15. BlenderGIS:No ImageIO解决办法 天地图地图资源
  16. 光子晶体介质柱的讨论
  17. 二叉树遍历【递归非递归】
  18. Python自动生成代码 - 通过tkinter图形化操作生成代码框架
  19. 6款逆天黑科技,颜值爆表,瞬间提升你的手机逼格!
  20. TEB算法详解(TebLocalPlannerROS::computeVelocityCommands(1))

热门文章

  1. 【思科源码实例】企业网络搭建项目,带文档和PKT源文件.局域网网络作业.
  2. try、catch、finally
  3. JDBC学习笔记(二)
  4. 2019-04-25t16:19:49 转成正常的年月日
  5. 高等代数-三阶特征根、特征向量求解详细过程
  6. 中国买苏35贵了5亿美元?答案让你明白中方用心
  7. 信雅达电子影像系统雄踞市场第一
  8. 进行域名解析时,递归和迭代查询方式是什么意思?
  9. 工作室机房干扰问题怎样解决?
  10. Dataframe的创建