x64 Assembly GNU语法,如何循环returns
x64 Assembly GNU syntax, how the loop returns
这是一个采用 Assembler x64 GNU 语法的程序
.global main
.text
main:
xor %rax, %rax
mov %rax, %rbx
.L1:
add , %rbx
add %rbx, %rax
cmp , %rbx
jne .L1
ret
我手动执行了循环,我发现当循环终止时命中 return 函数 (ret),rbx = 10 和 rax = 45,但我不明白它们是如何返回到主要功能,当他们回到那里时会发生什么?
ret 指令不会 return 到主程序,但它 returns 从主程序 开始终止程序。您编写的循环不是函数,您只是跳回代码的前一行,不需要使用 ret 指令终止它。虽然你需要 ret 来终止你的程序。
要回答有关您的价值观去向的问题,它们不会去任何地方。如果我们稍微简化一下并且不考虑上下文切换,那么您的值将物理上存储在寄存器中,直到您或其他代码片段在函数调用的情况下重新使用它们。要了解在函数调用时如何处理寄存器以及如何将参数传递给函数,请查看调用约定。
这是一个采用 Assembler x64 GNU 语法的程序
.global main
.text
main:
xor %rax, %rax
mov %rax, %rbx
.L1:
add , %rbx
add %rbx, %rax
cmp , %rbx
jne .L1
ret
我手动执行了循环,我发现当循环终止时命中 return 函数 (ret),rbx = 10 和 rax = 45,但我不明白它们是如何返回到主要功能,当他们回到那里时会发生什么?
ret 指令不会 return 到主程序,但它 returns 从主程序 开始终止程序。您编写的循环不是函数,您只是跳回代码的前一行,不需要使用 ret 指令终止它。虽然你需要 ret 来终止你的程序。
要回答有关您的价值观去向的问题,它们不会去任何地方。如果我们稍微简化一下并且不考虑上下文切换,那么您的值将物理上存储在寄存器中,直到您或其他代码片段在函数调用的情况下重新使用它们。要了解在函数调用时如何处理寄存器以及如何将参数传递给函数,请查看调用约定。