装配中的MUL操作

use*_*712 0 x86 assembly

我有以下装配线:

...
MOV ECX, 0x36EE80
MOV EDX, 0x95217CB1
MUL EDX
SHR EDX, 0x15
MOV DWORD PTR SS:[EBP-0x3C8], EDX
....
....
Run Code Online (Sandbox Code Playgroud)

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

有人可以解释一下吗?

Mic*_*ael 9

描述MUL r/m32Unsigned multiply (EDX:EAX <- EAX * r/m32)..

这意味着64位产品将被存储EDX:EAX,即高32位最终进入EDX,低32位进入EAX.这符合您所看到的结果,因为该产品应为0x1DBEE41EB22A9CB.


Ego*_*off 5

结果是01DBEE41 EB22A9CB,EDX 存储了其中的高部分。
处理数字的二进制表示形式时,十进制数字不可连接。