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 来终止你的程序。

要回答有关您的价值观去向的问题,它们不会去任何地方。如果我们稍微简化一下并且不考虑上下文切换,那么您的值将物理上存储在寄存器中,直到您或其他代码片段在函数调用的情况下重新使用它们。要了解在函数调用时如何处理寄存器以及如何将参数传递给函数,请查看调用约定。