返回

汇编(四) -- bl&ret

IOS

bl指令

bl指令是"branch and link"的缩写,它将程序控制权转移到指定的目标地址,并将返回地址压入堆栈。这样,当函数返回时,程序就可以从堆栈中弹出返回地址并继续执行。

bl指令的语法如下:

bl <target>

其中,是要跳转到的目标地址。

ret指令

ret指令是"return"的缩写,它将程序控制权返回到调用函数的下一条指令。

ret指令的语法如下:

ret

bl和ret指令的使用示例

下面是一个简单的汇编程序,演示了如何使用bl和ret指令实现函数调用和函数返回:

.text
.global main
main:
    push rbp
    mov rbp, rsp
    bl sum
    mov eax, [rbp-8]
    pop rbp
    ret

sum:
    mov eax, 1
    ret

在这个程序中,main函数首先将rbp寄存器压入堆栈,然后将rsp寄存器赋给rbp寄存器,这样rbp寄存器就指向了当前栈顶。然后,main函数调用sum函数,bl指令将程序控制权转移到sum函数的开头。

sum函数首先将eax寄存器置为1,然后返回到main函数。ret指令将程序控制权返回到main函数的下一条指令,即mov eax, [rbp-8]。

mov eax, [rbp-8]指令将rbp寄存器减8后指向的值赋给eax寄存器。由于rbp寄存器指向了当前栈顶,所以rbp-8指向了sum函数的返回地址。因此,mov eax, [rbp-8]指令将sum函数的返回地址赋给了eax寄存器。

最后,main函数将rbp寄存器弹出堆栈,并返回到调用main函数的下一条指令。

汇编中的指令相关参考资料

汇编学习资源

原视频链接:https://www.bilibili.com/video/BV1aP4y1N7ym