ARMv8是ARM版本升级以来最大的一次改变,ARMv8的架构继承以往ARMv7与之前处理器技术的基础,除了现有的16/32bit的Thumb2指令支持外,也向前兼容现有的A32(ARM 32bit)指令集,扩充了基于64bit的AArch64架构,除了新增A64(ARM 64bit)指令集外,也扩充了现有的A32(ARM 32bit)和T32(Thumb2 32bit)指令集;
ARMv8拥有两种执行模式(two execution modes):
AArch64 :64-bit registers and memory accesses, new instruction set;
AArch32 : backwards compatible with ARMv7-A;
(一)A64新的指令和寄存器
- 固定大小32位操作码,清除基于5位寄存器说明符的解码表;
- 可以拥有32位或者64位参数;
- 地址设定为64位,主要针对LP64和LLP64数据模型;
- 比AArch32拥有更少的条件指令,条件指令有:分支,比较,选择;
- 没有LDM/STM(用于批量从内存中读取或者写入数据)指令,添加LDP/STP指令来操作以降低复杂性及功耗;
- 支持先进的SIMD(Single-Instruction,Multiple-Data:单指令多数据)和(FP浮点);
- 支持加密技术;
- 可随时访问31个通用的64位寄存器 (X0-X30),没有banked(banked是指一个寄存器不同模式下会对应不同的物理地址)的通用寄存器,堆栈指针(SP),PC不是通用寄存器,附加专用的零寄存器(Xzr);
- AArch32状态是使用CPSR来存储当前process执行状态,AArch64定义了一组PSTATE寄存器用以保存PE(Processing Element)状态;
AArch64 – Unbanked Registers: