MUL设置OF时不应该

Lam*_*sti 2 x86 assembly 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
Run Code Online (Sandbox Code Playgroud)

...

    end
Run Code Online (Sandbox Code Playgroud)

Pau*_*l R 6

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

对于有符号的乘法,你需要imul.