MUL运算结果

时间:2015-07-22 12:15:05

标签: assembly x86

请解释MUL操作在这种情况下的工作原理:

MUL ECX

操作前:

EAX:000062F7(25335) ECX:3B9ACA00(1000000000) EDX:00000000(0)

手术后:

EAX:C3ACE600 EDX:0000170A(5898)

如果有人能解释我5898的计算方式,那将会很感激。

2 个答案:

答案 0 :(得分:0)

两个32位值的乘法可以产生64位结果。

MUL的结果存储在EDX:EAX中。 (EDX中的高32位,EAX中的低32位)。

0x3b9aca00 * 0x62f7 = 0x170a c3ace600
   ECX        EAX       EDX    EAX

答案 1 :(得分:0)

实际上它非常简单。 MUL r/m32r/m32在这种情况下引用ECX)的说明是:

MUL r/m32  (EDX:EAX ← EAX ∗ r/m32).

因此EAX乘以ECX以形成64位产品,该产品存储在EDX:EAX中(即低位32位最终位于EAX,并且EDX)中的高32位。

因此,如果我们在计算器中输入000062F7 * 3B9ACA00,我们会得到170AC3ACE600,这意味着EAX将是C3ACE600EDX将是170A }(或base10中的5898)。