【问题标题】:Adding values in x64 assembly在 x64 程序集中添加值
【发布时间】:2013-02-11 15:53:45
【问题描述】:

如果我只对 32 个低位进行操作,ADD EAX、EBX 是否会将 EAX 的 32 个高位归零?

那么 ADD RAX、EBX 呢?是否可以?如果是,RAX 的 32 位高位是否保留?

【问题讨论】:

    标签: assembly x86 64-bit x86-64


    【解决方案1】:

    ADD EAX, EBXRAX 的高 32 位归零。 ADD RAX, EBX 不是有效指令。

    听起来您想将 EBX 中的 32 位值添加到 RAX 中的 64 位值。为此,首先您要么零扩展 (MOV EBX, EBX) 或符号扩展 (MOVSX RBX, EBX),然后将 RBX 添加到 RAX。 (如果您将 EBX 中的值解释为无符号,则使用零扩展,如果它已签名,则使用符号扩展。

    【讨论】:

      【解决方案2】:

      是的,32 位 ADD 将高位归零。 ADD RAX, EBX 是不可能的。您可以将前 32 位清零(例如 MOV EBX, EBX),然后使用 ADD RAX, RBX(注意这可能会更改 RAX 的前 32 位)

      【讨论】:

        猜你喜欢
        • 2023-03-21
        • 1970-01-01
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-12
        相关资源
        最近更新 更多