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)
mul是一个无符号乘法指令,所以你得到一个溢出,因为你实际上乘以120*65526.(注意-6 signed = 0xfffa = 65526 unsigned.)
对于有符号的乘法,你需要imul.