X86 汇编 mul 错误 masm
X86 assembly mul error masm
一个简单的问题,为什么这不起作用:
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(?)
<---- 这就是它不起作用的原因?
我尝试遵循:
检查内存位置 m 和 conv 的 32 位值是什么
启动时edx的值是多少 mov ebx,m[edx*4]
检查ebx和eax中的期望值是否正确
Edx 将被覆盖,因为 MUL 和 IMUL 指令将结果存储在 EDX 和 EAX 中
https://en.wikipedia.org/wiki/X86_instruction_listings
MUL 用于无符号乘法,IMUL 用于有符号乘法。这意味着,与 Jester 所说的相反:对于 32 位操作数,您使用 MUL(无符号),对于第 32 位带符号的 31 位操作数,您使用 IMUL。
如果一切正常,如果 m[edx*4] = 2 和 conv[edx*4] = 3,则 edx = 0 和 eax = 6(反之亦然)
请注意 conv 和 m 是 32 位,最低有效字节位于最低内存位置。
如有错误请指正
一个简单的问题,为什么这不起作用:
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(?)
<---- 这就是它不起作用的原因?
我尝试遵循: 检查内存位置 m 和 conv 的 32 位值是什么 启动时edx的值是多少 mov ebx,m[edx*4] 检查ebx和eax中的期望值是否正确 Edx 将被覆盖,因为 MUL 和 IMUL 指令将结果存储在 EDX 和 EAX 中 https://en.wikipedia.org/wiki/X86_instruction_listings
MUL 用于无符号乘法,IMUL 用于有符号乘法。这意味着,与 Jester 所说的相反:对于 32 位操作数,您使用 MUL(无符号),对于第 32 位带符号的 31 位操作数,您使用 IMUL。
如果一切正常,如果 m[edx*4] = 2 和 conv[edx*4] = 3,则 edx = 0 和 eax = 6(反之亦然) 请注意 conv 和 m 是 32 位,最低有效字节位于最低内存位置。
如有错误请指正