编辑:我使用this计算器检查结果,但是看来计算器本身在计算错误的值,从而导致了这个问题。
使用mul
指令时,我注意到将2个高数字相乘会导致错误的值。例子:
mov eax,0ffffffffh
mov ebx,0ffffffffh
mul ebx
; eax:00000001 I expected eax to be 0
; edx:FFFFFFFE
mov eax,0ffffff00h
mov ebx,0ffffffffh
mul ebx
; eax:00000100 I expected eax also to be 0
; edx:FFFFFEFF
我知道-1 * -1
是1
,而ffffffffh
是负1。但是,将这两个数字以无符号乘法相乘不会得到1
,或者会吗?另一个示例也是如此。
同样,在使用imul
指令时,我也会得到奇数,但是我认为这是因为有符号乘法:
mov eax,0fffffff0h
mov ebx,5
imul ebx
; eax:FFFFFFB0
; edx:FFFFFFFF ; I expected edx to be 4