MRS,MSR指令详解

ldr、str、ldm、stm、msr、mrs、swi、svc、mrc等ARM指令详解及具体应用 本期和大家主要分享的是ldr、str、ldm、stm、msr、mrs、swi、svc、mrc等ARM指令的具体介绍,对这些基础概念掌握后,接下来就能够读懂基本的2440A的启动代码了,也有助于自己去独立的书写启动代码,依次更好的实现自己想要实现的功能,更好的理解正式启动代码设计流程的巧妙之处,对CPU处理事务的流程以及处理细节会有更深的认识; 阅读详情
AI摘要

本文介绍ARM处理器中状态寄存器CPSR和SPSR的读写操作方法,包括MRS和MSR指令的使用,以及如何通过这些指令控制处理器模式和中断。同时,文章还提供了一个栈指针初始化的例子。

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

例如:

MRS    R1,CPSR   ; 将CPSR状态寄存器读取,保存到R1中

MRS    R2,SPSR    ; 将SPSR状态寄存器读取,保存到R2中

通过MRS指令可以取得状态寄存器里的值,然后比较其模式位M[4:0]的值判断当前所处模式,当然也可以比较其它相应位了解当前CPU的状态。

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

由于xPSR寄存器代表了CPU的状态,其每个位有特殊意义,在执行对xPSR状态寄存器写入时(读取时不存在该用法),为了防止误操作和方便记忆,将xPSR里32位分成四个区域,每个区域用小写字母表示:

c  控制域屏蔽 psr[7..0]

x  扩展域屏蔽 psr[15..8]

s  状态域屏蔽 psr[23..16]

f  标志域屏蔽 psr[31..24]

注意:区域名必须为小写字母

向对应区域进行执行写入时,使用xPSR_x可以指定写入区域,而不影响状态寄存器其它位,如:

使能IRQ中断:

ENABLE_IRQ

    MRS    R0, CPSR            ; 将CPSR寄存器内容读出到R0

    BIC    R0, R0,#0x80     ; 清掉CPSR中的I控制位

    MSR    CPSR_c,R0          ; 将修改后的值写回 CPSR寄存器的对应控制域

    MOV    PC,LR                       ; 返回上一层函数

禁用IRQ中断:

DISABLE_IRQ

    MRS    R0 CPSR                          ; 将CPSR寄存器内容读出到R0

    ORR    R0, R0,#0x80    ; 设置CPSR中的I控制位

    MSR    CPSR_c,R0          ; 将修改后的值写回 CPSR寄存器的对应控制域

    MOV    PC,LR                          ; 返回上一层函数

下表列出了不同模式的二进制数表示:

表3-3 不同工作模式对应二进制

模式名

用户

快中断

中断

管理

中止

未定义

系统

M[4:0]

10000

10001

10010

10011

10111

11011

11111

在对开发板进行初始化时,用对不同模式指定其栈空间,下面例子对各模式的栈指针sp进行初始化:

stack_init                                                            ; 栈指针初始化函数

    @ undefine_stack                                       

    msr cpsr_c, #0xdb                                   ; 切换到未定义异常

    ldr        sp, =0x34000000                        ; 栈指针为内存最高地址,栈为倒生的栈

                                                                            ; 栈空间的最后1M 0x34000000~0x33f00000

    @ abort_stack                                                      

    msr cpsr_c, #0xd7                                   ; 切换到终止异常模式

    ldr        sp, =0x33f00000                         ; 栈空间为1M,0x33f00000~0x33e00000

    @ irq_stack                                                

    msr      cpsr_c,    #0xd2                           ; 切换到中断模式

    ldr        sp, =0x33e00000                        ; 栈空间为1M,0x33e00000~0x33d00000

    @ sys_stack                                               

    msr      cpsr_c,    #0xdf                                     ; 切换到系统模式

    ldr        sp, =0x33d00000                        ; 栈空间为1M,0x33d00000~0x33c00000

    msr      cpsr_c,    #0xd3                            ; 切换回管理模式

    mov pc, lr

ARM架构MRS与MSR指令详解与应用 在ARM架构中,寄存器操作是处理器状态管理的核心。MRS和MSR指令作为特殊寄存器与通用寄存器间数据传输的关键指令,广泛应用于异常处理、状态检查和调试等场景。通过MRS指令可以读取CPSR、APSR等特殊寄存器的值,而MSR指令则用于写入这些寄存器。理解这些指令的工作原理和约束条件,对于开发高效稳定的嵌入式系统至关重要。特别是在涉及模式切换和异常处理时,正确的寄存器操作能确保系统安全性和性能。本文深入解析MRS/MSR指令的编码格式、操作语义及典型应用,帮助开发者掌握ARM架构下的底层编程技巧。 阅读详情

相关推荐

嵌入式系统(三):ARM 指令汇编(4)

(2)(3)中介绍了ARM处理区的存储访问指令,数据处理指令,分支指令,协处理器指令等,本文对其余的指令及注意事项做一补充 文章结构(5)杂项指令① 软中断指令“SWI”i.参数传递ii.执行过程② 状态寄存器读指令“MRS”③ 状态寄存器写指令状态寄存器写指令“MSR”(6)伪指令① ADR伪指令② 中等范围地址读取③ 大范围地址读取④ 空操作伪指令“NOP”3.地址对准4.位段操作5.地址的前...

csyifanZhang的博客 1988

MRS和MSR指令

一:下面先来说说状态寄存器 ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器。每个位的含义如下图 分成了4部分: 1,条件标志位 N(Negative), Z(Zero), C(Carry), V(Verflow)统称为条件标志位。ARM指令可以根据CPSR中的这些条件标志位来选择性的执行。 2,Q标志位 ARM v5的...

花开了~~~ 5045

ARM 汇编指令:MRS 和 MSR

在ARM嵌入式开发中,MRS和MSR是核心汇编指令,用于系统寄存器与通用寄存器间的数据传输。MRS读取系统寄存器(如PSR、CONTROL)到通用寄存器,用于获取CPU状态;MSR将通用寄存器值写入系统寄存器,用于配置CPU行为。这对指令在中断管理、RTOS上下文切换和模式切换中至关重要,是底层硬件控制的基础。开发者可通过内联汇编或CMSIS函数调用这些指令,实现精确的处理器控制和状态管理。

guigenyi的专栏 2364

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

域屏蔽控制PSR中4字节的更新,其中第16位控制PSR[7:0]是否更新,第17位控制PSR[15:8],第18位控制PSR[23:16],第19位控制PSR[31:24]。本指令将存储器中地址为Rn处的字(B=0)或无符号字节(B=1)读入寄存器Rd,同时,将Rm中同样类型的数据存入存储器中相同的位置。不能通过该指令直接修改CPSR中的T控制位直接将程序状态切换到Thumb状态,必须通过BX等指令来完成程序状态的切换。在修改的状态寄存器位域中包括未分配的位时,避免使用立即数方式的MSR指令。

timerring的博客 3549

SpringBoot+Maven打包实战:把项目变成SDK供其他团队调用

本文详细介绍了如何将SpringBoot项目改造并打包成可被其他项目依赖的SDK。通过调整Maven配置,剥离SpringBoot父依赖与启动类,并定制打包插件,最终生成标准的JAR依赖库,实现从“可执行应用”到“组件化SDK”的优雅转变,便于团队间功能复用。

assembly8low的博客 825

2.1 SRv6 TE Policy

SRv6 TE Policy是在SRv6技术基础上发展的一种新的隧道引流技术。SRv6 TE Policy路径表示为指定路径的段列表(Segment List),称为SID列表(Segment ID List)。每个SID列表是从源到目的地的端到端路径,并指示网络中的设备遵循指定的路径,而不是遵循IGP计算的最短路径。如果数据包被导入SRv6 TE Policy中,SID列表由头端添加到数据包上,网络的其余设备执行SID列表中嵌入的指令。

m0_70976024的博客 1237

ARM汇编:MRS和MSR指令

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

魏波 3万+

修改Avaya IP-Office电话交换机出厂自带的提示语音内容

1,本文的应用场景是在使用Avaya IP-office 500 v2电话交换机时,来电振铃超时后,会转入语音信箱,呼叫者会听到一条语音信箱留言的欢迎辞(…请留言…)。但我们单位情况比较特殊,首先是的IPO配置很精简,内嵌的语音信箱只能保留3天,用处不大;其次是用户没有收听语音信箱的习惯;第三是我们单位使用数字中继和DID,每人一个直拨号码,不通过总机转接。很多业务是单线联系,所以一旦来电无法接通,来电者可能完全无法联系到我们单位的其他同事。出于这三点原因,我们希望将语音信箱的欢迎辞,增加告知我们的总机电话

qlin4cn的博客 4917

【ARM】MRS MSR指令

00. 目录 文章目录00. 目录01. 状态操作指令概述02. MRS2.1 指令的语法格式2.2 指令示例03. MSR3.1 指令的语法格式3.2 应用示例04. 综合应用4.1 使能 IRQ 中断4.2 禁止 IRQ 中断4.3 堆栈指令初始化05. 附录 01. 状态操作指令概述 ARM 指令集提供了两条指令,可直接控制程序状态寄存器(Program State Register,PSR)。MRS 指令用于把 CPSR 或 SPSR 的值传送到一个寄存器;MSR 与之相反,把一个寄存器的内容传送到

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 2361

告别‘火龙’:实测BES2800/RK2108等主流芯片,聊聊AI眼镜的功耗与散热‘内卷’实战

本文深入探讨了AI智能眼镜在功耗与散热方面的挑战,重点分析了恒玄BES2800和瑞芯微RK2108等主控芯片的能效表现。通过实测数据和优化策略,揭示了在6nm工艺、异构计算和系统级散热方案下的实战经验,为AI眼镜的功耗管理提供了实用解决方案。

weixin_30839881的博客 945

MaixCAM2 4K AI相机硬件解析与开发实战

嵌入式AI视觉开发中,边缘计算设备的选择直接影响项目落地效果。以NPU为核心的AI加速技术通过专用指令集优化,可在低功耗下实现10+TOPS算力,典型应用包括工业质检、智能门禁等实时场景。MaixCAM2作为新一代4K AI相机,搭载AX630 SoC芯片,其双核Cortex-A53与NPU的异构架构,在运行YOLOv11n模型时可达113FPS,显著优于传统方案。开发时需注意模型量化部署技巧,如INT8量化需500+张校准图片覆盖多光照条件,避免准确率下降。设备扩展性方面,PMOD接口支持热成像、ToF传

weixin_30819085的博客 688

MSR和MRS指令

1 状态寄存器传送至通用寄存器类指令 功能:将状态寄存器的内容传送至通用寄存器。 格式: MRS{}Rd,CPSR}SPSR 其中: Rd 目标寄存器,Rd不允许R15。 R=0 将CPSR中的内容传送目的寄存器。 R=1 将SPSR中的内容传送至目的寄存器。 注释: MRS与MSR配合使用,作为更新PSR的读-修改-写序列的一部分。例如:改变处理器或清除标志Q。注意:当处理器在

leijiongbin的专栏 961

ADT MCP Server 把 ABAP 开发带进 Agent 模式

今天讨论 ADT MCP Server,不能只把它看成 Visual Studio Code 里多出来的一个开关。它真正有意思的地方,在于它把 ABAP 后端开发里那些原本需要手工点击、手工创建、手工激活、手工查服务元数据的动作,包装成一组可以被 GitHub Copilot 这类 coding agent 调用的工具。SAP 在 RAP130 练习里把它描述为运行在 ADT for Visual Studio Code 扩展内部的本地 HTTP Server,它实现的是 Model Context Pro

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 181

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

1.MSR和MRS指令介绍MRS 指令: 对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以获得当前处理器的工作状态。读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有SPSR寄存器)。MSR指令: 对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中...

weixin_33921444的博客 3540

RK3568项目(四)--uboot启动流程之启动模式选择

本章接着上面,接着来分析uboot启动流程,设计vendor、按键、驱动模式的选择等

文艺小少年的博客 584

【RH850/U2A】:功能安全

功能安全相关

3130

arm汇编指令MSR,MRS的使用

转自http://blog.youkuaiyun.com/lee244868149/article/details/41748513 ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器。每个位的含义如下图:   分成了4部分: 1,条件标志位 N(Negative), Z(Zero), C(Carry), V(Verflow)统...

qq_43418840的博客 1695

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

arm汇编指令中MRS和MSR

MRS: Move to Register from State register MSR :Move from State register to Register 1、 MRS指令 MRS指令的格式为: MRS{条件} 通用寄存器,程序状态寄存器(CPSR戒SPSR) MRS指令用亍将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下两种情冴: Ⅰ.当需要改变程序状态寄存器的内...

qq_38769551的博客 1300

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

汇编指令msr_arm汇编—mrs,msr

操作系统:ubuntu10.04汇编语言:arm1、 MRS指令MRS指令的格式为:MRS{条件} 通用寄存器,程序状态寄存器(CPSR戒SPSR)MRS指令用亍将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下两种情冴:Ⅰ.当需要改变程序状态寄存器的内容时,可用MRS将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器。Ⅱ.当在异常处理戒迕程切换时,需要保存程序状...

weixin_36368932的博客 2346

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ARM处理器模式切换(含MRS,MSR指令)

++++++++++++++++++++++++++++++++++++++++++ 本文系本站原创,欢迎转载! 转载请注明出处: http://blog.youkuaiyun.com/mr_raptor/article/details/6556172 ++++++++++++++++++++++++++++++++++++++++++ 1.1.1 ARM处理器模式切换(含MRS,MSR指令)...

mr_raptor的专栏 4万+

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

ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器。每个位的含义如下图: 分成了4部分:1,条件标志位N(Negative), Z(Zero), C(Carry), V(Verflow)统称为条件标志位。ARM指令可以根据CPSR中的这些条件标志位来选择性的执行。2,Q标志位ARM v5的E系列处理器中,CPSR的bit[27]...

weixin_29251337的博客 677

汇编指令mrs_(转)ARM汇编学习笔记——MRS和MSR指令

MRS,状态寄存器传送至通用寄存器类指令功能:将状态寄存器的内容传送至通用寄存器。格式:MRS{}Rd,CPSR}SPSR其中:Rd 目标寄存器,Rd不允许R15。R=0 将CPSR中的内容传送目的寄存器。R=1 将SPSR中的内容传送至目的寄存器。注释:MRS与MSR配合使用,作为更新PSR的读-修改-写序列的一部分。例如:改变处理器或清除标志Q。注意:当处理器在用户模式或系统模式下,一定...

weixin_30915399的博客 2636

MSR和MRS 指令

 (转)http://blog.ednchina.com/yannzi/197679/message.aspx& http://blog.sina.com.cn/s/blog_4117d8560100b432.html1  状态寄存器传送至通用寄存器类指令功能:将状态寄存器的内容传送至通用寄存器。格式:MRS{}Rd,CPSR}SPSR其中:Rd      目标寄存器,Rd不允许R

大方的专栏 6187

ARM中MRS和MSR汇编指令

转自http://blog.youkuaiyun.com/lee244868149/article/details/41748513 ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器。每个位的含义如下图:   分成了4部分: 1,条件标志位 N(Negative), Z(Zero), C(Carry), V(Verf

qingkongyeyue的博客 1万+
上一篇: ARM Cortex-M3,Cortex-M0,Cortex-A8的主要区别
下一篇: 去掉ATI显卡驱动在桌面留下的右键菜单
wang-bob
博客等级 码龄20年 356粉丝 112原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值