ARM 架构--通用寄存器状态寄存器控制寄存器特殊用途寄存器

目录

一?ARM 架构中的寄存器

ARM 架构中的寄存器

通用寄存器

状态寄存器

控制寄存器

特殊用途寄存器

总结

二 通用寄存器

ARM 架构中的通用寄存器

ARMv7 架构

ARMv8 架构

实例

ARMv7 架构

ARMv8 架构

三 状态寄存器

ARM 架构中的状态寄存器

状态寄存器

详细说明

实例

ARMv7 架构

ARMv8 枩构

四 特殊用途寄存器

ARM 架构下的特殊用途寄存器

堆栈指针 (SP)

链接寄存器 (LR)

程序计数器 (PC)

系统寄存器 (SYSREG)


一ARM 架构中的寄存器

ARM 架构中的寄存器

在 ARM 架构中,寄存器是 CPU 内部用于存储数据、地址和状态信息的关键组件。ARM 架构定义了一系列的寄存器,包括通用寄存器、状态寄存器、程序计数器等。下面是对 ARM 架构中主要寄存器的介绍:

通用寄存器

通用寄存器是一组用于存储数据和地址的寄存器。在 ARM 架构的不同版本中,这些寄存器的数量和命名有所不同。

  • R0-R15 (R0-R14 + PC):

    • 在 ARMv7 和之前的版本中,有 16 个通用寄存器,编号从 R0 到 R15。
    • R0 到 R14 用于存储数据和地址。
    • R15 通常被称为程序计数器(PC),用于存储下一条指令的地址。
  • X0-X30 (X0-X29 + SP):

    • 在 ARMv8 和之后的版本中,有 31 个通用寄存器,编号从 X0 到 X30。
    • X0 到 X29 用于存储数据和地址。
    • X30 通常被称为链接寄存器(LR),用于保存返回地址。
    • X31 通常被称为堆栈指针(SP),用于管理堆栈。

状态寄存器

状态寄存器用于存储 CPU 的状态信息,例如标志位、中断使能状态等。

  • Program Status Register (PSR):
    • PSR 是 ARM 架构中的一个重要的状态寄存器,包含了多个子寄存器,用于存储 CPU 的状态信息。
    • PSR 包括:
      • Application Program Status Register (APSR): 用于存储条件码标志位(如 N、Z、C、V 等)。
      • Implementation-defined Program Status Register (IPSR): 用于指示当前正在处理的中断。
      • Program Status Register (EPSR): 用于存储控制位,如中断使能位。

控制寄存器

控制寄存器用于控制 CPU 的行为,如中断控制、调试控制等。

  • Control Register (CTRL):
    • 用于控制某些 CPU 特性,如是否启用调试模式等。
  • Auxiliary Control Register (ACTLR):
    • 用于控制辅助特性,如性能监控单元(PMU)等。

特殊用途寄存器

除了通用寄存器和状态寄存器之外,ARM 架构还包括一些特殊用途的寄存器。

  • Stack Pointer (SP):
    • 用于管理堆栈,通常映射到通用寄存器 X31/R13。
  • Link Register (LR):
    • 用于保存返回地址,通常映射到通用寄存器 X30/R14。
  • Program Counter (PC):
    • 用于存储下一条指令的地址,通常映射到通用寄存器 X15/R15。
  • System Register (SYSREG):
    • 用于控制和监视 CPU 的各种特性和状态,如中断控制、缓存控制等。

总结

  • 通用寄存器:

    • 用于存储数据、地址等。
    • 在 ARMv7 和之前版本中,编号为 R0 到 R15。
    • 在 ARMv8 和之后版本中,编号为 X0 到 X30。
    • R15/X15 通常称为程序计数器(PC)。
    • X30 通常称为链接寄存器(LR)。
    • X31/R13 通常称为堆栈指针(SP)。
  • 状态寄存器:

    • 用于存储 CPU 的状态信息,如条件码标志位等。
    • 包括 APSR、IPSR 和 EPSR。
  • 控制寄存器:

    • 用于控制 CPU 的行为,如 CTRL 和 ACTLR。
  • 特殊用途寄存器:

    • 包括 SP、LR、PC 和 SYSREG。

这些寄存器构成了 ARM 架构的核心组成部分,对于理解和编写 ARM 架构的汇编语言程序非常重要。

二 通用寄存器

ARM 架构中的通用寄存器

在 ARM 架构中,通用寄存器是一组用于存储数据、地址和其他信息的寄存器。ARM 架构的不同版本中,通用寄存器的数量和命名有所不同。以下是 ARMv7 和 ARMv8 架构中通用寄存器的详细介绍及实例。

ARMv7 架构

在 ARMv7 架构中,有 16 个通用寄存器,编号从 R0 到 R15。这些寄存器主要用于存储数据、地址以及程序计数器等。

  • R0-R14:

    • 这些寄存器可以用于存储数据、地址等。
    • 它们在函数调用和数据处理中非常有用。
    • R0 到 R3 通常用于函数调用中的参数传递。
    • R4 到 R11 通常用于局部变量或函数内部使用的寄存器。
    • R12 通常用作临时寄存器或用于保存跨函数调用的数据。
    • R13 通常称为堆栈指针(SP),用于管理堆栈。
    • R14 通常称为链接寄存器(LR),用于保存返回地址。
  • R15 (PC):

    • R15 通常称为程序计数器(PC),用于存储下一条指令的地址。
ARMv8 架构

在 ARMv8 架构中,通用寄存器的数量增加到了 31 个,编号从 X0 到 X30。此外,还引入了 32 位和 64 位寄存器的区分,分别称为 X 寄存器和 W 寄存器。

  • X0-X29:

    • 这些寄存器可以用于存储数据、地址等。
    • 它们在函数调用和数据处理中非常有用。
    • X0 到 X3 通常用于函数调用中的参数传递。
    • X4 到 X29 通常用于局部变量或函数内部使用的寄存器。
    • X30 通常称为链接寄存器(LR),用于保存返回地址。
    • X31 通常称为堆栈指针(SP),用于管理堆栈。
  • W0-W29:

    • 这些寄存器是 X0 到 X29 的低 32 位版本,用于兼容 32 位应用。

实例

ARMv7 架构

asm

深色版本

1// ARMv7 架构示例
2// 假设 a1 寄存器中存储了一个地址,该地址指向一个整数
3// 我们将从该地址读取整数,并将其存储到 a0 寄存器中
4
5LDR R0, [R1]    @ 从 a1 指向的地址读取整数到 a0
ARMv8 架构

asm

深色版本

1// ARMv8 架构示例
2// 假设 x1 寄存器中存储了一个地址,该地址指向一个整数
3// 我们将从该地址读取整数,并将其存储到 x0 寄存器中
4
5LDR X0, [X1]    @ 从 x1 指向的地址读取整数到 x0

三 状态寄存器

ARM 架构中的状态寄存器

在 ARM 架构中,状态寄存器用于存储 CPU 的状态信息,如条件码标志位、中断使能状态等。这些寄存器对于控制 CPU 的行为非常重要。以下是 ARM 架构中主要的状态寄存器及其详细介绍:

状态寄存器
  • Program Status Register (PSR):
    • PSR 是 ARM 架构中的一个重要的状态寄存器,包含了多个子寄存器,用于存储 CPU 的状态信息。
    • PSR 包括:
      • Application Program Status Register (APSR): 用于存储条件码标志位(如 N、Z、C、V 等)。
      • Implementation-defined Program Status Register (IPSR): 用于指示当前正在处理的中断。
      • Program Status Register (EPSR): 用于存储控制位,如中断使能位。
详细说明
  • Application Program Status Register (APSR):

    • APSR 用于存储条件码标志位,这些标志位用于条件分支指令和算术运算指令。
    • APSR 中的主要标志位包括:
      • N (Negative): 如果最近的算术运算结果的最高位为 1,则置位。
      • Z (Zero): 如果最近的算术运算结果为 0,则置位。
      • C (Carry): 如果最近的算术运算产生了进位,则置位。
      • V (Overflow): 如果最近的算术运算产生了溢出,则置位。
  • Implementation-defined Program Status Register (IPSR):

    • IPSR 用于指示当前正在处理的中断。
    • 当 CPU 正在处理中断时,IPSR 中包含了中断的编号。
    • 当没有正在处理的中断时,IPSR 的值为 0。
  • Program Status Register (EPSR):

    • EPSR 用于存储控制位,如中断使能位。
    • EPSR 中的主要位包括:
      • I (Interrupt Disable): 如果置位,则禁用所有中断。
      • F (Fast Interrupt Disable): 如果置位,则禁用快速中断。
实例
ARMv7 架构

asm

深色版本

1// ARMv7 架构示例
2// 假设需要判断一个算术运算的结果是否为零
3
4// 执行一个算术运算,比如将 R0 和 R1 相加
5ADD R0, R0, R1
6
7// 判断 R0 是否为零
8// 如果 Z 标志位被置位,则 R0 为零
9// 如果 Z 标志位未被置位,则 R0 不为零
10CMP R0, #0
11BEQ .zero  ; 如果 Z 标志位被置位,则跳转到 .zero 标签
12
13// R0 不为零
14B .not_zero
15
16.zero:
17// R0 为零的情况
18...
19
20.not_zero:
21// R0 不为零的情况
22...
ARMv8 枩构

asm

深色版本

1// ARMv8 构架示例
2// 假设需要判断一个算术运算的结果是否为零
3
4// 执行一个算术运算,比如将 X0 和 X1 相加
5ADD X0, X0, X1
6
7// 判断 X0 是否为零
8// 如果 Z 标志位被置位,则 X0 为零
9// 如果 Z 标志位未被置位,则 X0 不为零
10CMP X0, #0
11BEQ .zero  ; 如果 Z 标志位被置位,则跳转到 .zero 标签
12
13// X0 不为零
14B .not_zero
15
16.zero:
17// X0 为零的情况
18...
19
20.not_zero:
21// X0 不为零的情况
22...

四 特殊用途寄存器

ARM 架构下的特殊用途寄存器

在 ARM 架构中,有一些特殊用途的寄存器,如堆栈指针(SP)、链接寄存器(LR)、程序计数器(PC)以及系统寄存器(SYSREG)。这些寄存器对于控制和管理 CPU 的行为至关重要。下面是这些寄存器的详细介绍及使用实例:

堆栈指针 (SP)

  • 用途:

    • SP 用于指示当前堆栈的顶部位置。
    • 在函数调用期间,参数、局部变量以及返回地址都会被压入堆栈。
    • SP 的值会随着堆栈操作的变化而更新。
  • 实例:

asm

深色版本

1// ARMv7 架构示例
2// 假设需要保存当前堆栈指针的值
3// 然后修改 SP,最后恢复 SP 的值
4
5// 保存当前堆栈指针的值到 R1
6MOV R1, SP
7
8// 修改 SP,例如向下移动 4 个字节
9SUB SP, SP, #4
10
11// 执行一些操作
12...
13
14// 恢复 SP 的原始值
15MOV SP, R1

链接寄存器 (LR)

  • 用途:

    • LR 通常用于保存函数调用的返回地址。
    • 在函数调用期间,返回地址会被自动保存到 LR。
    • 当函数返回时,通常通过 LR 来恢复程序执行的流程。
  • 实例:

asm

深色版本

1// ARMv7 架构示例
2// 假设需要调用一个函数并返回
3
4// 保存 LR 到 R1
5STR LR, [R1]
6
7// 调用函数
8BL my_function
9
10// 返回后,从 R1 恢复 LR 的值
11LDR LR, [R1]

程序计数器 (PC)

  • 用途:

    • PC 用于存储下一条指令的地址。
    • 在正常执行过程中,每条指令执行完毕后,PC 会自动更新到下一条指令的地址。
    • 条件分支指令和函数调用也会修改 PC 的值。
  • 实例:

asm

深色版本

1// ARMv7 架构示例
2// 假设需要跳转到一个特定的地址
3
4// 将目标地址加载到 R1
5LDR R1, =target_address
6
7// 将 R1 的值复制到 PC
8MOV PC, R1
系统寄存器 (SYSREG)
  • 用途:

    • SYSREG 用于控制和监视 CPU 的各种特性。
    • 这些寄存器可以用于控制中断、缓存、调试等功能。
    • 例如,控制中断使能的寄存器是 CTR_ELx,控制缓存的寄存器是 DC_CSW_ELx。
  • 实例:

asm

深色版本

1// ARMv8 构架示例
2// 假设需要禁用中断
3
4// 禁用中断
5MSR DAIFClr, #0x10  ; 设置 I 位为 1,禁用中断
6
7// 执行一些不受中断影响的操作
8...
9
10// 恢复中断
11MSR DAIFClr, #0x00  ; 清除 I 位,恢复中断

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

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

相关文章

macrodroid通过http请求控制手机运行宏

macrodroid adb命令 adb shell pm grant com.arlosoft.macrodroid android.permission.WRITE_SECURE_SETTINGS例:http请求手机播放指定MP3文件 声音素材_电量过低提醒 新建一个宏 添加触发器-连接-http服务器请求 路径随意填,最好不要有特殊符号,不然浏览器识别链接会出错,…

【CSS in Depth 2 精译_098】17.3:CSS 动画延迟技术与填充模式设置 + 17.4:通过 CSS 动画传递意图的秘诀

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第五部分 添加动效 ✔️【第 17 章 动画】 ✔️ 17.1 关键帧17.2 3D 变换下的动画设置 17.2.1 添加动画前页面布局的构建17.2.2 为布局添加动画 17.3 动画延迟与填充模式 ✔️17.4 通过动画传递意图…

慧集通客户案例:致远OA与熵基考勤机集成方案

本原型公司是一家专注大健康产业的综合性高新科技形实体企业,按照单位的战略业务布局,围绕“做强做优、世界一流”的目标,加快内外部资源整合、加强业务协同、优化资源配置,有序推进大健康及相关产业的有机融合,加快构…

深度学习笔记(6)——循环神经网络RNN

循环神经网络 RNN 核心思想:RNN内部有一个“内部状态”,随着序列处理而更新 h t f W ( h t − 1 , x t ) h_tf_W(h_{t-1},x_t) ht​fW​(ht−1​,xt​) h t h_t ht​是new state, h t − 1 h_{t-1} ht−1​是old state, x t x_t xt​是当前时间步的输入,所有时间步共享 f W…

电脑卡顿救星,Mem Reduct 智能清理 10%以上内存

作为一款专业的内存优化工具,Mem Reduct凭借其强大的功能和极致的性能表现,成为众多用户管理系统内存的首选软件。它采用先进的内存管理算法,通过调用系统底层API接口,能够智能识别并清理各类内存占用,包括但不限于系统…

kibana启动报错:Invalid character in header content [“kbn-name“]

启动时候kibana报错: 打开 kibana配置文件,config/kibana.yml,配置上server.name即可,如下:

短视频矩阵系统后端源码搭建实战与技术详解,支持OEM

一、引言 随着短视频行业的蓬勃发展,短视频矩阵系统成为了众多企业和创作者进行多平台内容运营的有力工具。后端作为整个系统的核心支撑,负责处理复杂的业务逻辑、数据存储与交互,其搭建的质量直接影响着系统的性能、稳定性和可扩展性。本文将…

sql group by 多个字段例子

有表如下; 获取某年份、某地区、某产品的销售总额, 或者根据需要把字段顺序换一下; insert into sales (product, year, region, amount) values (飞机,2000,东部,5); insert into sales (product, year, region, amount) values (飞机,2001,…

RBAC权限控制

1、Spring Security 是一个功能强大的Java安全框架,它提供了全面的安全认证和授权的支持。 2 SpringSecurity配置类(源码逐行解析) Spring Security的配置类是实现安全控制的核心部分 开启Spring Security各种功能,以确保Web应…

ArcGIS Pro地形图四至角图经纬度标注与格网标注

今天来看看ArcGIS Pro 如何在地形图上设置四至角点的经纬度。方里网标注。如下图的地形图左下角经纬度标注。 如下图方里网的标注 如下为本期要介绍的例图,如下: 图片可点击放大 接下来我们来介绍一下 推荐学习:GIS入门模型构建器Arcpy批量…

Kubernetes Gateway API-2-跨命名空间路由

1 跨命名空间路由 Gateway API 具有跨命名空间路由的核心支持。当多个用户或团队共享底层网络基础设施时,这很有用,但必须对控制和配置进行分段,以尽量减少访问和容错域。 Gateway 和 Route(HTTPRoute,TCPRoute,GRPCRoute) 可以部署到不同的命名空间中,路由可以跨命名空间…

Web API和Web Services的区分

前些年一提及自动化测试,大多是指UI界面层的自动化测试。近几年,随着分层自动化测试概念的兴起,以及自动化测试自身的发展与细分,自动化测试包含了更多的内容。 API(Application ProgrammingInterface,应用程序编程接…

使用c#制作坐标

1、建立坐标 2、坐标系的放大缩小 3、标定刻度 4、实时显示鼠标在坐标系上的坐标 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using S…

JVM实战—JVM内存设置与对象分配流转

1.JVM内存划分的原理细节 (1)背景引入 接下来介绍JVM内存的分代模型:新生代、老年代、永久代。现在已知代码里创建的对象,都会进入到Java堆内存中。如下所示,main()方法会周期性执行loadReplicasFromDisk()方法来加载副本数据。 public class…

Debian 12 安装配置 fail2ban 保护 SSH 访问

背景介绍 双十一的时候薅羊毛租了台腾讯云的虚机, 是真便宜, 只是没想到才跑了一个月, 系统里面就收集到了巨多的 SSH 恶意登录失败记录. 只能说, 互联网真的是太不安全了. 之前有用过 fail2ban 在 CentOS 7 上面做过防护, 不过那已经是好久好久之前的故事了, 好多方法已经不…

ASP.NET Core Web API Hangfire

ASP.NET Core Web API Hangfire 前言一、安装二、相关代码1.代码片段2.代码片段3.运行效果 三、测试代码1.即发即弃作业2.延迟作业3.重复作业4.延续作业5.页面调度作业 前言 👨‍💻👨‍🌾📝记录学习成果,以…

实用技巧:关于 AD修改原理图库如何同步更新到有原理图 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/144738332 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

【Ubuntu 20.4安装截图软件 flameshot 】

步骤一: 安装命令: sudo apt-get install flameshot 步骤二: 设置快捷方式: Ubuntu20.4 设置菜单,点击 号 步骤三: 输入软件名称, 软件快捷命令(flameshot gui)&am…

ue5 pcg(程序内容生成)真的简单方便,就5个节点

总结: 前情提示 鼠标单击右键平移节点 1.编辑-》插件-》procedural->勾选两个插件 2.右键-》pcg图表-》拖拽进入场景 3.先看点point 右键-》调试(快捷键d)->右侧设置粒子数 3.1调整粒子数 可以在右侧输入框,使用加减乘除 4.1 表面采样器 …

JavaWeb(一) | 基本概念(web服务器、Tomcat、HTTP、Maven)、Servlet 简介

1. 基本概念 1.1、前言 web开发: web,网页的意思,www.baidu.com静态 web html,css提供给所有人看的数据始终不会发生变化! 动态 web 淘宝,几乎是所有的网站;提供给所有人看的数据始终会发生变化&#xf…