【发布时间】:2019-12-26 01:34:19
【问题描述】:
编辑:我使用this 计算器检查结果,但似乎计算器本身计算了错误的值,导致了这个问题。
在使用mul 指令时,我注意到将两个高数相乘会导致错误的值。例子:
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,或者是吗?另一个例子也是如此。
另外,当使用imul 指令时,我也会得到奇怪的数字,但我认为这是因为有符号乘法:
mov eax, 0fffffff0h
mov ebx, 5
imul ebx
; eax:FFFFFFB0
; edx:FFFFFFFF ; I expected edx to be 4
【问题讨论】:
标签: assembly x86 multiplication cpu-registers twos-complement