ARM 架构--通用寄存器/状态寄存器/控制寄存器/特别用途寄存器 ...

涛声依旧在  金牌会员 | 2024-9-22 09:23:06 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 792|帖子 792|积分 2376

目录

一 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. 1// ARMv7 架构示例
  2. 2// 假设 a1 寄存器中存储了一个地址,该地址指向一个整数
  3. 3// 我们将从该地址读取整数,并将其存储到 a0 寄存器中
  4. 4
  5. 5LDR R0, [R1]    @ 从 a1 指向的地址读取整数到 a0
复制代码
ARMv8 架构

asm
深色版本
  1. 1// ARMv8 架构示例
  2. 2// 假设 x1 寄存器中存储了一个地址,该地址指向一个整数
  3. 3// 我们将从该地址读取整数,并将其存储到 x0 寄存器中
  4. 4
  5. 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. 1// ARMv7 架构示例
  2. 2// 假设需要判断一个算术运算的结果是否为零
  3. 3
  4. 4// 执行一个算术运算,比如将 R0 和 R1 相加
  5. 5ADD R0, R0, R1
  6. 6
  7. 7// 判断 R0 是否为零
  8. 8// 如果 Z 标志位被置位,则 R0 为零
  9. 9// 如果 Z 标志位未被置位,则 R0 不为零
  10. 10CMP R0, #0
  11. 11BEQ .zero  ; 如果 Z 标志位被置位,则跳转到 .zero 标签
  12. 12
  13. 13// R0 不为零
  14. 14B .not_zero
  15. 15
  16. 16.zero:
  17. 17// R0 为零的情况
  18. 18...
  19. 19
  20. 20.not_zero:
  21. 21// R0 不为零的情况
  22. 22...
复制代码
ARMv8 枩构

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

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

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



  • 用途:

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

  • 实例:
asm
深色版本
  1. 1// ARMv7 架构示例
  2. 2// 假设需要保存当前堆栈指针的值
  3. 3// 然后修改 SP,最后恢复 SP 的值
  4. 4
  5. 5// 保存当前堆栈指针的值到 R1
  6. 6MOV R1, SP
  7. 7
  8. 8// 修改 SP,例如向下移动 4 个字节
  9. 9SUB SP, SP, #4
  10. 10
  11. 11// 执行一些操作
  12. 12...
  13. 13
  14. 14// 恢复 SP 的原始值
  15. 15MOV SP, R1
复制代码
链接寄存器 (LR)



  • 用途:

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

  • 实例:
asm
深色版本
  1. 1// ARMv7 架构示例
  2. 2// 假设需要调用一个函数并返回
  3. 3
  4. 4// 保存 LR 到 R1
  5. 5STR LR, [R1]
  6. 6
  7. 7// 调用函数
  8. 8BL my_function
  9. 9
  10. 10// 返回后,从 R1 恢复 LR 的值
  11. 11LDR LR, [R1]
复制代码
程序计数器 (PC)



  • 用途:

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

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



  • 用途:

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

  • 实例:
asm
深色版本
  1. 1// ARMv8 构架示例
  2. 2// 假设需要禁用中断
  3. 3
  4. 4// 禁用中断
  5. 5MSR DAIFClr, #0x10  ; 设置 I 位为 1,禁用中断
  6. 6
  7. 7// 执行一些不受中断影响的操作
  8. 8...
  9. 9
  10. 10// 恢复中断
  11. 11MSR DAIFClr, #0x00  ; 清除 I 位,恢复中断
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表