如何添加两个寄存器'不同大小的内容在x86汇编中形成有效地址?

时间:2014-06-08 15:31:31

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

在x86程序集中考虑以下错误指令:

imul    edx, [eax+cl], 2

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

1 个答案:

答案 0 :(得分:0)

一种方法是存储ecx的低8位:(猜它应该有用)

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

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