[iOS知识简记]-汇编

arm64,4字节定长指令系统。

寄存器

x0-x30 通用寄存器,32bit使用:WO-W30
FP(x29) 保存栈帧地址(栈底指针)
LR(x30) 程序链接寄存器,保存子程序结束后需要执行的下一条指令
SP 保存栈指针,SP/WSP
PC 程序计数器,在arm64中,软件不能改写PC寄存器
CPSR 状态寄存器
V0 – V31 向量寄存器,也可以说是浮点型寄存器。每个寄存器128位的。
可以用Bn Hn Sn Dn Qn。基于一个word是32位,也就是4Byte大小:
Bn: Byte. 8位
Hn: half word. 16位
Sn: single word. 32位
Dn: double word. 64位
Qn: quad word. 128位

调用栈

栈是从高地址到低地址。
fp指向当前frame的栈底,高地址。
sp指向栈顶,低地址。

栈结构:

fp
.
.
.
lr
fp
.
.
.
lr
fp
.
.
.

backtrace原理:

从fp一直往上找,记录挨着的lr,直到fp为0。

ABI

对于arm64:

x0–x7存放前8个参数,多余的参数会存在栈上。
返回值一般都在x0。
如果返回较大的数据结构,存在x8地址上。

对于x64:

分别用rdi,rsi,rdx,rcx,r8,r9作为第1-6个参数,rax作为返回值。

总之,arm32/arm64/x86/x64的调用约定各不一样,x86用堆栈传参,x64用寄存器传参,等等。

arm32还有个Thumb指令系统,Thumb指令是缩减的16位指令,存储占用小,但在32存储器上效率没4字节的arm指令集高。Thumb子程序和arm子程序可以互相调用,处理器可在执行Thumb程序段的状态和执行arm程序段的状态间切换。

指令格式/各类指令/各类寻址方式

比如条件域、寻址移位、叹号,等。

mov{条件域}{s} 目的寄存器,源操作数

s选项决定是否影响CPSR中条件标志位的值。
ld... -> load到寄存器
st... -> store到内存

有叹号,表示移动数据后,并更新地址。

伪操作/伪指令/汇编文件格式/子程序调用/和C语言互调/汇编宏

略。

参考

  • ARM64 汇编——寄存器和指令
    https://www.jianshu.com/p/2f4a5f74ac7a

  • iOS开发同学的arm64汇编入门
    https://blog.cnbluebox.com/blog/2017/07/24/arm64-start/

  • ARMv8中branch指令分类、格式及用法
    https://blog.csdn.net/qianlong4526888/article/details/8247219

  • ARMv8-A Architecture – ARM
    https://developer.arm.com/architectures

  • iOS ABI Function Call Guide
    https://developer.apple.com/library/archive/documentation/Xcode/Conceptual/iPhoneOSABIReference/Introduction/Introduction.html

https://courses.cs.washington.edu/courses/cse469/18wi/Materials/arm64.pdf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值