栈
1.是一种具有特殊的访问方式的存储空间(后进先出,Last In Out firt,LIFO)
2.sp和FP寄存器
(1)sp寄存器在任意时刻 会保存我们栈顶的地址
(2)fp寄存器也成为x29寄存器,属于通用寄存器,但是在某些时刻我们利用它保存栈底的地址
3.ARM64里面对栈的操作是16字节对齐的。
4.栈的读写指令
(1)读:ldr(load register)指令LDR、LDP
(2)写:str(store register)指令STR、STP
5.汇编练习
(1)指令
sub sp , sp , #0x10 拉升栈空间16个字节
stp x0 , x1 , [sp] 往sp所在位置存放x0和x1
(2)简写
stp x0 , x1 , [sp , #-0x10]!
bl指令
1.跳转指令:bl标号,标明程序执行到标号处,将下一条指令的地址保存到lr寄存器里。
B 代表跳转
L 代表lr(x30)寄存器
ret
1.类似函数中return
2.让CPU执行lr寄存器所指向的指令
函数的参数
1.ARM64中,参数放在x0到x7的8个寄存器中
2.如果是浮点数,就会用浮点寄存器
3.如果超过8个参数就会用栈传递
函数的返回值
1.一般函数的返回值使用x0寄存器保存
2.如果返回值超过8个字节,就会利用内存传递返回值。