【ARM】MRS MSR指令
00. 目录
文章目录
- 00. 目录
- 01. 状态操作指令概述
- 02. MRS
- 2.1 指令的语法格式
- 2.2 指令示例
- 03. MSR
- 3.1 指令的语法格式
- 3.2 应用示例
- 04. 综合应用
- 4.1 使能 IRQ 中断
- 4.2 禁止 IRQ 中断
- 4.3 堆栈指令初始化
- 05. 附录
01. 状态操作指令概述
ARM 指令集提供了两条指令,可直接控制程序状态寄存器(Program State Register,PSR)。MRS 指令用于把 CPSR 或 SPSR 的值传送到一个寄存器;MSR 与之相反,把一个寄存器的内容传送到 CPSR 或 SPSR。这两条指令相结合,可用于对 CPSR 和 SPSR 进行读/写操作。程序状态寄存器指令如下表所示。
在指令语法中可看到一个称为 fields 的项,它可以是控制(C)、扩展(X)、状态(S)及标志(F)的组合。
02. MRS
MRS 指令用于将程序状态寄存器的内容传送到通用寄存器中。在 ARM 处理器中,只有 MRS 指令可以将状态寄存器 CPSR 或 SPSR 读出到通用寄存器中。
2.1 指令的语法格式
MRS{cond} Rd,PSR
# 其中,Rd 为目标寄存器,Rd 不允许为程序计数器(PC)。PSR 为 CPSR 或 SPSR。
2.2 指令示例
MRS R1,CPSR ;将 CPSR 状态寄存器读取,保存到 R1 中
MRS R2,SPSR ;将 SPSR 状态寄存器读取,保存到 R1 中
MRS 指令读取 CPSR,可用来判断 ALU 的状态标志及 IRQ/FIQ 中断是否允许等;在异常处理程序中,读 SPSR 可指定进入异常前的处理器状态等。MRS 与 MSR 配合使用,实现 CPSR 或 SPSR 寄存器的读—修改—写操作,可用来进行处理器模式切换,允许/禁止IRQ/FIQ 中断等设置。另外,进程切换或允许异常中断嵌套时,也需要使用 MRS 指令读取SPSR 状态值并保存起来。
03. MSR
在 ARM 处理器中,只有 MSR 指令可以直接设置状态寄存器 CPSR 或 SPSR。
3.1 指令的语法格式
MSR{cond} PSR_field,#immed_8r
MSR{cond} PSR_field,Rm
其中,PSR 是指 CPSR 或 SPSR。设置状态寄存器中需要操作的位。状态寄存器的 32 位可以分为 4 个 8 位的域(field)。bits[31:24]为条件标志位域,用 f 表示;bits[23:16]为状态位域,用 s 表示;bits[15:8]为扩展位域,用 x 表示;bits[7:0]为控制位域,用 c 表示;immed_8r 为要传送到状态寄存器指定域的立即数,8 位;Rm 为要传送到状态寄存器指定域的数据源寄存器。
3.2 应用示例
MSR CPSR_c,#0xD3 ;CPSR[7:0]=0xD3,切换到管理模式
MSR CPSR_cxsf,R3 ;CPSR=R3
温馨提示
只有在特权模式下才能修改状态寄存器。
程序中不能通过 MSR 指令直接修改 CPSR 中的 T 位控制位来实现 ARM 状态/Thumb状态的切换,必须使用 BX 指令来完成处理器状态的切换(因为 BX 指令属转移指令,它会打断流水线状态,实现处理器状态的切换)。MRS 与 MSR 配合使用,实现 CPSR 或 SPSR寄存器的读—修改—写操作,可用来进行处理器模式切换及允许/禁止IRQ/FIQ中断等设置。
04. 综合应用
4.1 使能 IRQ 中断
ENABLE_IRQ:MRS R0,CPSRBIC R0,R0,#0x80MSR CPSR_c,R0MOV PC,LR
4.2 禁止 IRQ 中断
DISABLE_IRQ:MRS R0,CPSRORR R0,R0,#0x80MSR CPSR_c,R0MOV PC,LR
4.3 堆栈指令初始化
INITSTACK:MOV R0,LR ;保存返回地址@ 设置管理模式堆栈:
MSR CPSR_c,#0xD3
LDR SP,StackSvc@设置中断模式堆栈:
MSR CPSR_c,#0xD2
LDR SP,StackSvc
05. 附录
11.1 ARM Architecture Reference Manual
【ARM】MRS MSR指令相关推荐
- ARM汇编:MRS和MSR指令
ARM汇编:MRS和MSR指令 ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据. 一:下面先来说说状态寄存器 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器.每个位的含义如下 ...
- 汇编指令mrs_(转)ARM汇编学习笔记——MRS和MSR指令
MRS,状态寄存器传送至通用寄存器类指令 功能:将状态寄存器的内容传送至通用寄存器. 格式: MRS{}Rd,CPSR}SPSR 其中: Rd 目标寄存器,Rd不允许R15. R=0 将CPSR中 ...
- 嵌入式:交换指令之SWP,MRS,MSR
文章目录 存储器与寄存器交换指令(SWP) 二进制编码格式 汇编格式 举例 状态寄存器与通用寄存器之间的传送指令 MRS MRS的二进制编码 汇编格式 MSR MSR的二进制编码 汇编格式 存储器与寄 ...
- ARM中MRS汇编指令
ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据. 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器.每个位的含义如下图: 分成了4部分: 1,条件标志位 N(Negative) ...
- ARM汇编MSR和MRS
ARM汇编MSR和MRS学习笔记: MRS指令用于将程序状态寄存器(CPSR)的内容传送到通用寄存器中. 当需要改变程序状态寄存器(CPSR)的内容时,用MRS将程序状态寄存器(CPSR)的值传入通用 ...
- 汇编指令msr_ARM汇编:MRS和MSR指令
1.MSR和MRS指令介绍 MRS 指令: 对状态寄存器CPSR和SPSR进行读操作.通过读CPSR可以获得当前处理器的工作状态.读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有 ...
- ARM开发基础--指令,异常源及处理过程
本文主要面向初次接触ARM的初学者,主要做基础知识的讲解与科普,希望能对初学者有所帮助. 文章目录 前言 一.什么是指令?指令有哪些? 二.常用指令 1.数据处理指令 2.数据跳转指令 3.Load/ ...
- cortex-A7 ARM 汇编常用指令 终极总结
1.处理器内部常用数据传输指令 MOV R0 R1 // 通用寄存器互传 MRS R0 CPSR // 特殊寄存器 向 通用寄存器传 MSR CPSR R1 // 通用寄存器 向 特殊 ...
- ARM汇编常用指令汇总
文章目录 ARM常见汇编指令的汇总 1.EQU 2.AREA 3.DCD 4. ENTRY 5. START 6. LDR 7. STR 8.BEQ 9.MSR/MRS 10.B/BL/BX 11.P ...
最新文章
- DNS区域文件(Zone file)的serial数值命名规则
- C#多线程编程(1)--线程,线程池和Task
- Java中读取本地图片并转为base64解决办法
- 《终于有人说出来了——Java不适合于作为主要编程教学语言》我的看法
- iOS获取缓存文件的大小并清除缓存
- MySQL 二进制日志(Binary Log)
- 7-2 银行排队问题之单窗口“夹塞”版 (30 分)
- matlab max函数_从零开始的matlab学习笔记——(14)一些有用的函数(上):最值,平均数,中位数...
- ad焊盘对参考点复制_点对点复制
- 拓端tecdat|R语言时变波动率和ARCH,GARCH,GARCH-in-mean模型分析股市收益率时间序列
- mysql日志课程_【mysql课程七】 MySQL日志管理
- Gitlab项目迁移
- perl脚本的参数输入
- AndroidStudio 编译报错 abc_list_selector_disabled_holo_light.9.png
- 用python画一个机器猫歌词_用Python语言模型和LSTM做一个Drake饶舌歌词生成器
- 刘彬20000词汇06
- Win11宽带连接错误651怎么解决?
- beyond compare
- Linux Mysql主从同步常见问题合集
- vue 在哪个生命周期进行数据请求