我有以下装配线:
...
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 ...
有人可以解释一下吗?
答案 0 :(得分:9)
MUL r/m32
的{p> The description为Unsigned multiply (EDX:EAX <- EAX * r/m32).
。
这意味着 64位产品将存储在EDX:EAX
中,即高32位最后位于EDX
,低位32位位于EAX
}}。这符合您所看到的结果,因为该产品应为0x1DBEE41EB22A9CB。
答案 1 :(得分:4)
结果是01DBEE41 EB22A9CB
,EDX存储了很大一部分
处理数字的二进制表示时,十进制数不可连接。