目录

1. 寄存器组
通用寄存器
寄存器 | 位宽 | 用途说明 |
---|---|---|
X0-X7 | 64位 | 函数参数传递/返回值 |
X8 | 64位 | 间接结果寄存器 |
X9-X15 | 64位 | 临时寄存器 |
X16-X17 | 64位 | 平台保留(IP0/IP1) |
X18 | 64位 | 平台保留寄存器 |
X19-X28 | 64位 | 被调用者保存寄存器 |
X29 | 64位 | 帧指针(FP) |
X30 | 64位 | 链接寄存器(LR) |
SP | 64位 | 栈指针 |
PC | 64位 | 程序计数器(不可直接访问) |
特殊寄存器
- PSTATE :处理器状态寄存器(组合寄存器)
- NZCV:条件标志位(Negative/Zero/Carry/oVerflow)
- DAIF:中断屏蔽位
- CurrentEL:当前异常级别
- SPSel:栈指针选择(SP_EL0/SP_ELx)
2. 执行状态与异常级别
AArch64 vs AArch32
特性 | AArch64 | AArch32 |
---|---|---|
寄存器 | 31个64位通用寄存器 | 16个32位通用寄存器 |
指令集 | A64 | A32/T32(Thumb) |
地址空间 | 64位虚拟地址 | 32位虚拟地址 |
异常模型 | 4个异常级别(EL0-EL3) | 特权模式+监控模式 |
SIMD | 128位NEON寄存器 | 64/128位NEON寄存器 |
异常级别(EL)
级别 | 名称 | 典型用途 |
---|---|---|
EL0 | 用户模式 | 应用程序执行 |
EL1 | 操作系统内核 | Linux/Windows内核 |
EL2 | 虚拟机监控器 | Hypervisor(如KVM) |
EL3 | 安全监控器 | TrustZone安全世界切换 |
关键转换机制
-
Interprocessing :AArch64与AArch32状态切换
- 通过
ERET
指令和异常级别改变触发 - 由系统寄存器
SCTLR_ELx
控制
- 通过
-
异常级别切换 :
armasm// 从EL1切换到EL0示例 MSR SP_EL0, X0 ; 设置EL0栈指针 MOV X0, #0x3C5 ; DAIF=0 (启用中断) MSR SPSR_EL1, X0 ; 设置返回状态 ADR X0, target_el0 ; 目标地址 MSR ELR_EL1, X0 ; 设置返回地址 ERET ; 执行切换