MUL设置OF时不应该

时间:2013-04-29 09:06:54

标签: assembly x86 multiplication x86-16

这就是问题:在第二个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

2 个答案:

答案 0 :(得分:6)

mul是一个无符号乘法指令,所以你得到一个溢出,因为你实际上是乘以120 * 65526.(注意-6 signed = 0xfffa = 65526 unsigned。)

对于签名乘法,您需要imul

答案 1 :(得分:2)

由于签名,您必须使用IMUL代替MUL