2014-06-08 43 views
0

考虑x86汇编以下不正确的指令:如何在x86汇编中添加两个不同大小的寄存器内容以形成有效地址?

imul edx, [eax+cl], 2 

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

+0

如何将ecx存储在另一个寄存器中,然后用255和'和'来存储? – emil

+2

movzx ecx,cl(无符号)或movsx ecx,cl(签名)怎么办? – rcgldr

+0

mov ebx,ecx xor ecx,ecx mov cl,bl imul edx,[eax + ecx] [link] http://courses.engr.illinois.edu/ece390/archive/spr2002/books/labmanual/inst-ref- idiv.html –

回答

0

的一种方式是存储下那样ECX的8位:(猜测它应该工作)

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

另一种方式是运行的自修改代码块具有替换“CL”一个“立即'偏移量在需要时由应用程序更新。请注意,修改正在运行的代码会在较新的CPU中创建额外的延迟,因此很少实用。

相关问题