ARM64 体系结构基础知识

364 阅读2分钟
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 位