CPSR 和 SPSR

ARM Cortex-A7中CPSR与SPSR深度解析:异常处理的状态守护机制 程序状态寄存器(PSR)是ARM处理器运行时状态管理的核心抽象,其本质是反映CPU执行模式、中断使能、条件标志与指令集状态的32位硬件寄存器。基于ARMv7-A架构,CPSR作为全局可见的当前状态寄存器,与各特权模式专属的SPSR构成‘主-备’协同机制,共同支撑异常响应、上下文切换与中断嵌套等关键行为。该机制为Linux内核抢占、裸机启动流程及实时系统确定性提供硬件级保障。在STM32MP157(Cortex-A7)等典型嵌入式平台中,对CPSR位域(如NZCV、I/F/T、M[4:0])的精准操控,直接关 阅读详情
AI摘要

本文详细介绍了ARM处理器中的两种状态寄存器CPSR和SPSR的作用、格式及访问方式。CPSR用于存储条件码并在异常返回时通过SPSR恢复状态,文中还解释了条件标志位、控制位等关键概念。

CPSR:程序状态寄存器(current program status register) (当前程序状态寄存器),在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。

CPSR在用户级编程时用于存储条件码。

  SPSR:程序状态保存寄存器(saved programstatus register),每一种处理器模式下都有一个状态寄存器SPSR,SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用SPSR来恢复CPSR。由于用户模式和系统模式不是异常中断 模式,所以他没有SPSR。当用户在用户模式或系统模式访问SPSR,将产生不可预知的后果。

CPSR格式如下所示。SPSR和CPSR格式相同。
31     30    29    28     27    26              7    6     5     4    3     2     1    0
N      Z       C      V      Q     DNM(RAZ)    I      F     T    M4  M3   M2   M1  M0


***
条件标志位***
N——本位设置成当前指令运算结果的bit[31]的值。当两个表示的有符号整数运算时,n=1表示运算结果为负数,n=0表示结果为正书或零。

Z——z=1表示运算的结果为零;z=0表示运算的结果不为零。对于CMP指令,Z=1表示进行比较的两个数大小相等。

C——下面分四种情况讨论C的设置方法:
在加法指令中(包括比较指令CMP),当结果产生了进位,则C=1,表示无符号运算发生上溢出;其他情况C=0。
在减法指令中(包括减法指令CMP),当运算中发生错位,则C=0,表示无符号运算数发生下溢出;其他情况下C=1。
对于包含移位操作的非加减运算指令,C中包含最后一次溢出的的位的数值。对于其他非加减运算指令,C位的值通常不受影响。

V——对于加减运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号为溢出;通常其他指令不影响V位。

***Q标识位***
在ARM V5的E系列处理器中,CPSR的bit[27]称为q标识位,主要用于指示增强的dsp指令是否发生了溢出。同样的spsr的bit[27]位也称为q标识位,用于在异常中断发生时保存和恢复CPSR中的Q标识位。
在ARM V5以前的版本及ARM V5的非E系列的处理器中,Q标识位没有被定义。

***CPSR中的控制位***
CPSR
的低八位I、F、T、M[4:0]统称为控制位。当异常中断发生时这些位发生变化。在特权级的处理器模式下,软件可以修改这些控制位。

**中断禁止位I,F:当I=1时禁止IRQ中断,当F=1时禁止FIQ中断

**T控制位:T控制位用于控制指令执行的状态,即说明本指令是ARM指令还是Thumb指令。对于ARMV4以更高版本的T系列ARM处理器,T控制位含义如下:
T=0表示执行ARM指令
T=1表示执行Thumb指令
对于ARM V5以及更高版本的非T系列处理器,T控制位的含义如下
T=0表示执行ARM指令
T=1表示强制下一条执行的指令产生未定指令中断

***M控制位***
M
控制位控制处理器模式,具体含义如下:

M[4:0]处理器模式    可访问的寄存器
ob10000 user     pc,r14~r0,CPSR
0b10001 FIQ     PC,R14_FIQ-R8_FIQ,R7~R0,CPSR,SPSR_FIQ
0b10010 IRQ      PC,R14_IRQ-R13_IRQ,R12~R0,CPSR,SPSR_IRQ
0B10011 SUPERVISOR   PC,R14_SVC-R13_SVC,R12~R0,CPSR,SPSR_SVC
0b10111 ABORT    PC,R14_ABT-R13_ABT,R12~R0,CPSR,SPSR_ABT
0b11011 UNDEFINEED    PC,R14_UND-R8_UND,R12~R0,CPSR,SPSR_UND
0b11111 SYSTEM     PC,R14-R0,CPSR(ARM V4以及更高版本)

***CPSR中的其他位***
这些位用于将来扩展。应用软件不要操作这些位。

(CPSR,SPSR)访问指令
ARM
微处理器支持程序状态寄存器访问指令,用于在程序状态寄存器和通用寄存器之间传送数据,程序状态寄存器访问指令包括以下两条:
— MRS: 程序状态寄存器到通用寄存器的数据传送指令
— MSR: 通用寄存器到程序状态寄存器的数据传送指令

1、 MRS 指令
MRS 指令的格式为:MRS{条件} 通用寄存器,程序状态寄存器(CPSR 或SPSR)
MRS 指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下几种情况:
- 当需要改变程序状态寄存器的内容时,可用MRS 将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器。
- 当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存。
指令示例:
MRS R0,CPSR ;传送CPSR 的内容到R0
MRS R0,SPSR ;传送SPSR 的内容到R0

2、 MSR 指令
MSR 指令的格式为:MSR{条件} 程序状态寄存器(CPSR 或SPSR)_<域>,操作数
MSR 指令用于将操作数的内容传送到程序状态寄存器的特定域中。其中,操作数可以为通用寄存器或立即数。<域>用于设置程序状态寄存器中需要操作的位,32 位的程序状态寄存器可分为4 个域:
位[31:24]为条件标志位域,用f 表示;
位[23:16]为状态位域,用s 表示;
位[15:8]为扩展位域,用x 表示;
位[7:0]为控制位域,用c 表示;
该指令通常用于恢复或改变程序状态寄存器的内容,在使用时,一般要在MSR 指令中指明将要操作的域。
指令示例:
MSR CPSR,R0 ;传送R0 的内容到CPSR
MSR SPSR,R0 ;传送R0 的内容到SPSR
MSR CPSR_c,R0 ;传送R0 的内容到SPSR,但仅仅修改CPSR 中的控制位域

1 状态寄存器传送至通用寄存器类指令
功能:将状态寄存器的内容传送至通用寄存器。

格式:
MRS{<
条件码>}Rd,CPSR}SPSR
其中:
Rd      目标寄存器,Rd不允许R15。
R=0     将CPSR中的内容传送目的寄存器。
R=1     将SPSR中的内容传送至目的寄存器。

注释:
MRS
与MSR配合使用,作为更新PSR的读-修改-写序列的一部分。例如:改变处理器或清除标志Q。注意:当处理器在用户模式或系统模式下,一定不能试图访问SPSR这条指令,不影响条件码标志。
例:
MRS   R0,CRSR             ;将CPSR中的内容传送至R0
MRS   R3,SPSR             ;将SPSR中的内容传送至R3

2 .通用寄存器传送至状态寄存器传送指令
功能:将通用寄存器的内容传送至状态寄存器.

格式:
MSR{<
条件码>CPSR_f|SPSR_f,<#ommed_8r>
MSR{<条件码>CPSR_<field>|SPSR_<field>,Rm
其中:
<field>字段可以是以下之一或多种:
C:控制域屏蔽字段(PSR中的第0位到第7位);
X:扩展域屏蔽字段(PSR中的第8位到第15位);
S:状态域屏蔽字段(PSR中的第16位到第32位);
F:标志域屏蔽字段(PSR中的第24位到第31位)。
immed_8r 值数字常量的表达式。常量必须对应8位位图。该位图在32位字中循环移位偶数数位。
Rm        源寄存器。

注释:
同前一条指令(MRS)。
例1:设置N、Z、C、V标志。
MSR   CPSR_f,#&f0000000           ;仅高位有效,其他必须为0
例2:
仅置位C标志,保留N、Z、V标志。
MRS    R0,CPSR                   ;将CPSR中的内容传送至R0
ORR    R0,R0,#&1f               ;置位R0的第29位
MSR   CPSR_c,R0                  ;再将R0中的内容传送至CPSR

 

深入解析ARM状态寄存器:CPSR与SPSR的实战应用 本文深入解析ARM架构中的状态寄存器CPSR与SPSR,详细介绍了它们的结构、功能及在嵌入式开发中的实战应用。通过具体案例和代码示例,展示了如何利用CPSR进行条件执行、模式切换和异常处理,以及SPSR在多任务环境和安全模式切换中的关键作用,帮助开发者优化系统性能和解决常见问题。 阅读详情

相关推荐

深入解析ARM V8架构中的SPSR、ELR和SP:异常处理的关键寄存器

本文深入解析ARM V8架构中的SPSR、ELR和SP寄存器在异常处理中的关键作用。通过详细的技术分析和实战案例,揭示这些特殊寄存器如何协同工作以保存处理器状态、返回地址和栈指针,确保系统在异常发生时能够安全恢复。文章还提供了调试技巧和常见问题解决方案,帮助开发者更好地理解和应用ARM V8的异常处理机制。

weixin_33734785的博客 100

ARM —— CPSR与SPSR

目录CPSR简介SPSR简介

m0_58600162的博客 6760

ARM CPSR + SPSR详解

ARM CPSR + SPSR详解 1、SPSR 为 CPSR 中断时刻的副本,退出中断后,将SPSR中数据恢复到CPSR中。 2、用户模式和系统模式下SPSR不可用。

CPSR与SPSR

CPSR 程序状态寄存器,当前程序状态寄存器,在任何模式下可以被访问。包含条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。CPSR在用户编程时由于存储条件码。 SPSR 程序状态保护寄存器,每一种模式下都有一个状态寄存器SPSR,用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。用户模式和系统模式不是异常状态,所以没有SPSR,在这两种模式下访问SPSR,将产生

mec_zhang的博客 4201

LDPC码译码原理——概率公式推导

怎么说呢,一直以来都想写一下博客。近半年多来我一直在学习LDPC码译码上的东西,主要是在FPGA实现上的,所以这次想写一些关于这方面的内容,包括译码的原理、仿真以及实现。(当然是基于准循环LDPC码上实现的)不过呢,我写这个的初衷是为了让初学者理解入门用的,而不是在大牛面前班门弄斧,有错误之处欢迎大家批评指正。不知道会不会有人一开始像我一样,为了学好LDPC码,先去好好了解其它的诸如RS码或者是卷...

stand_by_me123的博客 2万+

直升机空气动力学基础--005翼型的升阻比和气动力矩

焦点与翼型有关,总升力矩可以视为附加升力与零升力迎角升力的合成,对于对称翼型,零升力力矩为0,附加升力就是总升力,其焦点就是其压力中心。对于对称翼型,零升力力矩为0,对于非对称翼型,零升力力矩存在,与不对称度成正比。对于不对称翼型,升力对焦点的力矩保持不变。

ygf666的博客 4132

CPSR和SPSR(转)

转载地址:http://blog.chinaunix.net/uid-28458801-id-3487199.html CPSR:程序状态寄存器(current program status register) (当前程序状态寄存器),在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。CPSR在用户级编程时用于存储条件码。    SPSR:...

weixin_34068198的博客 2433

保姆级教程:用ROS2 Humble和激光雷达,5分钟搞定机器人避障(附Python代码)

本文提供了一份详细的ROS2 Humble激光雷达避障实战指南,帮助开发者快速实现机器人避障功能。通过环境配置、硬件连接和Python代码实现,5分钟内即可让机器人自主避开障碍物。文章还涵盖了参数调优、常见问题排查及进阶优化技巧,适合机器人开发初学者和进阶用户。

weixin_42528902的博客 342

ARM cpsr寄存器和spsr寄存器

1、cpsr寄存器: (1)条件码标志 N、Z、C、V,最高4位称为条件码标志。ARM的大多数指令可以条件执行的,即通过检测这些条件码标志来决定程序指令如何执行。 各个条件码的含义如下: N:在结果是有符号的二进制补码情况下,如果结果为负数,则N=1;如果结果为非负数,则N=0。 Z:如果结果为0,则Z=1;如果结果为非零,则Z=0。 C:其设置分一下几种情况: 对于加法...

weixin_42325191的博客 4959

多视图学习 (Multi-View Learning)

多视角/多视图学习(Multi-view learning)是陶大成提出的一个研究方向。我们都知道,在机器学习中样本可以用不同的特征(如图片可以用LBP、SIFT等特征)来表示,或者从不同的角度进行观察(如从前后左右观察一个对象),甚至是采用不同的传感器来观测(如RGB摄像头,Depth摄像头),这些不同的观测手段、角度或特征在多视角学习中称为“视角”。多视角学习通过对不同的视角进行统一分析和研究,希望能够得到更好的分类或聚类等等的效果。

CarpeDiem 3万+

基于STM32的智能家用节能控制系统设计

该系统可以实时监测家庭的环境参数,如温湿度、光照强度和人体存在情况,根据设定的节能策略自动控制灯光、空调、风扇等家电设备,从而降低不必要的能源消耗。该基于STM32的智能家用节能控制系统通过多种传感器实现了对家庭环境的实时监测,并结合继电器控制模块实现了对家电设备的自动化控制,从而达到节能减排的效果。根据传感器获取的数据,判断是否需要开启或关闭家电设备,从而降低不必要的能源消耗,达到节能的目的。:继电器的控制引脚连接至STM32的GPIO引脚(如PB0、PB1),用于控制灯光、风扇、空调等家电设备的开关。

stm32d1219的博客 1246

汇编语言中的CPSR 和 SPSR

CPSR:程序状态寄存器(current program status register) ,cpsr在用户级编程时用于存储条件码。CPSR包含条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息。   SPSR:程序状态保存寄存器。SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。 CPSR(当前程序状态寄存器)在任何处理器模式下被访问。它包含了条件标志位、中断

3206

基于NARX和NARX-LSTM的模型辨识与MPC控制系统调试与优化

本文针对两输入单输出非线性系统,提出基于NARX和NARX-LSTM的模型辨识与MPC控制优化方案。系统输入为固定量u1和可调量u2(8.5-140),输出目标为-0.58。现有模型存在辨识精度不足、历史输出依赖过重、预测偏差等问题。解决方案包括:数据差分处理改善非平稳性、调整延迟阶数优化模型结构、引入注意力机制替代手动加权、改进损失函数消除预测偏差。MPC控制器将结合优化模型,考虑控制变量步长约束(≥2),实现输出稳定控制。通过系统性的模型调试与控制算法优化,最终形成完整的非线性系统辨识与控制框架。

huanghm88的专栏 128

汇编语言cpsr与cpsr_c,匯編語言中的CPSR 和 SPSR

CPSR:程序狀態寄存器(current program status register),cpsr在用戶級編程時用於存儲條件碼。CPSR包含條件碼標志,中斷禁止位,當前處理器模式以及其他狀態和控制信息。SPSR:程序狀態保存寄存器。SPSR用於保存CPSR的狀態,以便異常返回后恢復異常發生時的工作狀態。CPSR(當前程序狀態寄存器)在任何處理器模式下被訪問。它包含了條件標志位、中斷禁止位、當前處...

weixin_42297742的博客 793

【STM32 CubeMX】I2C中断方式与DMA方式

在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)通信协议的实现可以采用中断方式或DMA(Direct Memory Access)方式。中断方式通过触发中断来处理数据传输,而DMA方式则利用直接内存访问技术来实现数据传输,减轻了CPU的负担。在选择I2C通信方式时,开发者需要根据具体的应用需求和性能要求来选择合适的方式。STM32 CubeMX提供了图形化配置工具,使得配置I2C通信方式变得更加便捷。

m0_62599305的博客 7747

六、Tool 工具系统:让大模型拥有“手脚“

我问你一个问题:大模型能不能告诉你"北京今天天气怎么样"?能——它能用非常流畅的中文回答你不能——它不知道这个答案因为它没有联网能力,也没有实时数据。它可能会自信地编一个"今天晴,25 度"给你——这就是幻觉。问题出在哪?大模型是一个"推理引擎",不是一个"执行引擎"。它知道天气 API 怎么调用,但不能真的发出 HTTP 请求。它知道 Python 代码怎么写,但不能真的运行代码。它知道数学公式,但做不了精确的大数计算。Tool 工具系统解决的,就是这个"最后一公里"问题。

牛肉胡辣汤 159

CPSR和SPSR

CPSR SPSR 转载自:http://blog.youkuaiyun.com/jamestaosh/article/details/4369213   CPSR:程序状态寄存器(current program status register),cpsr在用户级编程时用于存储条件码。CPSR包含条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息。   SPSR:程序状态保存寄存器。SPSR用

lovelydengyu的专栏 924

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

汇编指令-MRS(读)和MSR(写)指令操作CPSR寄存器和SPSR寄存器使用(1)

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

yeasang1104的博客 1465

OV9734 DATASHEET,完整规格书

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ARMV7架构下的普通寄存器和CPSR寄存器及SPSR寄存器

APSR 他的前四位为为条件标记位,并和你的主动更新的意愿有关系 N[31]:负的条件标记 Z[30]:零的条件标记 C[29]:操作进位 V[28]:操作溢出 低五位为运算模式 但是需要特权模式才能去修改他的工作模式 T[5]:决定的是用的是ARM指令集还是Thumb指令集 A[6]:异常终止的频闭位 I [7]:中断的频闭位 F[8]:快速中断的频闭位 E[9]: 大小端序的设置 SPSR 就是用来保存异常之前的状态,用来返回现场的时候使用 ...

dongdong7_77的博客 4200

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

* CPSR 和 SPSR

CPSR:程序状态寄存器(current program status register) (当前程序状态寄存器),在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。 CPSR在用户级编程时用于存储条件码。    SPSR:程序状态保存寄存器(saved program status register),每一种处理器模式下都有一

drinkingcode 954

arm 中cpsr和spsr

spsr是用来保存cpsr状态,当异常中断发生时候,用来回退cpsr的值比如异常发生,步骤 1:将LR(R4)加偏移量,送到PC中 2:将cpsr中状态送到spsr,保存cpsr中的状态 3:如果需要禁止中断位,将中断位进行禁止(I禁止IRQ中断,F禁止FIQ中断)先对LR等寄存器进行操作,然后保存cpsr(程序状态寄存器),然后对设置中断位其中LR(R14)(还要sp(R3),PC(R15)

fourous的博客 3104
上一篇: C语言可变参数函数取参方法
下一篇: C语言函数之可变参数原理:va_start、va_arg及va_end
LinuxWorking
博客等级 码龄10年 24粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值