ARM 体系结构根据不同的应用场景分为如下三种(ARM 每个字母代表一类设备)
- A 系列:面向性能密集型系统的应用处理器内核 -- Cortex-A Cortex-X
- 笔记本电脑,智能电视,服务器,智能手机
- R 系列:面向实时应用的高性能内核 -- Cortex-R
- 需要实时响应需求的安全关键应用或需要决定性响应的应用,例如医疗设备、车辆驾驶、刹车与警示、网络和储存设备,以及嵌入式控制系统
- M 系列:面向各类嵌入式应用的微控制器内核 -- Cortex-M
- 穿戴设备,通讯模块,物联网设备
ARMv8 是第一代支持64位处理器的指令集和体系机构,提供了运行32位和64位应用程序的环境。
ARMv9 以Cortex-X为主的大核心处理器不再支持32位应用,因此 ARMv9会逐渐放弃支持32位应用,只支持64位应用。
| AArch64 |AArch32 |
| --- | --- |
| 提供 31 个 64 位的通用寄存器 | 13个32位的通用寄存器 |
| 64位的程序计数指针寄存器 | |
|64位的栈指针寄存器||
|64位的异常链接寄存器|
|A64指令集|支持两套指令集 A32 T32|
|支持4个异常等级|
|提供64位的内存模型|32位虚拟内存访问机制|
|保存PE 的状态|
在 AArch64 系统状态下,很多系统寄存器根据异常等级,提供不同的系统寄存器
<register_name>_Elx
// x 可以表示异常等级 0,1,2,3
例如 SP_El0表示在 EL0 下的 SP 寄存器
| 异常等级 | |
|---|---|
| EL0 | 用户特权,运行普通用户程序 |
| EL1 | 系统特权,通常用于操作系统内核 |
| EL2 | 运行虚拟化扩展的虚拟机监控器 |
| EL3 | 运行安全世界中的安全监控器 |
64位的应用运行在 AArch64 状态下,在该状态下,使用A64指令集
32位的应用运行在 AArch32 状态下,在该状态下,使用A32指令集
A64指令集 和 A32 指令集是不兼容的(指令格式不同),A64指令集的指令宽度为32位,不是64位。
ARMv8 支持如下几种数据宽度
| 支持的数据宽度 | 位数 |
|---|---|
| 字节(byte) | 8 位 |
| 半字(halfword) | 16 位 |
| 字(word) | 32 位 |
| 双字(doubleword) | 64 位 |
| 四字(quadword) | 128 位 |