%rax寄存器来自此汇编代码中的哪个位置?

时间:2015-02-07 06:37:46

标签: assembly x86-64

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

trace:
tp in %rdi
    movl $0, %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有什么不对?感谢

1 个答案:

答案 0 :(得分:0)

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