2013-04-29 3 views
2

В этом проблема: на втором mul флаг переполнения устанавливается в 1; умножение - это простой 120*(-6) = -720, который содержится в 16 бит ... Я не понимаю, почему.MUL устанавливает OF, когда он не должен

.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 

ответ

6

mul является команда умножения без знака, так что вы получите переполнение, потому что вы на самом деле умножив 120 * 65526. (Обратите внимание, что -6 = подписан 0xfffa = 65526 без знака.)

Для Подписано Умножение необходимо imul.

+1

Спасибо! :) Lamberto –

2

Вы должны использовать IMUL вместо MUL из-за знака.

+0

Спасибо! :) Lamberto –

 Смежные вопросы

  • Нет связанных вопросов^_^