【问题标题】:x86 assembly help: Is there a general rule for what the value of rax is?x86 汇编帮助:对于 rax 的值有什么通用规则吗?
【发布时间】:2017-11-13 01:57:09
【问题描述】:

所以我想弄清楚这个函数是做什么的,但是我对这个指令序列有点困惑:

mov    -0x4(%rsp),%eax
lea    0x0(,%rax,8),%edx

在此之前,函数中没有提到 rax。 rax 寄存器中的值是什么——它只是堆栈的顶部吗?

上一行是mov -0x4(%rsp),%eax,那么它只是eax 中的内容吗?

【问题讨论】:

  • eaxrax 的低 32 位,写入 eax 会清除高 32 位。所以,是的,rax 在地址rsp-4 处将内存中的 32 位值零扩展到 64 位。

标签: assembly x86 disassembly


【解决方案1】:

“一般规则”?不,除了重言式(例如“无论您最后在其中隐含或显式添加的内容”)或涵盖所有隐含使用rax 的所有内容的非常详细的规则之外,没有一般规则,例如:

将 eax 写入 rax (Why do most x64 instructions zero the upper part of a 32 bit register) 总是零扩展,但写入 AL、AH 或 AX 会与 RAX 的旧值合并。

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 2011-09-13
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多