在x86程序集中考虑以下错误指令:
imul edx, [eax+cl], 2
Nasm抱怨有效地址不正确。据我所知,我不能添加两个不同大小的寄存器内容。该如何正确完成?也许我应该以某种方式添加一个偏移 - 我怎么能在nasm中做到这一点?注意:我无法添加整个ecx,因为高位包含数据。
答案 0 :(得分:0)
一种方法是存储ecx的低8位:(猜它应该有用)
movzx edx, cl
imul edx, [eax+edx], 2
另一种方法是运行一个自修改代码块,将“cl”替换为应用程序在需要时更新的“立即”偏移量。请注意,修改正在运行的代码会在较新的CPU中产生额外的延迟,因此很少实用。