返回
汇编(四) -- bl&ret
IOS
2023-11-06 09:00:54
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函数的下一条指令。