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)。
- 31 个 64 位通用寄存器 (
-
堆栈指针 (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)。
- 15 个 32 位通用寄存器 (
-
堆栈指针 (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。

浙公网安备 33010602011771号