目录

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 ; 执行切换