【发布时间】:2016-01-02 20:16:11
【问题描述】:
一个简单的问题,为什么这不起作用:
mov ebx,m[edx*4]
mov eax,conv[edx*4]
mul ebx
我检查了m[edx*4] 它有 2 个(应该在那里)与 conv[edx*4] 相同。
基本上只是一个2*3。
m 和 conv 是 dd 2500 dup(?)
【问题讨论】:
-
您知道 EDX 将被此乘法指令
mul ebx? 覆盖 -
@Michael Petch,嗯,不,为什么?编辑..等待即使 EDX 不用于存储结果,它仍然被覆盖?
-
参见
mul指令:x86.renejeschke.de/html/file_module_x86_id_210.html 32 位无符号整数 * 32 位无符号整数将被放入 EDX 和 的 64 位值中EAX 寄存器。 EDX 将具有结果的高 32 位,EAX 将具有结果的低 32 位。 -
使用 EBX(而不是 EDX)作为数组索引,使用 EDX(而不是 EBX)来保存正确的操作数更有意义。因为后者被 MUL 覆盖是没有问题的。明智地选择您的寄存器。
-
如果您需要 32 位乘法,请使用两个操作数
IMUL r32, r/m32指令。