嵌入式:交换指令之SWP,MRS,MSR
文章目录
- 存储器与寄存器交换指令(SWP)
- 二进制编码格式
- 汇编格式
- 举例
- 状态寄存器与通用寄存器之间的传送指令
- MRS
- MRS的二进制编码
- 汇编格式
- MSR
- MSR的二进制编码
- 汇编格式
存储器与寄存器交换指令(SWP)
交换指令把字或无符号字节的读取和存储组合在了一条指令中。这种组合指令通常用于不能被外部其他存储器访问(如:DMA访问)打断的存储器操作。一般用于处理器之间或处理器与DMA控制器之间共享信息的互斥访问。
二进制编码格式
汇编格式
SWP{<cond>} {B} Rd,Rm,[Rn]
本指令将存储器中地址为Rn处的字(B=0)或无符号字节(B=1)读入寄存器Rd,同时,将Rm中同样类型的数据存入存储器中相同的位置。Rd和Rm可以相同,但与Rn应该不同。另外,PC不能出现在该指令中。
举例
LDR R0,SEMAPHORE
SWPB R1,R1,[R0] ;交换字节,将存储器单元[R0]中的字节数据读取到R1中,同时,将R1中的数据写入到存储器单元[R0]中
SWP R1,R2,[R3]; 交换字数据,将存储单元[R3]中的字数据读取到R1中,同时,将R2中的数据写入到存储单元[R3]中。
状态寄存器与通用寄存器之间的传送指令
ARM指令中有两条指令,用于在状态寄存器和通用寄存器之间传送数据。修改状态寄存器一般是通过“读取-修改-写回”三个步骤的操作来实现的。 这两条指令分别是:
- 状态寄存器到通用寄存器的传送指令(MRS)
- 通用寄存器到状态寄存器的传送指令(MSR)
MRS
MRS指令用于将状态寄存器的内容传送到通用寄存器中,它主要用于以下3种场合:
- 通过“读-修改-写”修改状态寄存器的内容。MRS用于将状态寄存器的内容读到通用寄存器中,以便修改。
- 当异常中断允许嵌套时,需要在进入异常中断后,嵌套中断发生之前,保存当前处理器模式的SPSR。这是需要先通过MRS指令读出SPSR的值,然后用其他指令将SPSR的值保存起来。
- 当进程切换时,也需要保存当前寄存器的值。
MRS的二进制编码
这里R用来区分是将CPSR还是SPSR拷贝到目的寄存器Rd,全部32位都被拷贝。
汇编格式
MRS{<cond>} Rd,CPSR|SPSR
举例:
MRS R0,CPSR ;将CPSR传送到R0 MRS R3,SPSR ;将SPSR传送到R3
注意事项:
不能通过该指令修改CPSR中的T控制位,直接将程序状态切换到Thumb状态,必须通过BX等指令实现程序状态切换。
在用户或系统模式下没有可以访问的SPSR,所以SPSR形式在这些模式下不能用。
当修改CPSR或SPSR时,必须注意保存所有未使用位的值。
这条指令不影响条件标志码。
MSR
MSR的二进制编码
操作数可以是一个寄存器Rm也可以是带循环移位的8位有效立即数,在域屏蔽的控制下传送到CPSR或SPSR。
域屏蔽控制PSR中4字节的更新,其中第16位控制PSR[7:0]是否更新,第17位控制PSR[15:8],第18位控制PSR[23:16],第19位控制PSR[31:24]。使用立即数时,只有PSR[31:24]可选择。
汇编格式
MSR{<cond>} CPSR_f | SPSR_f,#<32-bit immediate>
MSR{<cond>} CPSR_<field> | SPSR_<field>,Rm
这里的表示下列情况之一:
- c—控制域,对应PSR[7:0]
- x—扩展域,对应PSR[15:8](在当前ARM中未使用)
- s—状态域,对应PSR[23:16](在当前ARM中未使用)
- f—标志位域,对应PSR[31:24]
举例:
- 设置N、Z、C和V标志位
MSR CPSR_f,#0xF0000000 ;设置所有标志位
- 仅设置C标志位,保存N、Z和V
MRS R0,CPSR ;将CPSR传送到R0ORR R0,R0,#0x200000000 ;设置R0的第29位MSR CPSR_f,R0 ;传送回CPSR
- 从监控模式切换到IRQ模式
MRS R0,CPSR ;将CPSR传送到R0BIC R0,R0,#0x1F ;低5位清0ORR R0,R0,#0x12 ;设置为IRQ模式MSR CPSR_c,R0 ;传送回CPSR
注意事项:
在用户模式下不能对CPSR[23:0]做任何修改。
在用户或系统模式下没有SPSR,所以应尽量避免在这些模式下访问SPSR。
在嵌套的异常中断处理中,当退出中断处理程序时,通常通过MSR指令将事先保存了的SPSR内容恢复到当前程序状态寄存器CPSR中。
在修改的状态寄存器位域中包括未分配的位时,避免使用立即数方式的MSR指令。
不能通过该指令直接修改CPSR中的T控制位直接将程序状态切换到Thumb状态,必须通过BX等指令来完成程序状态的切换。
参考文献:
孟祥莲.嵌入式系统原理及应用教程(第2版)[M].北京:清华大学出版社,2017.
嵌入式:交换指令之SWP,MRS,MSR相关推荐
- 【ARM】MRS MSR指令
00. 目录 文章目录 00. 目录 01. 状态操作指令概述 02. MRS 2.1 指令的语法格式 2.2 指令示例 03. MSR 3.1 指令的语法格式 3.2 应用示例 04. 综合应用 4 ...
- 汇编指令msr_arm汇编—mrs,msr
操作系统:ubuntu10.04 汇编语言:arm 1. MRS指令 MRS指令的格式为: MRS{条件} 通用寄存器,程序状态寄存器(CPSR戒SPSR) MRS指令用亍将程序状态寄存器的 ...
- 嵌入式cmp指令的判断标志位_ARM汇编指令集
ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令. 一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中 ...
- 嵌入式cmp指令的判断标志位_嵌入式开发的基础知识
搜索了一些有关于对嵌入式开发的一些基础知识,分享给大家! 1.ARM中一些常见英文缩写解释 MSB:最高有效位: LSB:最低有效位: AHB:先进的高性能总线: VPB:连接片内外设功能的VLSI外 ...
- 嵌入式linux指令
嵌入式学习笔记(第一天) 一.文件和目录相关命令 1.pwd命令用于显示用户在文件系统中的当前位置. 2.cd命令相当于Windows鼠标点击.cd 回到家目录,cd- 回到上一级目录,cd- 回到上 ...
- 嵌入式cmp指令的判断标志位_物联网技术讲解:嵌入式开发
作为除PC端外的另一种系统,嵌入式系统应用领域极其广泛,广泛到单片机.PLC.FPGA+CPLD.ARM+Linux实际上都属于嵌入式范畴,嵌入式主要内容包括linux系统,C语言开发,数据库等. 什 ...
- 嵌入式系统——指令平均时钟数和运算速度MIPS计算
1. 指令平均时钟数计算 指令的平均时钟数=各种指令的加权平均数=(指令1数量×指令1时钟数+指令2数量×指令2时钟数+...)/(指令1数量+指令2数量+...)指令的平均时钟数 = 各种指令的加权 ...
- 嵌入式系统——指令操作扩展
指令操作码扩展 指令主要分为两部分:操作码 + 操作数.指令操作码扩展主要思想是,在给定的指令字长情况下,确定操作数的位数(双操作数.单操作数.无操作数等),再用余下的位数作为操作码的位数.指令扩 ...
- 【解决方案 七】---Git Merge时“交换文件.MERGE_MSG.swp已经存在”的问题
这篇博文是因为最近在使用git merge合并其他小伙伴的分支的时候爆出了这个问题,Swap file .MERGE_MSG.swp already exists有点儿看不懂,于是从网上搜了下,从一个 ...
最新文章
- 刻意练习:LeetCode实战 -- Task26.判断子序列
- mysql %type_mysql 存储过程 %type
- python颜色填充代码_在python tu中用颜色填充形状
- SQL Server导入导出工具弱爆了
- 靠刷算法题,真的可以刷进大厂吗?
- 为什么说减速带是脑残的设计?
- 语音识别技术的前世今生
- php省城联动_使用php ajax实现一个省市区的三级联动
- 易班 使用接口快速刷完成学习任务
- TCP/IP,Linux下多进程编程,进程复制函数fork,双返回值函数,通过父进程复制一份代码相同的子进程,父子进程执行顺序由调度算法决定,代码中获取进程执行用户的函数,数据共享状态
- tictac 立体井字棋--数学问题
- 判别分析分为r型和q型吗_r型聚类分析
- EasyCVR在调用云台控制接口时出现ptz crtl error,error code 12的原因分析
- 计算机快速看图教程,CAD快速看图使用电脑版软件操作教程
- mysql ctrl+y_mysql操作
- 实用工具WGestures全局鼠标手势
- 项目部署三---linux下Nginx安装
- 一个机器人,主要由哪几部分组成?
- 武汉前端技术和找工作微信交流群
- UVM——TLM通信(1)
热门文章
- bzoj1677:求和
- VINS-Mono之后端非线性优化 (目标函数中视觉残差和IMU残差,及其对状态量的雅克比矩阵、协方差递推方程的推导)
- SAS概念知识点 (复习1)
- kali 2022.2 安装GVM
- 如何实现按键的短按、长按检测?
- 痞子衡嵌入式:盘点国内Cortex-M内核MCU厂商高主频产品(2023)
- 建行tendyronU盾 插入电脑突然不能自动跳转IE跳出登录密码框
- 计算机怎么解除c盘用户权限,电脑c盘文件夹拒绝访问怎么办 删除c盘文件如何获得管理员权限...
- MATLAB计算信号短时平均过零率
- windows下vue-cli及webpack 构建网站(三)使用组件