这段汇编代码中的 %rax 寄存器是从哪里来的?

Where does the %rax register come from in this assembly code?

我有以下 x86_64 汇编代码,我应该将它翻译成 C 代码。

trace:
tp in %rdi
    movl [=10=], %eax
    testq %rdi, %rdi
    je  .L3
.L5:
    movq (%rdi), %rax
    movq 16(%rdi), %rdi
    testq %rdi, %rdi
    jne    .L5
.L3:
    rep
    ret

我的问题是,%rax 从何而来?它只是我在 movq 指令之后存储 tp 的另一个寄存器吗?如果是这样,为什么这样做对我有好处,将它留在 %rdi 中有什么问题?谢谢

movl [=10=], %eax 零扩展以设置 64 位寄存器 %rax <- 0,因此如果 (%rdi == 0),这将是典型 [=14] 中的 return 值=].这包括 Linux / BSD 和 OS X。否则,%rax return 值将是循环的结果。