如题,一些 ARM64 通用的架构知识
1.ARMv8 特色:
(1) 超大的物理地址空间(Large Physical Address),提供超过 4GB 物理内存的访问;
(2) 64 位宽的虚拟地址空间(64-bit Virtual Addresing);
(3) 提供 31 个 64 位宽的通用寄存器,可以减少对栈的访问,从而提高性能;
(4) 提供 16KB 和 64KB 的页面,有助于降低 TLB 的未命中率(miss rate);
(5) 全新的异常处理模型,有助于降低操作系统和虚拟化的实现复杂度;
(6)全新的加载 - 获取,存储 - 释放指令(Load-Acquire, Store-Release Instructions)。专门为 C ++11,C11 以及 Java 内存模型设计;
2 执行状态
AArch64: 64 位的执行状态:
(1) 提供 31 个 64 位通用寄存器;
(2) 提供 64 位的程序计数器寄存器 PC、栈指针寄存器 SP 以及异常链接寄存器;
(3) 提供 A64 指令集;
(4)定义 ARMv8 异常模型,支持 4 个异常等级,EL0~EL3;
(5)提供 64 位的内存模型;
(6)定义一组处理器状态 (PSTATE) 用来保存 PE 的状态;
AArch32: 32 位的执行状态:
(1) 提供 16 个 32 位通用寄存器, 32 位的程序计数寄存器 PC、栈指针寄存器 SP、链接寄存器;
(2) 提供 A32,T32 指令集;
(3)定义 ARMv7 异常模型,基于 PE 模式并映射到 ARMv8 的异常模型中;
(4)提供 32 位虚拟内存访问机制;
(5)定义一组处理器状态 (PSTATE) 用来保存 PE 的状态;
3. ARMv8 包含的寄存器
3.1 ARMv8 包含 31 个通用寄存器
AArch64 运行状态支持 31 个通用寄存器 X0-X30,AArch32 状态支持 16 个 32 位通用寄存器
X0~X30:通用寄存器;
SP: 栈指针寄存器;
PC:程序计数寄存器;
3.2 系统寄存器
系统寄存器提供控制和状态,在 AArch64 状态下,很多系统寄存器根据不同的异常等级提供不同的变种寄存器:
reg_name_ELx, x is 0,1,2, or 3
比如 SP_EL0 表示在 EL0 下的栈指针寄存器;
3.3 SIMD/FP 寄存器:
支持 128bit 寄存器
3.4 特殊寄存器
XZE
4. 数据类型
Byte: 8bit
Halfword: 16bit
Word: 32bit
Doubleworld: 64bit
Quadword: 128bit
5. 异常模型
Exception Levels 确定了处理器当前运行的特权级别,类似 ARMv7 架构中的特权等级
EL0: 用户特权,用于运行普通应用程序;
EL1: 系统特权,通常用于运行操作系统;
EL2: 运行虚拟化扩展的虚拟监控程序(Hypervisor);
EL3: 运行安全世界中的安全监控器(Secure Monitor);
异常级别 | 应用场景 | 安全世界 |
---|---|---|
EL0 | APP | Secure OS |
EL1 | Guest OS | sECURE OS |
EL2 | Hypervisor | Secure Hypervisor |
EL3 | Secure---> | -->monitor |
6.A64 汇编指令介绍:
1.A64 指令集只能运行在 aarch64 环境中;
2. 所有的 A64 汇编指令都是 32bit 宽;
3.A64 支持全部大写或小写书写方式;
4. 寄存器命名,
Name | size | Encoding | Descriptio |
---|---|---|---|
Wn | 32bits | 0~30 | General-purpose register0~30 |
Xn | 64bit | 0~30 | General-purpose register0~30 |
WZR | 32bits | 31 | Zero register |
XZR | 64bit | 31 | Zero register |
WSP | 32bits | 31 | Current stack pointer |
SP | 64bit | 31 | Current stack pointer |
7.A64 指令分类
内存加载和存储指令:
多字节内存加载和存储:
算术和移位指令:
位操作指令:
条件操作:
跳转指令:
独占访存指令:
内存屏障指令:
异常处理指令:
系统寄存器访问指令: