这就是问题:在第二个mul
,溢出标志设置为1;乘法是一个简单的120*(-6) = -720
,它包含在16位......我不明白为什么。
.model small
.stack
.data
a dw 30
b dw 3
c dw -6
ris dw ?
.code
.startup
mov ax, a
mov bx, 4
mul bx
jo ove
mov bx, c
mul bx
jo ove
...
end
答案 0 :(得分:6)
mul
是一个无符号乘法指令,所以你得到一个溢出,因为你实际上是乘以120 * 65526.(注意-6 signed = 0xfffa = 65526 unsigned。)
对于签名乘法,您需要imul
。
答案 1 :(得分:2)
由于签名,您必须使用IMUL
代替MUL
。