Study of the ARM
Instruction Set. 发一篇博客证明我学过。
ARM
AArch64
简介
ARMv8 CPU的64位执行模式。只能执行A64
指令集,无法执行A32
和T32
指令
寄存器
在函数调用下,X0-X18
寄存器是可以被修改的;X19-29
则在返回时必须保存原始状态。
在设置为AArch32模式时,可以被当作32位寄存器使用:W0-W30
Register | Role | Requirement |
---|---|---|
X0 - X7 | 传参/返回值(X0) | Can Corrupt |
X8 | Indirect result location register | Can Corrupt |
X9 - X15 | Temporary registers | Can Corrupt |
X16 - X17 | Intra-procedure call temporary | Can Corrupt |
X18 | Platform register, otherwise temporary | Can Corrupt |
X19 - X29 | Callee-saved register | Must preserve |
X30 | Link Register | Can Corrupt |
寄存器 | 位数 | 描述 |
---|---|---|
X0-X30 | 64bit | 通用寄存器,如果有需要可以当做32bit使用:WO-W30 |
FP(X29) | 64bit | 保存栈帧地址(栈底指针) |
LR(X30) | 64bit | 通常称X30为程序链接寄存器,保存子程序结束后需要执行的下一条指令 |
SP | 64bit | 保存栈指针,使用 SP/WSP来进行对SP寄存器的访问。 |
PC | 64bit | 程序计数器,俗称PC指针,总是指向即将要执行的下一条指令,在arm64中,软件是不能改写PC寄存器的。 |
PSTATE | 32bit | 状态寄存器组 |
CPSR/PSTATE
AArch32位寄存器。
在64位中被PSTATE取代。
不是一个寄存器,是保存当前PE状态的一组寄存器统称(每个PE对应一组PSTATE),属于ARMv8新增内容,可以使用MRS和MSR通过特殊功能寄存器进行访问,可访问寄存器有:
NZCV
:对应PSTATE域为N,Z,C,V
DAIF
:对应PSTATE域为D,A,I,F
CurrentEl
:对应PSTATE域为EL
SpSel
:对应PSTATE域为SP
nRW
:处理器状态(0-64bit,1-32bit)
SP
:栈指针选择(0-SP_EL0
,1-SP_ELn
)
N | Negative condition flag | 有符号运算结果为负数,N=1 |
Z | Zero condition flag | 结果为0,Z=1 |
C | Carry | 无符号运算有溢出,C=1 |
O | oVerflow | 有符号运算有溢出,O=1 |
ARM中的程序状态寄存器(CPSR) - arm-linux - 博客园 (cnblogs.com)
异常处理
EL0 | EL1 | EL2 | EL3 | |
---|---|---|---|---|
Stack Pointer | SL_EL0 | SP_EL1 | SP_EL2 | SP_EL3 |
Exception Link Register (PC) | ELR_EL1 | ELR_EL2 | ELR_EL3 | |
Saved/Current Process Status Register (CPSR) | SPSR_EL1 | SPSR_EL2 | SPSR_EL3 |
Top-byte Ignore(TBI)
AArch64在取地址时只允许低48位的有效位,高16位必须是0x0000或者0xFFFF
TBI
功能允许使用高8位([63:56]
)作为标记。这些标记位在执行时会被忽略。
Top-byte Ignore (TBI) - ARM - WikiChip
汇编
SCVTF
Signed integer scalar convert to floating-point
有符号整数转化成浮点数
ARM64 汇编——寄存器和指令 - 简书 (jianshu.com)
重要
还是官方开发文档好
Learn the architecture: AArch64 Instruction Set Architecture (arm.com)
参考
ARM64 汇编——寄存器和指令 - 简书 (jianshu.com)
(72条消息) arm汇编储存指令str stur和读取指令 ldr ldur的使用,对应xcode c++中的代码反汇编教程_小手琴师的博客-CSDN博客_stur指令
ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(2)- 寄存器 - jasonactions - 博客园 (cnblogs.com)
Learn the architecture: AArch64 Instruction Set Architecture (arm.com)
- 本文作者: Taardis
- 本文链接: https://taardisaa.github.io/2022/03/21/ARM/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!