Assembly 装配中的MUL操作

Assembly 装配中的MUL操作,assembly,x86,Assembly,X86,我有以下装配线: ... MOV ECX, 0x36EE80 MOV EDX, 0x95217CB1 MUL EDX SHR EDX, 0x15 MOV DWORD PTR SS:[EBP-0x3C8], EDX .... .... 因此,在本文中,我已经读到,在这种情况下,MUL的操作数的值EDX乘以EAX中的值。所以,在EAX中,我的值是0330FD3B十进制:53542203。在EDX中,值为95217CB1(十进制):2501999793。 但是在MUL操作之后,我在EDX中有一个值0

我有以下装配线:

...
MOV ECX, 0x36EE80
MOV EDX, 0x95217CB1
MUL EDX
SHR EDX, 0x15
MOV DWORD PTR SS:[EBP-0x3C8], EDX
....
....
因此,在本文中,我已经读到,在这种情况下,MUL的操作数的值EDX乘以EAX中的值。所以,在EAX中,我的值是0330FD3B十进制:53542203。在EDX中,值为95217CB1(十进制):2501999793。 但是在MUL操作之后,我在EDX中有一个值01dbee41decimal:31190593。但这一定是错的,因为53542203*2501999793不是31190593

有人能解释一下吗?

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

对于MUL r/m32是无符号乘法EDX:EAX如果这是专门针对x86程序集的,则应将其标记为无符号乘法EDX:EAX。当您将EDX乘以EAX时,结果为EDX:EAX。0330FD3B*95217CB1是1DBEE41EB22A9CB,因此EDX将是1DBEE41,EAX将是EB22A9CB,构成整个答案。请更仔细地阅读您发布的链接,OP:看起来这可能是一个常数的除法,因为它正确地移动了结果的上半部分。