一、bl指令
cpu从何处执行指令是由PC中的内容决定的,我们可以通过改变PC的内容来控制CPU执行目标指令
ARM64提供了一个mov指令(传送指令),可以用来修改大部分寄存器的值,比如
mov x0,#10、mov x1,#20
但是,mov指令不能用于设置pc的值,arm64没有提供这样的功能
Arm64提供另外的指令来修改PC的值,这些指令统称为转移指令,最简单的是bl指令
二、栈
是一种具有特殊的访问方式的存储空间(后进先出,LIFO)
三、bl和ret指令
bl标号
将下一条指令的地址放入lr(x30)寄存器
转到标号处执行指令
ret
默认使用lr(x30)寄存器的值,通过底层指令提示CPU此处作为下条指令地址!
ARM64平台的特色指令,它面向硬件做了优化处理的
x30寄存器
x30寄存器存放的是函数的返回地址.当ret指令执行时刻,会寻找x30寄存器保存的地址值!
注意:在函数嵌套调用的时候.需要讲x30入栈!
四、函数和参数返回值
ARM64下,函数的参数是存放在X0到X7(W0到W7)这8个寄存器里面的.如果超过8个参数,就会入栈.
函数的返回值是放在X0 寄存器里面的.
五、函数的局部变量
函数的局部变量放在栈里面.