装配中的MUL操作

时间:2014-08-28 13:30:18

标签: assembly x86

我有以下装配线:

...
MOV ECX, 0x36EE80
MOV EDX, 0x95217CB1
MUL EDX
SHR EDX, 0x15
MOV DWORD PTR SS:[EBP-0x3C8], EDX
....
....

因此,在http://en.wikibooks.org/wiki/X86_Assembly/Arithmetic中,我已经读过MUL的操作数(在这种情况下为EDX)的值乘以EAX中的值。因此,在EAX中,我的值为0330FD3B(十进制:53542203)。在EDX中,我的值为95217CB1(十进制:2501999793)。 但在MUL操作之后,我在EDX中的值为01DBEE41(十进制:31190593)。但这一定是错的,因为53542203 * 2501999793不是31190593 ...

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:9)

MUL r/m32的{​​p> The descriptionUnsigned multiply (EDX:EAX <- EAX * r/m32).

这意味着 64位产品将存储在EDX:EAX中,即高32位最后位于EDX,低位32位位于EAX }}。这符合您所看到的结果,因为该产品应为0x1DBEE41EB22A9CB。

答案 1 :(得分:4)

结果是01DBEE41 EB22A9CB,EDX存储了很大一部分 处理数字的二进制表示时,十进制数不可连接。