文章目录

  • 存储器与寄存器交换指令(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种场合:

  1. 通过“读-修改-写”修改状态寄存器的内容。MRS用于将状态寄存器的内容读到通用寄存器中,以便修改。
  2. 当异常中断允许嵌套时,需要在进入异常中断后,嵌套中断发生之前,保存当前处理器模式的SPSR。这是需要先通过MRS指令读出SPSR的值,然后用其他指令将SPSR的值保存起来。
  3. 当进程切换时,也需要保存当前寄存器的值。

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]

举例:

  1. 设置N、Z、C和V标志位
         MSR    CPSR_f,#0xF0000000  ;设置所有标志位
  1. 仅设置C标志位,保存N、Z和V
         MRS    R0,CPSR      ;将CPSR传送到R0ORR    R0,R0,#0x200000000 ;设置R0的第29位MSR    CPSR_f,R0    ;传送回CPSR
  1. 从监控模式切换到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相关推荐

  1. 【ARM】MRS MSR指令

    00. 目录 文章目录 00. 目录 01. 状态操作指令概述 02. MRS 2.1 指令的语法格式 2.2 指令示例 03. MSR 3.1 指令的语法格式 3.2 应用示例 04. 综合应用 4 ...

  2. 汇编指令msr_arm汇编—mrs,msr

    操作系统:ubuntu10.04 汇编语言:arm 1.  MRS指令 MRS指令的格式为: MRS{条件}     通用寄存器,程序状态寄存器(CPSR戒SPSR) MRS指令用亍将程序状态寄存器的 ...

  3. 嵌入式cmp指令的判断标志位_ARM汇编指令集

    ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令. 一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中 ...

  4. 嵌入式cmp指令的判断标志位_嵌入式开发的基础知识

    搜索了一些有关于对嵌入式开发的一些基础知识,分享给大家! 1.ARM中一些常见英文缩写解释 MSB:最高有效位: LSB:最低有效位: AHB:先进的高性能总线: VPB:连接片内外设功能的VLSI外 ...

  5. 嵌入式linux指令

    嵌入式学习笔记(第一天) 一.文件和目录相关命令 1.pwd命令用于显示用户在文件系统中的当前位置. 2.cd命令相当于Windows鼠标点击.cd 回到家目录,cd- 回到上一级目录,cd- 回到上 ...

  6. 嵌入式cmp指令的判断标志位_物联网技术讲解:嵌入式开发

    作为除PC端外的另一种系统,嵌入式系统应用领域极其广泛,广泛到单片机.PLC.FPGA+CPLD.ARM+Linux实际上都属于嵌入式范畴,嵌入式主要内容包括linux系统,C语言开发,数据库等. 什 ...

  7. 嵌入式系统——指令平均时钟数和运算速度MIPS计算

    1. 指令平均时钟数计算 指令的平均时钟数=各种指令的加权平均数=(指令1数量×指令1时钟数+指令2数量×指令2时钟数+...)/(指令1数量+指令2数量+...)指令的平均时钟数 = 各种指令的加权 ...

  8. 嵌入式系统——指令操作扩展

    指令操作码扩展   指令主要分为两部分:操作码 + 操作数.指令操作码扩展主要思想是,在给定的指令字长情况下,确定操作数的位数(双操作数.单操作数.无操作数等),再用余下的位数作为操作码的位数.指令扩 ...

  9. 【解决方案 七】---Git Merge时“交换文件.MERGE_MSG.swp已经存在”的问题

    这篇博文是因为最近在使用git merge合并其他小伙伴的分支的时候爆出了这个问题,Swap file .MERGE_MSG.swp already exists有点儿看不懂,于是从网上搜了下,从一个 ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task26.判断子序列
  2. mysql %type_mysql 存储过程 %type
  3. python颜色填充代码_在python tu中用颜色填充形状
  4. SQL Server导入导出工具弱爆了
  5. 靠刷算法题,真的可以刷进大厂吗?
  6. 为什么说减速带是脑残的设计?
  7. 语音识别技术的前世今生
  8. php省城联动_使用php ajax实现一个省市区的三级联动
  9. 易班 使用接口快速刷完成学习任务
  10. TCP/IP,Linux下多进程编程,进程复制函数fork,双返回值函数,通过父进程复制一份代码相同的子进程,父子进程执行顺序由调度算法决定,代码中获取进程执行用户的函数,数据共享状态
  11. tictac 立体井字棋--数学问题
  12. 判别分析分为r型和q型吗_r型聚类分析
  13. EasyCVR在调用云台控制接口时出现ptz crtl error,error code 12的原因分析
  14. 计算机快速看图教程,CAD快速看图使用电脑版软件操作教程
  15. mysql ctrl+y_mysql操作
  16. 实用工具WGestures全局鼠标手势
  17. 项目部署三---linux下Nginx安装
  18. 一个机器人,主要由哪几部分组成?
  19. 武汉前端技术和找工作微信交流群
  20. UVM——TLM通信(1)

热门文章

  1. bzoj1677:求和
  2. VINS-Mono之后端非线性优化 (目标函数中视觉残差和IMU残差,及其对状态量的雅克比矩阵、协方差递推方程的推导)
  3. SAS概念知识点 (复习1)
  4. kali 2022.2 安装GVM
  5. 如何实现按键的短按、长按检测?
  6. 痞子衡嵌入式:盘点国内Cortex-M内核MCU厂商高主频产品(2023)
  7. 建行tendyronU盾 插入电脑突然不能自动跳转IE跳出登录密码框
  8. 计算机怎么解除c盘用户权限,电脑c盘文件夹拒绝访问怎么办 删除c盘文件如何获得管理员权限...
  9. MATLAB计算信号短时平均过零率
  10. windows下vue-cli及webpack 构建网站(三)使用组件