嵌入式:交换指令之swp,mrs,msr

author author     2022-12-23     767

关键词:

存储器与寄存器交换指令(SWP)

交换指令把字或无符号字节的读取和存储组合在了一条指令中。这种组合指令通常用于不能被外部其他存储器访问(如:DMA访问)打断的存储器操作。一般用于处理器之间或处理器与DMA控制器之间共享信息的互斥访问。

二进制编码格式

嵌入式:交换指令之SWP,MRS,MSR_ARM

汇编格式

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的二进制编码

嵌入式:交换指令之SWP,MRS,MSR_通用寄存器_02

这里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的二进制编码如下:

嵌入式:交换指令之SWP,MRS,MSR_寄存器_03

操作数可以是一个寄存器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

这里的<field>表示下列情况之一:

  • c---控制域,对应PSR[7:0]
  • x---扩展域,对应PSR[15:8](在当前ARM中未使用)
  • s---状态域,对应PSR[23:16](在当前ARM中未使用)
  • f---标志位域,对应PSR[31:24]

嵌入式:交换指令之SWP,MRS,MSR_ARM_04

举例:

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

msr和mrs指令操作cpsr寄存器

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

)嵌入式linux之常用汇编指令(代码片段)

1.处理器内部数据传输指令数据传输指令分为一般寄存器间的数据传输或者特殊寄存器与一般寄存器间的数据传输。数据传输常用的指令有三个:MOV、MRS和MSR 用法示例:1、MOV指令MOVR0,R1@将寄存器R1中的数据传递... 查看详情

)嵌入式linux之常用汇编指令(代码片段)

1.处理器内部数据传输指令数据传输指令分为一般寄存器间的数据传输或者特殊寄存器与一般寄存器间的数据传输。数据传输常用的指令有三个:MOV、MRS和MSR 用法示例:1、MOV指令MOVR0,R1@将寄存器R1中的数据传递... 查看详情

令状态寄存器访问指令(mrs,msr)(代码片段)

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

arm指令集—swp指令

...器和寄存器之间一个字(32bit)和一个字节(8bit)的数据交换。SWP指令主要是完毕ARM体系架构处理器的同步操作。在Linux操作系统中实现信号量的操作。可是此指令在ARMv6架构后就没有採用了,而是通过扩展的LDREX和STREX实现。本... 查看详情

arm指令

...BX●访存指令:单数据访存指令,多数据访存指令,数据交换指令●异常产生指令:SWI和BKPT●协处理器指令:CDP、LDC、STC、MCR、MRCARM指令寻址方式:寄存器寻址、立即寻址、寄存器移位寻址、寄存器间接寻址、基址变址寻址、相... 查看详情

设置svc模式

清0:bic置1:orr访问cpsr和spdr要用到mrs和msr指令mrs是把状态寄存器的值赋给通用寄存器msr是把通用寄存器的值赋给状态寄存器 1.text2.global_start3_start:4breset5ldrpc,_undefined_instruction6ldrpc,_software_interrupt7ldrpc,_prefetch_abort8ldrpc,_d 查看详情

注意发现交换文件"filename.swp"

...正常关闭了文件。再次打开的时候提示 E325:注意发现交换文件"filename.swp",具体报错如下:E325:注意发现交换文件".nginx.conf.swp"      所有者:root  日期:FriJun2309:44:192017  &nbs 查看详情

豆芽八股专栏之嵌入式

嵌入式1、什么是嵌入式2、精简指令集和复杂指令集clsc 复杂指令集risc 精简指令集,处理器使用的是一些比较简单常用的指令来执行各种操作3、cpu内部架构和工作原理控制单元、运算单元、存储单元 利用cpu总线连接起来... 查看详情

vim不正常退出产生的swp文件

...电脑断电),会生成一个.swp文件,这个文件是一个临时交换文件,用来备份缓冲区中的内容。需要注意的是如果你并没有对文件进行修改,而只是读取文件,是不会产生.swp文件的。意外退出时,并不会覆盖旧的交换文件,而是... 查看详情

云小课|mrs基础入门之hdfs组件介绍(代码片段)

...本文分享自华为云社区《【云小课】EI第21课MRS基础入门之HDFS组件介绍》,原文作者:Hi,EI。HDFS针对的使用场景是数据读写具有“一次写,多次读”的特征,而数据“写”操作是顺序写,也就是在文件创建时的写 查看详情

云小课|mrs基础原理之hudi介绍(代码片段)

阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。摘要:Hudi是数据湖的文件... 查看详情

嵌入式arm设计编程处理器工作模式

...需要的朋友们自取。或者关注公众号【AIShareLab】,回复嵌入式也可获取。一、实验目的(1)通过实验掌握学会使用msr/mrs指令实现ARM处理器工作模式的切换,观察不同模式下的寄存器,加深对CPU结构的理解;(2)通过实验掌握ld... 查看详情

云小课|mrs基础原理之clickhouse组件介绍

阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。摘要:在2016年开源的高性... 查看详情

云图说丨olap开源引擎的一匹黑马,mrs集群组件之clickhouse

...云图说】第207期OLAP开源引擎的一匹黑马,MRS集群组件之ClickHouse》, 查看详情

云小课|mrs基础原理之mapreduce介绍(代码片段)

阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。摘要:MapReduce是Hadoop的核心... 查看详情

云小课|mrs基础原理之carbondata入门(代码片段)

阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。摘要:CarbonData是一种新型... 查看详情

云小课|mrs基础原理之oozie任务调度(代码片段)

阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。摘要:Oozie是一个基于工作... 查看详情