【发布时间】:2019-04-05 05:37:05
【问题描述】:
假设寄存器 ax = 50 和 cx = 1000
做完之后
mul cx
十六进制乘积将被分成两半,格式为 (dx ax) 我怎样才能获得产品的全部价值? (在这种情况下为 50,000)
【问题讨论】:
-
DX:AXDX 中的 32 位结果是高 16 位,AX 是低 16 位。由于 50,000 的结果只能放入 16 位寄存器,因此 DX 将为零,而 AX 将有 50,000。 -
1000 和 50 是十六进制还是十进制?我上面的评论假设十进制。那么是 0x1000*0x50 还是 1000*50
-
你是对的,它是小数
-
这是一个更棘手的问题,具体取决于操作。你打算支持多大的数字?我现在看到这说 irvine32。如果您正在执行 32 位代码,那么您可以 mul EAX 和 ECX(在 EDX:EAX 中结合支持 64 位结果的 32 位寄存器)
-
或者您可以只使用
imul eax, ecx并获得不带高位的 32 位结果(这样会更快)
标签: assembly x86 computer-science masm irvine32