我有以下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有什么不对?感谢
答案 0 :(得分:0)
movl $0, %eax
零扩展以设置64位寄存器%rax <- 0
,因此如果(%rdi == 0)
,这将是典型ELF/SysV ABI中的返回值。这包括Linux / BSD和OS X.否则,%rax
返回值将是循环的结果。