目录
ARM架构简介
主要特点
- 精简指令集架构(RISC,Reduced Instruction Set Computer):相比之下,x86-64为了兼任历史版本,指令集十分繁杂
- 在成本、功耗、散热方面表现优异
- 最初主要用于嵌入式场景(如手表、摄像头),目前在PC、手机、服务器上也应用广泛
- 特性
- 寄存器数量多
- Load/Store架构(单独的访存指令)
- 定长指令
- 指令条件执行
[CSEL X7, X2, X0, EQ ; if (cond == true) X7 = X2, else X7 = x0]
发展历程
1985,Acorn公司开发出世界第一款RISC处理器
1990,ARM发布
2013,全球近60%的移动设备采用ARM架构的芯片
2021,ARMv9推出,这是公司十年来首次重大架构变革
ARMv8
里程碑式架构
- 增加了可选的64位架构,aarch64
- 支持32位程序在64位操作系统中执行
- 新的64位指令集,A64
- 拥有31个通用64位寄存器
- 新的异常处理机制## 异常处理机制
异常处理机制简介
常见的CPU处理器异常包括:
中断(Interrupt)、陷阱(Trap)、故障(Fault)、终止(Abort)
CPU处理器的异常处理通常包括以下几个步骤:
- 触发异常:软件/硬件触发异常
- 保存上下文:保存当前执行的上下文,以便后续恢复执行
- 异常处理:根据不同的异常模式使用不同异常处理函数处理异常
- 恢复执行:根据存储的上下文恢复到异常前的执行现场
ARMv8异常处理
- ARMv8使用异常级别和异常类型一同决定异常处理模式
异常类型包括:SError、FIQ、IRQ、Synchronous
- ARMv8中每个异常级别都有对应的异常向量表,存
储在VBAR_ELn寄存器中 - 在异常发生时,处理器根据异常级别与异常发生上下
文信息选择异常向量表中不同异常处理函数进行异常
处理
ARMv8特权级
- 又称异常级别
- EL0–EL3权限递增
- EL0:用户程序
- EL1:操作系统内核
- EL2:虚拟机监视器
- EL3:低级固件,包括Secure Monitor
- 特权级别只在异常发生/结束时发生变化
特权切换
当程序运行过程中需要请求更高权限的功能时,需要使用系统调用来切换特权级
ARM系统切换指令
SVC # EL0->EL1
HVC # EL1->EL2
SMC # EL1/EL2->EL3
ARMv8 ISA
ARMv8中主要使用A64指令集,但仍然支持A32和T32模式
通过修改PSR寄存器切换不同模式
A32
- 指令宽度:32bits
- 兼容32位ARMv7架构的系统
A64 - 指令宽度:32bits
- 64位寻址空间
- 与x86-64不同,使用定长4字节指令加载地址
- 通过两条指令来加载内存地址
- adrp:加载变量所在页地址
- add:加载变量页内偏移
- 强大的SIMD和浮点运算支持
ARMv8寄存器
31个通用寄存器(X0-X30)
- 每个寄存器为64bits
- 可以使用Wx来访问Xx的低32bits
32个浮点寄存器(V0-V31)
- 每个寄存器为128bits(Qx)
- 可以访问8bits(Bx)、16bits(Hx) 、32bits(Sx)、64bits(Dx)
特殊寄存器
- 零寄存器(XZR/WZR)
• 作为源寄存器时值视为0 - 程序计数器(Program Counter, PC)
• aarch64中为当前指令地址
• aarch32中为当前指令地址 + 8 - 栈帧寄存器(Stack Pointer, SP)
• 指向栈顶所在地址 - 异常链接寄存器(Exception Link Register, ELR)
• 存储发生异常时的返回地址 - 进程状态寄存器(Saved Process Status Register, SPSR)
• 存储发生异常前程序状态信息
特殊寄存器
- 程序状态寄存器(Program Status Register, PSR)
• CPSR(Current Program Status Register)
• 存储了当前执行状态的信息,包括条件码、中断使能、模式等
• APSR(Application Program Status Register)
• 在User-mode下不能直接访问CPSR,使用APSR来替代CPSR
• APSR包括CPSR中N, Z, C, V, Q, GE[3:0]标志位