这段汇编代码中的 %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 值将是循环的结果。
我有以下 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 值将是循环的结果。