考虑 x86 汇编中的以下错误指令:
imul edx, [eax+cl], 2
Nasm 提示有效地址不正确。我知道我不能添加两个不同大小的寄存器内容。应该如何正确地做到这一点?也许我应该以某种方式添加一个偏移量 - 我怎样才能在 nasm 中做到这一点?注意:我无法添加整个 ecx,因为较高位包含数据。
最佳答案
一种方法是像这样存储 ecx 的低 8 位:(猜测它应该可以工作)
movzx edx, cl
imul edx, [eax+edx], 2
另一种方法是运行一段自修改代码,将“cl”替换为应用程序在需要时更新的“立即”偏移量。请注意,修改正在运行的代码会在较新的 CPU 中产生额外的延迟,因此很少实用。
关于assembly - 如何将两个不同大小的寄存器内容相加以形成 x86 汇编中的有效地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24107730/