【ARM】——当前程序状态寄存器 CPSR

这篇具有很好参考价值的文章主要介绍了【ARM】——当前程序状态寄存器 CPSR。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CPSR

Current Program Status Register 即 CPSR,当前程序状态寄存器,可以在任何处理器模式下被访问。它包含了条件标志位、中断禁止位,当前处理器模式标志以及其他的一些控制和状态位。

SPSR

除了 usr 和 sys 模式外,每一种处理器模式下都有一个专用的物理寄存器,称为 SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断程序退出时,可以用 SPSR 中保存的值来恢复 CPSR。

由于用户模式和系统模式不是异常中断模式,所以他们没有 SPSR。当在用户模式或系统模式中访问 SPSR,将会产生不可预知的结果

SPSR

Usr 模式下有一个受限的 APSR(application program status register) 寄存器用来简单的代替 CPSR
应用程序必须使用APSR来访问CPSR中可以在非特权模式下更改的部分。可访问的位包括:N Z C V Q 和 GE[3:0]。也就是说在 usr 模式下只能访问这些位。

CPSR 各个位含义

arm cpsr,# qemu ARMv7-A 篇,CPSR,SPSR,APSR,当前程序状态寄存器
需要注意的是,

  • User 模式下,不能操作 bit[4:0],即不能切换处理器模式

  • User 模式下,不能操作 A,I 和 F 位
    arm cpsr,# qemu ARMv7-A 篇,CPSR,SPSR,APSR,当前程序状态寄存器

  • N
    ALU 计算单元结果是否为负数

    • N = 1 表示运算的结果为负数
    • N = 0 表示运算的结果为正数
  • Z
    ALU 计算单元的结果是否为 0

    • Z = 1 表示运算的结果为 0
    • Z = 0 表示运算的结果不为 0
  • C
    ALU 计算单元的结果是否有进位或借位

    • 运算器进行加法运算
      进位自动置 1
      否则为 0
    • 运算器进行减法运算
      借位自动置 0
      否则为 1
  • V
    ALU 运算单元计算结果是否溢出
    对于加减运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出;通常其他指令不影响V位

  • IT[7:0]

    • IT[7:5]:指示条件执行的条件码。这3个bit用于表示先前指令的条件码,决定是否执行下一条指令。
    • IT[4:0]:指示条件执行的操作数量。这5个bit用于表示条件执行期间的操作数量。
  • J
    用于指示当前处理器是否处于Java执行状态

    • J = 0,表示处理器处于非Java执行状态。

    • J = 1,表示处理器处于Java执行状态。

      Java状态位主要用于ARM架构中支持Java虚拟机(JVM)的处理器。当处理器处于Java执行状态时,它会根据Java虚拟机的需求进行相应的优化和处理。Java状态位的具体使用和影响会根据具体的处理
      需要注意的是,Java状态位在现代ARM架构中已经不再被广泛使用,因为ARM处理器已经有更高效的方式来支持Java虚拟机。因此,在一些较新的ARM处理器中,J位可能没有具体的功能或被保留为未来的扩展使用

  • GE[3:0]
    被一些 SIMD(single instruction multi data 单指令多数据) 指令使用

    • GE[3]:指示饱和标志的第4位。
    • GE[2]:指示饱和标志的第3位。
    • GE[1]:指示饱和标志的第2位。
    • GE[0]:指示饱和标志的第1位。
      饱和标志主要用于指示算术运算的结果是否饱和。在一些特定的 SIMD 指令中,当运算结果超过了指定的范围时,会将结果饱和到最大或最小的可表示值,并将相应的饱和标志设置为1。通过检查饱和标志,可以判断运算结果是否发生。
  • E
    控制 load/store 的字节序

    • E = 1 大端模式
    • E = 0 小端模式
  • A
    禁止异步中止
    User 模式下,不能操作 A

    • A = 1 禁止异步中止
    • A = 0 允许异步中止
      异步中止是一种处理器中断机制,用于处理由于内存访问错误或其他异常情况引起的中止。通过设置或清除bit8,可以控制处理器是否响应异步中止。
  • I
    User 模式下,不能操作 I
    禁止 IRQ 中断

    • I = 0 使能 IRQ 中断
    • I = 1 禁止 IRQ 中断
  • F
    User 模式下,不能操作 F
    禁止 FIQ 中断

    • F = 0 使能 FIQ 中断
    • F = 1 禁止 FIQ 中断
  • T
    指示处理器是否处于 Thumb 状态

    • T = 0 表示 ARM 指令
    • T = 1 表示 Thumb 指令
  • M[4:0]
    User 模式下,不能操作 bit[4:0],即不能切换处理器模式
    更常见的情况是,处理器因异常事件而自动改变模式。
    处理器模式
    arm cpsr,# qemu ARMv7-A 篇,CPSR,SPSR,APSR,当前程序状态寄存器文章来源地址https://www.toymoban.com/news/detail-773613.html

到了这里,关于【ARM】——当前程序状态寄存器 CPSR的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ARM寄存器组织

     ARM有37个32位长的寄存器: 1个用做PC(Program Counter); 1个用做CPSR(Current Program Status Register); 5个用做SPSR(Saved Program Status Registers); 30个通用寄存器。 ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄存器均为32位的寄存器。6个状态寄存器,用以标识CPU的工作状

    2024年02月01日
    浏览(71)
  • ARM处理器有哪些工作模式和寄存器?各寄存器作用是什么?ARM异常中断处理流程?

    快速学习嵌入式开发其他基础知识? 返回专栏总目录 《嵌入式工程师自我修养/C语言》 Tip📌:鼠标悬停双虚线/句,可获得更详细的描述   ARM处理器有多种工作模式,如下表所示。应用程序正常运行时,ARM处理器工作在 用户模式(User mode) ,当程序运行出错或有中

    2024年02月21日
    浏览(49)
  • ARM中的寄存器

    ARM工作模式 ARM有8个基本的工作模式 User 非特权模式,一般在执行上层的应用程序时ARM处于该模式 FIQ 当一个高优先级中断产生后ARM将进入这种模式 IRQ 当一个低优先级中断产生后ARM将进入这种模式 SVC 当复位或执行软中断指令后ARM将进入这种模式 Abort 当产生存取异常时ARM将进

    2024年02月03日
    浏览(33)
  • ARM架构(寄存器点灯)

    本篇文章我们来讲解一下如何使用寄存器点亮一个LED灯,一般对于新人来说都是使用HAL库或者标准库来操作的,但是学习寄存器有助于我们了解更加深入的知识,这加会提高我们对ARM架构的理解。 首先第一步我们需要先找到LED的原理图,确定对应的引脚,然后知道是高电平点

    2024年02月15日
    浏览(51)
  • 12.3 ARM寄存器组织

    目录 ARM寄存器组织(一) 寄存器 概念 作用 分类 ARM寄存器 ARM寄存器组织(二) 专用寄存器 R15(PC,Program Counter) R14(LR,Link Register) R13(SP,Stack Pointer) ARM寄存器组织(三) CPSR寄存器 ARM寄存器组织(一) 寄存器 概念 寄存器是处理器内部的存储器,没有地址 C语言中register存储在寄

    2024年02月13日
    浏览(32)
  • ARM编程模型-寄存器组

    Cortex A系列ARM处理器共有40个32位寄存器,其中33个为通用寄存器,7个为状态寄存器。usr模式和sys模式共用同一组寄存器。 通用寄存器包括R0~R15,可以分为3类: 未分组寄存器R0~R7 分组寄存器R8~R14、R13(SP) 、R14(LR) 程序计数器PC(R15)、R8_fiq-R12_fir为快中断独有 在不同模式下,名称相同的

    2024年02月10日
    浏览(41)
  • ARM64 寄存器、常用汇编指令收集

    ARM64 有34个寄存器,包括31个通用寄存器、SP、PC、CPSR。 寄存器 位数 描述 x0-x30 64bit 通用寄存器,如果有需要可以当做32bit使用:WO-W30 FP(x29) 64bit 保存栈帧地址(栈底指针) LR(x30) 64bit 通常称X30为程序链接寄存器,保存子程序结束后需要执行的下一条指令 SP 64bit 保存栈指针,使用

    2023年04月20日
    浏览(35)
  • ARM汇编寄存器和常用指令详解

    对于32位及其以下的ARM处理器来说,函数调用规则如下: 父函数与子函数的入口参数以此通过 R0~R3 这4个寄存器传递。 父函数在调用子函数前先将子函数入口参数存入 R0~R3 寄存器中,若只有一个入口参数则使用 R0 寄存器传递,若有2个入口参数则使用 R0 和 R1 寄存器传递,以

    2024年02月03日
    浏览(45)
  • day3 ARM寄存器组织

    目录 寄存器  ARM寄存器 专用寄存器 CPSR寄存器 概念: 寄存器是处理器内部的存储器,没有地址; 作用: 一般用于暂时存放参与运算的数据和运算结果; 分类: 包括通用寄存器、专用寄存器、控制寄存器;   注:在某个特定模式下只能使用当前模式下寄存器,一个模式下

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包