ARM寄存器组织(常见专用寄存器、控制寄存器CPSR)

news2024/11/24 6:54:25

目录

一、寄存器的概念

1、什么是寄存器?

2、寄存器的分类

3、不同工作模式下使用的寄存器

二、常见专用寄存器

1、R15(PC,Program Counter)

2、R14(LR,Link Register)

3、R13(SP,Stack Pointer)

三、控制寄存器CPSR

1、模式位 Bit[4:0]

2、状态位 Bit[5]

3、FIQ使能位 Bit[6] / IRQ使能位 Bit[7]

4、判断是否进位/借位 Bit[28] —— 有符号数运算

5、判断是否进位/借位 Bit[29] —— 无符号数运算

6、判断运算结果是否为 0 Bit[30] 

7、判断运算结果是否为负 Bit[31]


一、寄存器的概念

1、什么是寄存器?

寄存器是CPU内部的存储器没有地址。一般用于暂时存放参与运算的数据和结果,比如CPU在做加法运算的时候,加数、被加数以及产生的结果都是暂存在寄存器里。

2、寄存器的分类

寄存器分为三种类型,分别是通用寄存器、专用寄存器、控制寄存器。

通用寄存器指的是没有指定用途,可以存放任意内容的寄存器。既可以存放地址,也可以存放参与运算的数据或者运算产生的结果。

专用寄存器指的是有着指定用途,只能存放指定内容的寄存器。比如程序计数器PC 用于存放下一个要执行的指令的地址、SP用于存放栈顶元素的地址。

控制寄存器指的是用于控制当前CPU运行状态或者运算状态的寄存器。比如CPSR寄存器用于可以用于控制CPU当前所处工作模式,以及保存运算时的进位状态。

3、不同工作模式下使用的寄存器

看下面这个图的时候要以列为单位观察,每一列代表一种工作模式,不同工作模式使用的寄存器也不尽相同。不带三角形符号的表示不同工作模式之间可以共用的寄存器,如r0~r7是所有工作模式都可以共用的寄存器;带三角形符号的表示某一工作模式下特有的寄存器,其他工作模式无法使用该寄存器。

注意:图中虽然看着有很多寄存器,但实际上很多寄存器是可以共用的,算上共用和特有寄存器,一个处理器中仅有40个寄存器

二、常见专用寄存器

1、R15(PC,Program Counter

程序计数器,用于存储当前取址指令的地址。我们写的程序在经过预处理、编译、汇编以后,得到的二进制机器码就是指令。这些指令是被保存在内存中的,CPU接下来要执行哪一条指令都是由PC控制的。

我们写程序时的逻辑是顺序执行,那么CPU在执行指令的时候也是如此,在ARM状态下,每一条指令都占4个字节,所以每执行完一条指令,PC的值会自动自增4个字节,为下一次取指令做准备

2、R14(LR,Link Register

链接寄存器,也是保存指令地址,一般是发生跳转的时候,事先保存跳转指令下一条指令的地址,一般有两种用途。

(1) 调用函数发生跳转

假设main函数在执行程序的时候,需要调用函数func(),这个时候会跳转到func() 函数的定义。由于执行完func()函数以后还要继续运行main函数,在跳转之前LR寄存器会保存func()函数下一条指令的地址,也就是printf函数的地址。

在执行完func函数以后,只需要让 PC = LR 就可以回到func()函数下一条指令的地址。

(2) 异常发生(中断产生)

产生异常时,异常模式下的LR会自动保存被异常打断的指令的下一条指令的地址。(也可以理解成是一种函数跳转)

比如CPU正在忙手里的任务,突然收到了网卡发来的信号,CPU就会进入FIQ或者IRQ模式,此时CPU就会停下手里的任务,转而先去执行异常处理程序。异常处理结束后将LR的值复制到PC可实现程序返回。

3、R13(SP,Stack Pointer

栈指针,用于存储当前模式下的栈顶地址。假设现在CPU要将运算结果保存到栈上,这个时候SP寄存器就会告诉CPU栈顶的位置在哪,保存完毕以后,SP指向的地址会更新。

三、控制寄存器CPSR

CPSR(Current Program Status Register)是当前程序状态寄存器。可以控制处理器当前所处工作模式,可以保存运算状态,如进位、借位。

1、模式位 Bit[4:0]

用于控制处理器所处的工作模式。不同工作模式对应的取值如下:

工作模式取值(左边高位,右边低位)
User10000
FIQ10001
IRQ 10010
SVC10011
Abort 10111
Undef 11011
System11111
Monitor10110

2、状态位 Bit[5]

表示当前处理器所处状态。ARM状态下,每一条指令占4个字节,PC每次自增4;Thumb状态下,每一条指令占2个字节,PC每次自增2。

处理器状态取值
ARM状态0(默认状态)
Thumb状态1

3、FIQ使能位 Bit[6] / IRQ使能位 Bit[7]

Bit[6] 表示是否开启FIQ,默认状态是开启。

FIQ状态取值
开启0(默认状态)
关闭1

Bit[7] 表示是否开启 IRQ,默认状态是开启。

IRQ状态取值
开启0(默认状态)
关闭1

4、判断是否进位/借位 Bit[28] —— 有符号数运算

该位记录的是,当参与运算的是有符号数时,运算是否发生了进位或者借位,这里要把加法和减法分开讨论。

  • 运算器进行加法运算
    • 进位自动置 1,否则为 0
  • 运算器进行减法运算
    • 借位自动置 0,否则为 1

5、判断是否进位/借位 Bit[29] —— 无符号数运算

该位记录的是,当参与运算的是无符号数时,运算时是否发生了进位或者借位,同样要把减法和减法分开讨论。

  • 运算器进行加法运算
    • 进位自动置 1,否则为 0
  • 运算器进行减法运算
    • 借位自动置 0,否则为 1

6、判断运算结果是否为 0 Bit[30] 

当运算结果为 0 时,该位自动置 1,否则为 0

7、判断运算结果是否为负 Bit[31]

当运算结果为负数时,该位自动置 1,否则为 0

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

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

相关文章

FineReport大数据分析工具- 统一切换轮播图表接口

1. 概述 1.1 版本 报表服务器版本 功能变动 11.0 - 1.2 预期效果 某些场景下,需要让一张报表内的多个轮播图表同时切换。那么该如何实现呢?效果如下图所示: 1.3 实现思路 按钮添加点击事件,通过 JS 脚本调用接口统一切换轮播…

【模拟电路】431基准电压源

项目简介 概述 431电压基准芯片为3脚稳压集成电路,431基准电压源具有良好的热稳定性能的,三端可调分流,也被称为电压调解器或三端取样集成电路。凭借体积小、重量轻、精度高、稳定可靠、基准电压精密可调、输出电流大,且价格便宜…

LightDock、PatchDock蛋白蛋白对接软件linux端命令行使用

本文实在ubuntu下操作 DDB1-CRBN.pdb 、brd4.pdb 是需要对接的两个pdb蛋白文件 1、PatchDock 网页版:https://bioinfo3d.cs.tau.ac.il/PatchDock/php.php PatchDock有网页版,如下;软件版需要申请获取下载链接 参考:https://bioi…

QT4.8.7 打开Mupdf

一.Win10环境 1.Win10 Visual Studio 2017 安装 这个直接安装了 a.打开mupdf 源码 b.编译源码 参考这几个贴子 在Qt中调用Mupdf库进行pdf显示 mupdf-1.17.0 源代码编译、下载 qt vc pdf阅读器 我用的是mupdf-1.11-source的,用VS2017打开会有这个问题 c.修改配…

移植MQTT-C库(附源码)

Software (mqtt.org)中mqtt客户端的c库里面有一个叫MQTT-C的库,就2个实现文件,算比较简单的了,实现了基本的mqtt客户端功能,移植一下试试。 我的移植代码放在我的资源里面:https://download.csdn.net/download/oushao…

BigInteger类和BigDecimal类

BigInteger类 BigInteger适合保存比较大的整型 当在编程中遇到需要保存一个特别大的数字,比如地球的人口。 这时如果用long类型保存可能都不够了,此时就需要用到BigInteger BigInteger不能直接*/add()加subtract()减multiply()乘divide()除 使用演示&…

推荐系统学习笔记-论文研读--渐进分层抽取的多任务学习模型

研究背景 多任务相关性的复杂性和竞争性,MTL模型往往会出 现性能退化和负迁移跷跷板现象,即一项任务的性能往往会因影响其他任 务的性能而得到提高 研究成果 跷跷板现象的发现,MTL由于复杂的内在关联性而没有优于相应的单任务模型从联合表…

[附源码]Node.js计算机毕业设计仿咸鱼二手物品交易系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

11月CPI超预期放缓,下一步加息基调且看今晚

随着2022年最后一次美国“通胀报告”的公布,美联储未来政策走向决议将迎来关键时刻!12月13日晚,美国劳工部公布的报告显示,美国11月CPI同比增长7.1%,超预期放缓,增速低于预期值7.3%和前值 7.7%。美国11月核…

SSM个人饮食管理系统

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 个人饮食管理系统 网站前台:关于我们、联系我们、新闻信息、食谱信息、交流信息 管理员功能: 1、…

JavaScript(四):流程控制

流程控制if语句if else 语句(双分支语句)if -else if语句(多分支语句)三元表达式switch语句for循环while循环do while 循环continue关键字break关键字if语句 语法结构 if(条件表达式){ //条件成立执行的代…

计算摄影——风格迁移

这一章来总结一下图像风格迁移相关的内容,风格迁移的任务是将一幅图作为内容图,从另外一幅画中抽取艺术风格,两者一起合成新的艺术画,要求合成的作品即保持内容图的主要结构和主体,又能够具有风格图的风格,…

精品spring boot+MySQL新冠物资管理系统vue

《spring bootMySQL新冠物资管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 使用技术: 操作系统:Windows 10、Windows 7、Windows 8 开发语言:Java 使用框架:spring boot 前端技术&…

人乳铁蛋白:艾美捷Kamiya ELISA试剂盒解决方案

乳铁蛋白是一个分子量为80 kDa的铁结合糖蛋白,属于转铁蛋白家族 [1] 。乳铁蛋白在初乳和牛奶中含量高,在眼泪、唾液、和支气管分泌物、胆汁和胃肠液等粘膜分泌物中的含量较低。此外,乳铁蛋白也是中性粒细胞的组成成分。 1939年Sorensen等人在…

java计算机毕业设计springboot+vue健康体检信息管理系统

项目介绍 随时代变化,中国作为一个经济发展快速,人口基础较为庞大的国家,健康体检产业发展迅速。健康体检也基本上成为了每家每年必须要考虑的事情。在用户群体的规模如此庞大的基础上,以健康体检为主要内容的行业应运而生,并且随着用户数量的不断增加,其规模也随之不断发展。…

java实现延时处理

业务场景: 1、生成订单30分钟未支付,则自动取消,我们该怎么实现呢? 2、生成订单60秒后,给用户发短信 延时任务和定时任务的区别: 定时任务有明确的触发时间,延时任务没有;定时任务有执行周期,而延时任务在某事件触发后一段时间内执行,没有执行周期;定时任务一般执行的…

大三Web课程设计(可以很好的应付老师的作业) 家乡主题网页设计 我的家乡广州

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

【Redis】介绍

文章目录NoSQL 数据库Redis 数据库配套视频课: https://www.bilibili.com/video/BV1Rv41177Af/NoSQL 数据库 1、NoSQL 定义 NoSQL(Not Only SQL)泛指非关系型数据库。NoSQL不依赖业务逻辑方式存储,而以简单的key-value模式存储&…

27K测试老鸟6年经验的面试心得,四种公司、四种问题…

这里总结了下自己今年的面试情况 先说一下自己的个人情况,普通二本计算机专业毕业,懂python,会写脚本,会selenium,会性能。趁着金三银四跳槽季,面试字节跳动测试岗技术面都已经过了,本来以为是…

阿里云弹性公网ip如何从包年包月转换为按量付费(按使用流量计费)?

开通包年包月的弹性公网ip后,想将计费方式转换为按量付费(按使用流量计费)的,应该如何操作呢? 操作流程如下: 第一步,包年包月转换为按量付费(按固定带宽计费)。 1.登录…