【问题标题】:Where does the %rax register come from in this assembly code?这个汇编代码中的 %rax 寄存器来自哪里?
【发布时间】: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 @。代码遍历一个链表。

标签: assembly x86-64


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2019-09-06
    • 2019-12-10
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2021-03-25
    相关资源
    最近更新 更多