ARM 64bit 和 32bit 不同模式下的寄存器资源对比

在 ARM 架构中,无论是 32 位还是 64 位模式下,都有不同的处理器模式和相应的寄存器资源。这些模式决定了当前执行环境的特权级别以及可用的寄存器集合。以下是 ARM 在 64 位(AArch64)和 32 位(AArch32)架构下的不同模式及其对应的寄存器资源概述。

AArch64 (ARM 64-bit)

AArch64 模式下,ARM 架构定义了若干个异常级别(Exception Levels),每个级别对应不同的特权等级。AArch64 主要有以下几种模式:

  • EL0:用户模式。
  • EL1:操作系统内核模式。
  • EL2:虚拟化支持,用于管理程序(Hypervisor)。
  • EL3:最高安全级别,用于安全监控代码(如 TrustZone 的 Secure Monitor)。

寄存器资源

  • 通用寄存器

    • 31 个 64 位通用寄存器 (X0-X30),其中 X30 通常用作链接寄存器(LR)。
    • 可以访问低 32 位作为独立的 32 位寄存器 (W0-W30)。
  • 堆栈指针 (SP)

    • 每个异常级别有自己的专用堆栈指针(SP_EL0, SP_EL1, SP_EL2, SP_EL3),但 EL0 不使用 SP_EL0,而是与 EL1 共享一个 SP。
  • 程序计数器 (PC)

    • 不直接可访问,通过分支指令隐式修改。
  • 当前程序状态寄存器 (PSTATE)

    • 包含当前处理器的状态信息,如条件标志、中断屏蔽等,取代了传统的 CPSR 和 SPSR。
  • 异常链接寄存器 (ELR)

    • 每个异常级别有一个 ELR,保存发生异常时的返回地址。
  • 保存程序状态寄存器 (SPSR)

    • 每个异常级别有一个 SPSR,用于保存发生异常前的状态。

AArch32 (ARM 32-bit)

AArch32 模式下,ARM 定义了多种处理器模式,每种模式都有其特定的角色和可用寄存器集。主要模式包括:

  • User (usr):普通应用程序执行模式。
  • FIQ (fiq):快速中断请求模式。
  • IRQ (irq):标准中断请求模式。
  • Supervisor (svc):操作系统保护模式。
  • Monitor (mon):安全监控模式(TrustZone)。
  • Abort (abt):数据或预取中止处理模式。
  • Undefined (und):未定义指令处理模式。
  • System (sys):系统管理模式,具有与 User 模式相同的寄存器访问权限但拥有更高的特权。

寄存器资源

  • 通用寄存器

    • 15 个 32 位通用寄存器 (R0-R12)。
    • R13 常用作堆栈指针 (SP)。
    • R14 为链接寄存器 (LR),用于存储函数调用的返回地址。
    • R15 是程序计数器 (PC)。
  • 堆栈指针 (SP)

    • 每个模式可以有自己独立的堆栈指针(SP_usr, SP_fiq, SP_irq, SP_svc, SP_abt, SP_und, SP_mon, SP_hyp)。
  • 当前程序状态寄存器 (CPSR)

    • 包含当前处理器的状态信息,如条件码标志、中断禁用标志等。
  • 保存程序状态寄存器 (SPSR)

    • 每个非用户模式都有自己的 SPSR 来保存进入该模式之前的 CPSR 状态。
  • 特殊功能寄存器

    • 如 SCTLR, TTBR0, TTBR1 等,用于控制内存管理单元 (MMU) 等硬件特性。

总结

  • AArch64 引入了更简洁的寄存器命名规则和组织方式,强调了对异常级别的支持,并且不再依赖于传统的模式切换概念。
  • AArch32 则保留了传统的多模式结构,提供了针对不同场景优化的寄存器分配策略,并通过 CPSR 和 SPSR 实现状态管理和保护。

这两种架构模式的选择取决于具体的应用需求、性能考虑以及兼容性要求。对于新的开发项目,尤其是在需要利用更大地址空间和支持现代安全特性的场合下,往往会优先选择 AArch64。而对于需要向后兼容旧版软件或硬件平台的情况,则可能仍然需要支持 AArch32。

posted @ 2025-05-12 11:12  颜小雀  阅读(189)  评论(0)    收藏  举报