ARM体系中的CPSR与SPSR

发布者:Tianyun2021最新更新时间:2021-09-28 来源: eefocus关键字:ARM体系  CPSR  SPSR 手机看文章 扫描二维码
随时随地手机看文章

CPSR:程序状态寄存器(current program statusregister) cpsr在用户级编程时用于存储条件码


CPSR包含条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息。


程序状态寄存器
***************************************************************
CPSR(当前程序状态寄存器)在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。每一种处理器模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用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标识位***
在ARMV5的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=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中的其他位***
这些位用于将来扩展。应用软件不要操作这些位。

关键字:ARM体系  CPSR  SPSR 引用地址:ARM体系中的CPSR与SPSR

上一篇:ARM的异常处理过程分析(异常向量/工作模式)
下一篇:ARM 中断发生时 PC,LR,SPSR,CPSR寄存器相关问题总结

推荐阅读最新更新时间:2024-11-13 19:17

深入理解ARM体系架构(S3C6410)---S3C6410存储映射
S3C6410的物理内存分成Memory和Pheriperal两部分,地址范围分别为0x0~0x6fffffff和0x7fffffff~0xffffffff。系统通过 SPINE总线访问Memory空间,通过PERI总线访问Pheriperal空间。而为了适应不同外设的访问速度,又分别通过AHB总线访问LCD、 Camera、Accelerator等高速外设,通过APB总线访问iic、watchdog等低速外设。 Memory: (1)启动镜像区物理地址为0x00000000~0x07ffffff,共128MB,是用来启动系统的。但是这个范围内并没有实际的存储介质与之对应,只能在通过OM 选择具体的启动介质后再把相应
[单片机]
深入理解<font color='red'>ARM体系</font>架构(S3C6410)---S3C6410存储映射
RO段、RW段和ZI段的简单理解
一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将我的一些关于RO,RW和ZI的理解写出来,希望能对大家有所帮助。 要了解RO,RW和ZI需要首先了解以下知识: ARM程序的组成 此处所说的 ARM程序 是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别。 一个ARM程序包含3部分:RO,RW和ZI RO是程序中的指令和常量 RW是程序中的已初始化变量 ZI是程序中的未初始化的变量 由以上3点说明可以理解为: RO就是readonly,
[单片机]
ARM体系的7种工作模式
一、ARM体系的CPU有以下7种工作模式: 用户模式(usr)       大多数程序运行于用户模式 特权模式 系统模式(sys)       运行具有特权的操作系统任务 异常模式 中断模式(irq)       快速中断模式(fiq)     必须进快处理中断请求,并离开这个模式 管理模式(svc)       操作系统使用的保护模式 数据访问终止模式(abt)   数据或指令预取终止时进入该模式 未定义指令终止模式(und) 未定义的指令执行时进入该模式 注解: 可以通过软件来进行模式切换,或者发生各类中断、
[单片机]
<font color='red'>ARM体系</font>的7种工作模式
怎样处理ARM体系下浮点数Middle-Endian问题
由于可移植性好,相当一部分嵌入式软件都是用C/C++语言开发的,而C/C++语言编写的程序中数据存储字节顺序是与编译平台所用的CPU相关的,所以嵌入式软件移植过程中,数据存储字节顺序是需要重点处理的地方。 在嵌入式GIS软件从x86体系结构下移植到ARM体系结构的过程中,遇到了浮点数据存储字节顺序的问题。该问题既不是Big-Endian,也不是Little-Endian,而是Middle-Endian字节顺序。本文先介绍该嵌入式GIS软件开发平台和运行平台,再对移植过程中遇到的问题进行跟踪和分析。找到问题根源,最终给出两种解决方案。 1 嵌入式GIS软件 嵌入式GIS软件是用C++语言开发的,运行在PDA上的嵌入式软件
[单片机]
怎样处理<font color='red'>ARM体系</font>下浮点数Middle-Endian问题
ARM的体系结构与编程系列博客——ARM体系版本
ARM体系版本前言 很多人都知道,ARM有许多版本,口中最长说的就是ARM7\ARM9\ARM11,诚然,这个的确是ARM处理器的版本,但绝对不是ARM的版本,其实ARM到迄今为止经历了6代版本,随着时代的变化,ARM也随之变化,版本的不同其实也造就ARM的各种变种! ARM处理器系列的各种处理器,其采用的技术各不相同,性能差异很大,应用的场合也不相同,但只要它是同一个ARM体系版本,那么基于它们的应用软件是兼容的! 不难看出ARM的版本关系到了ARM的兼容性,如果你在开发过程中不了解版本的话,以为一切ARM的程序均在ARM处理器上可用的话,那么就大错特错了! 回到顶部 ARM体系版本介绍 下面将为大家详细的介绍ARM体
[单片机]
深入理解ARM体系架构(S3C6410)---S3C6410系统时钟
系统时钟控制逻辑,在S3C6410 中生成所需的系统时钟信号,用于CPU 的ARMCLK, 用于AXI/AHB 总线外设的HCLK 和APB 总线外设的PCLK。在S3C6410 中有三个PLL。一个仅用于ARMCLK,一个用于HCLK 和 PCLK,最后一个用于外设,特别用于音频相关的时钟。The third thingis for peripheral, especially for audio related clocks.通过外部提供的时钟源,时钟控制逻辑产生慢速时钟信号ARMCLK,HCLK 和 PCLK。该每个外设块的时钟信号可能被启用或禁用,由软件控制以减少电源消耗。 在电源控制逻辑中,S3C6410 有多种电源
[单片机]
深入理解<font color='red'>ARM体系</font>架构(S3C6410)---S3C6410系统时钟
ARM体系结构学习3
ARM程序状态寄存器: ARM体系结构包含1个当前程序状态寄存器(CPSR)和5个各份的程序状态寄存器(SPSRs)。使用MSR和MRS指令来设置和读取这些寄存器。   当前程序状态寄存器(CPSR),持有关于当前 处理器 状态的信息。其他5个各份的程序状态寄存器(SPSR),每个特权模式都有一个,持有完成在这个模式下的例外处理时处理器必须返回的关于状态的信息。   SPSR用来进行异常处理,其功能包括:   (1)保存ALU中的当前操作信息。   (2)控制允许和禁止中断。   (3)设置处理器的运行模式。   程序状态寄存器的每一位的安排如图所示。 图程序状态寄存器格式   1.条件码标志(Condition
[单片机]
<font color='red'>ARM体系</font>结构学习3
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved