【问题标题】:How can I add two registers' contents of different size to form an effective address in x86 assembly?如何在 x86 汇编中添加两个不同大小的寄存器内容以形成有效地址?
【发布时间】:2014-06-08 15:31:30
【问题描述】:

考虑以下 x86 汇编中的错误指令:

imul    edx, [eax+cl], 2

Nasm 抱怨有效地址不正确。我知道我不能添加两个不同大小的寄存器内容。应该如何正确地做到这一点?也许我应该以某种方式添加一个偏移量 - 我怎么能在 nasm 中做到这一点?注意:我不能添加整个 ecx,因为高位包含数据。

【问题讨论】:

标签: assembly x86 nasm x86-64 low-level


【解决方案1】:

一种方法是像这样存储 ecx 的低 8 位:(猜它应该可以工作)

movzx   edx, cl
imul    edx, [eax+edx], 2

另一种方法是运行一个自修改代码块,将“cl”替换为应用程序在需要时更新的“立即”偏移量。请注意,修改正在运行的代码会在较新的 CPU 中产生额外的延迟,因此几乎不实用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    相关资源
    最近更新 更多