ARM 37 个通用寄存器详解

news2025/3/1 0:28:28

一、简介

1、ARM 总共有 37 个寄存器,但是每种模式下最多只能看到 18 个寄存器,其他寄存器虽然名字相同,但是在当前模式不可见。
2、例如,对 r13 这个名字来说,在 ARM 中共有 6 个名叫 r13(又叫 sp)的寄存器,但是在每种特定处理器模式下,只有一个 r13 是当前可见的,其他的 r13 必须切换到它们的对应模式下才能看到。这种设计叫影子寄存器(banked register)。
3、这 37 个寄存器的地址都是不一样的,虽然它们可以有相同的名字。同时,有些寄存器甚至还有别名,比如在汇编代码中,r15 寄存器也写作 pc 寄存器。

在这里插入图片描述


二、CPU 通用寄存器的切换示意图

1、

当前处在 User 用户模式 下,可以看到所有 r0 ~ r15 寄存器、以及 cpsr 寄存器。

在这里插入图片描述


2、

某一时刻,CPU 切换到 FIQ 模式。此时, 寄存器列表中的 r8 ~ r14 寄存器将是属于 FIQ 模式自身的寄存器,这几个 r8 ~ r14 寄存器,与 User 模式的 r8 ~ r14 寄存器是不同的寄存器,只是名字相同。

并且,FIQ 模式下的 spsr 寄存器将会保存 User 模式下的 cpsr 寄存器的状态;等到切换回 User 模式的时候, spsr 寄存器就会将它保存的值,赋值给 User 模式下的 cpsr 寄存器,实现恢复的效果。

同理,其他任何一种模式切换的动作,都是类似的。 在这里插入图片描述


3、

回到用户模式下。

在这里插入图片描述


4、

User 模式切换到 IRQ 模式

在这里插入图片描述


5、

回到用户模式下。

在这里插入图片描述


6、

User 模式切换到 SVC 模式

在这里插入图片描述


7、

回到用户模式下。

在这里插入图片描述


8、

User 模式切换到 Undef 模式

在这里插入图片描述


9、

回到用户模式下。

在这里插入图片描述


10、

User 模式切换到 Abort 模式

在这里插入图片描述


11、

回到用户模式下。

在这里插入图片描述


12、

下图是 CPU 各种工作模式切换过程的 寄存器变化 示意图,图中写清楚了:各种工作模式下都会使用到 User mode 中使用的寄存器。

  • 对于 sp(栈指针寄存器)和 lr (链接寄存器,用于函数返回),每一种模式都会有属于自己的栈空间,因此每个模式都需要属于自己的 sp(栈指针寄存器),用于恢复和保存自身工作模式下的栈空间现场;同理,每个工作模式都会有属于自己的 lr 寄存器,比如 IRQ 模式下进行了函数调用,IRQ 模式的 lr 寄存器用于保存 IRQ 模式进行函数调用时的返回地址,当函数调用执行结束后,回到被调用的地址处,继续往下执行 IRQ 模式下的剩余代码。
  • spsr 寄存器用于保存和恢复 cpsr 寄存器的值。当处于 User 模式时,User 模式拥有一个 cpsr 寄存器的值。某个时刻,从 User 模式切换到 IRQ 模式,IRQ 模式使用和 User 模式同一个 cpsr 寄存器,此时需要用 IRQ 模式的 spsr 寄存器保存属于 User 模式的 cpsr 寄存器的值。这样,当从 IRQ 模式退出返回到 User 模式时, IRQ 模式的 spsr 寄存器就可以把 User 模式的 cpsr 寄存器值恢复回去。
  • 注意:System 模式使用 User 模式寄存器集。

在这里插入图片描述


总结

  • ARM 共有 37个寄存器,都是 32 位长度。
  • 37 个寄存器中 30 个为“通用”型,1 个固定用作 PC,一个固定用作 CPSR,5 个固定用作 5 种异常模式下的 SPSR。
  • 上述的 30 个为“通用”型,是指这 30 个寄存器区别于后面的寄存器:PC 寄存器固定只能是 r15 寄存器,不能将其他寄存器作为 PC 寄存器使用; CPSR 和 SPSR 寄存器也是固定的,不能将其他寄存器作为 PC 寄存器使用。

三、CPSR程序状态寄存器

CPSR(当前程序状态寄存器) 可以在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。每一种处理器模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断程序退出时,可以用SPSR中保存的值来恢复CPSR。

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

CPSR的格式如下所示。SPSR格式与CPSR格式相同

在这里插入图片描述


1 、条件标志位

N(Negative)、Z(Zero)、C(Carry)及V(oVerflow)统称为条件标志位。大部分的ARM指令可以根据CPSR中的这些条件标志位来选择性地执行。各条件标志位的具体含义如表1.5所示。
在这里插入图片描述
以下指令会影响CPSR中的条件标志位:

  • 比较指令,如CMP、CMN、TEQ及TST等。
  • 当一些算术运算指令和逻辑指令的目标寄存器不是R15时,这些指令会影响CPSR中的条件标志位。
  • MSR指令可以向CPSR/SPSR中写入新值。
  • MRC指令将R15作为目标寄存器时,可以把协处理器产生的条件标志位的值传送到ARM处理器。
  • 一些LDM指令的变种指令可以将SPSR的值复制到CPSR中,这种操作主要用于从异常中断程序中返回。
  • 一些带“位设置”的算术和逻辑指令的变种指令,也可以将SPS的值复制到CPSR中,这种操作主要用于从异常中断程序中返回。

2、CPSR中的控制位

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

(1) 中断禁止位
① 当 I=1 时禁止IRQ中断。
② 当 F=1 时禁止FIQ中断。

(2) T控制位
T控制位用于控制指令执行的状态,即说明本指令是ARM指令,还是Thumb指令。对与不同版本的ARM处理器,T控制位的含义不同。

对于ARMv3以及更低的版本和ARMv4的非T系列版本的处理器,没有ARM状态和Thumb状态切换,T控制位应为0。

对于ARMv4以及更高的版本的T系列的ARM处理器,T控制位的含义如下。
①T=0表示执行ARM指令。
②T=1表示执行Thumb指令。
对于ARMv5以及更高的版本的非T系列的ARM处理器,T控制位的含义如下。
①T=0表示执行ARM指令。
②T=1表示强制下一条执行的指令产生未定义指令中断。

(3) M 控制位
控制位 M[4:0] 控制处理器模式,具体含义如表1.6所示。
在这里插入图片描述

3、注意

  • CPSR中各个bit位表明了CPU的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(譬如BLE指令中的E就和CPSR中的Z标志位有关);
  • CPSR中的 I、F位和开中断、关中断有关;
  • CPSR中的mode位 (bit4~bit0共5位) 决定了CPU的工作模式,在uboot代码中会使用汇编进行设置;

四、PC(r15)程序控制寄存器

  • PC(Program control register)为程序指针,PC 指向哪里,CPU 就会执行哪条指令(所以程序跳转时就是把目标地址代码放到 PC 中);
  • 整个 CPU 中只有一个 PC(CPSR 也只有一个,但 SPSR 有 5 个);

B站朱友鹏老师.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/38959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot SpringBoot 原理篇 1 自动配置 1.10 bean 的加载方式【八】

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.10 bean 的加载方式【八】1.10.1 BeanDefinitionRegistryPostPro…

ABAP学习笔记之——第五章:内表

内表: 内表是可以在程序内部定义且使用的表,属于本地表。 与C语言比较: C语言的数组和内表比较: 内表是动态数组(Dynamic Data Object) INITIALSIZE 语句并非实际占用内存空间,而只是预约(RESERVE)内存空间。 创建…

Python每日一练 06

Python每日一练 06 文章目录Python每日一练 06while循环实例一、斐波那契数列前n项实例二、Leibniz公式计算圆周率while循环 循环结构表示程序重复执行某个或某些操作,直到某条件为假(或为真)时才可终止循环。 在问题求解过程中,…

[算法笔记]最长递增子序列和编辑距离

最长递增子序列 例如对于 a[] {2,1,5,3,6,4,8,9,7}其最长递增子序列为{1,3,4,8,9}所以长度(或者说是结果)为5。 对于a[0...n-1],用dp[i]表示a[0...i]中以a[i]结尾的最长递增子序列长度 其状态状态方程: dp[i]1 // 0≤i≤…

【无人机通信优化】基于粒子群算法的多跳无线网络部署优化附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

[附源码]SSM计算机毕业设计时事资讯平台JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Date对象

文章目录Date日期对象Date对象的创建格式化日期3.获取Date总的毫秒数(时间戳),是距离1970年1月1日过了多少毫秒数。二:常用时间获取方法三:日期设置方法四:时间转字符串菜鸟工具:https://www.runoob.com/jsref/jsref-o…

在Express框架使用ORM模型访问关系型数据库

一、ORM模型:设计思想,主要目的是简化计算机程序访问数据库 1、ORM:对象关系模型(对象关系映射) Object Releastion Model,将程序中的对象和数据库中关系(表格)进行映射。可以使开发者在程序中方便的对数据库进行操作(用户在程序操作对对象实…

【网页制作课作业】用HTML+CSS制作一个简单的学校网页(9页)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

一文熟悉 Go 的分支结构(if - else-if - else、switch)

哈喽大家好,我是陈明勇,今天分享的知识是 Go 的分支结构。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出&a…

Python爬虫脚本+XML解析实现自动保存某商城的商品图

文章目录 1.背景介绍2.代码分析2.1.创建图片保存的目录2.2.定一下载函数2.3.发送请求解析数据2.源代码(全)1.背景介绍 Python脚本可以实现数据的爬取,而XML可以解析网页数据。将Python爬虫脚本与XML解析功能相结合,可以实现自动保存某商城的商品图功能。 注:本功能仅用于…

基于AlexNet卷积神经网络的手写体数字识别系统研究-附Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、手写体数字识别系统✳️ 2.1 MNIST 数据集✳️ 2.2 CNN✳️ 2.3 网络训练✳️ 三、手写体数字识别结果✳️ 四、参考文献✳️ 五、Matlab代码获取✳️ 一、引言 手写数字识别是计算机视觉领域中的一个重要应用,已广泛应用在很…

电动汽车充电站的最优选址matlab程序

​摘要:以规划期内充电站的总成本 (包括投资、运行和维护成本)和网损费用之和最小为目标,考虑了相关的约束条件,构造了电动汽车充电站最优规划的数学模型, 关键词:电动汽车;充电站&a…

角色扮演?一款跨平台可移植开源游戏

程序员宝藏库:gitee.com/sharetech_lee/CS-Books-Store DevWeekly收集整理每周优质开发者内容,包括开源项目、资源工具、技术文章等方面。 每周五定期发布,同步更新到 知乎:Jackpop 。 欢迎大家投稿,提交issue&#…

支付系统设计概览

前言 就个人对支付的一些理解和经验,在此编辑出来和大家一起交流分享。请大佬多多指正。 在各种互联网场景中,牵扯到交易的情况,大多都需要支付系统的支持。支付系统往往不是一蹴而就的,往往都是随着业务的不断扩展,…

【python】面向对象程序设计(基础篇)

个人主页:天寒雨落的博客_CSDN博客-初学者入门C语言,python,数据库领域博主 💬 热门专栏:python_天寒雨落的博客-CSDN博客 ​每日赠语:没有窘迫的失败,就不会有自豪的成功;失败不可怕,只要能从失…

浅识vue的虚拟DOM和渲染器

虚拟DOM本质上是对DOM的抽象描述,就是一个普通的js对象。他身上的属性要比真实DOM的属性要少得多。 在一定情况下,使用虚拟DOM的性能要逊于直接使用真实DOM。 例如,在页面一开始的时候,Vue需要先通过生成虚拟DOM树,在…

【雷达通信】雷达探测项目仿真附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

《恋上数据结构与算法》第1季:链表原理实现(图文并茂)

数据结构与算法的学习笔记目录:《恋上数据结构与算法》的学习笔记 目录索引链表原理实现一、链表二、链表的设计三、链表的接口设计四、链表接口的实现1. 索引越界的判断2. 根据索引查找指定节点3. 添加数据4. 插入元素5. 删除元素6. 清空元素7. 修改元素8. 查找元素…

傻白入门芯片设计,RDL/Interposer/EMIB/TSV(三)

目录 一、再分配层(RDL) 二、硅中介层(Si Interposer):Active and Passive 三、嵌入式硅桥(EMIB) 四、硅通孔 TSV(Through Silicon Vias) 一、再分配层(R…