汇编栈bl和ret(五)

bl和ret指令

bl标号

  • 将下一条指令的地址放入lr(x30)寄存器
  • 转到标号处执行指令

ret

  • 默认使用lr(x30)寄存器的值,通过底层指令提示CPU此处作为下条指令地址!

ARM64平台的特色指令,它面向硬件做了优化处理的

x30寄存器

x30寄存器存放的是函数的返回地址.当ret指令执行时刻,会寻找x30寄存器保存的地址值!

注意:在函数嵌套调用的时候.需要讲x30入栈!

下面这个例子是死循环

bl(x30)会覆盖bl main中的一个指令地址

具体如何优化?(参考系统 a(){B{} return} b(){return}):

在bl前,把x30放到栈里面,在ret前把x30从栈中写到寄存器.  x30:保存ret值地址

优化代码:

解释:

发表回复

电子邮件地址不会被公开。 必填项已用*标注

Protected with IP Blacklist CloudIP Blacklist Cloud