MOV EAX,0XB504F333
MOV ECX,0XB504F333
;EAX = B504F333
;ECX = B504F333
IMUL ECX ;RESULT=
------------------------------
;EDX = 15F61998 ;it is incorrect the correct value is 7FFFFFFF
;EAX = 9EA1DC29 ;it is correct
;Carry flag = 1
;Overflow flag = 1
;Sign flag = 0
這是沒有辦法,因爲溢出:x86 IMUL結果是正確的,爲什麼?
7FFFFFFFFFFFFFFF = 9223372036854775807 => sqrt(9223372036854775807) = 3037000499 = 0xB504F333
0xB504F333 * 0xB504F333 < 7FFFFFFFFFFFFFFF (EDX:EAX)
爲什麼溢出?
感謝回覆。
這是不是很清楚你在做什麼,你問什麼。對於我來說,提交的代碼不是實際的代碼('IMUL CX RESUL'將不能編譯),列出32位值和寄存器('EAX = B504F333'和'ECX = B504F333')以及在相同時間的16位寄存器('IMUL CX RESUL','DX = 15F61998','AX = 9EA1DC29','7FFFFFFFFFFFFFFF(DX:AX)')。你究竟在做什麼,實際上有問題? – 2012-01-08 09:26:14
對不起,我糾正,結果=>結果 – flatronka 2012-01-08 09:32:57
對不起,它仍然沒有意義。如果實際指令是'IMUL CX',那麼DX:AX中的結果必須是'00A3:DC29',但你卻說它是'1998:DC29'。給我們實際的代碼和數據。 – 2012-01-08 09:40:57