【发布时间】:2015-02-07 06:37:45
【问题描述】:
我有以下 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 有什么问题?谢谢
【问题讨论】:
-
movq (%rdi), %rax不会将%rdi的内容移动到%rax,而是将%rdi指向的地址的memory的内容移动到@987654326 @。代码遍历一个链表。