Значение моего флага подписи отображается неправильно?Я не прав насчет того, как работает флаг? - PullRequest
2 голосов
/ 06 апреля 2019

Я добавляю ax и bx.Таким образом, если MSB результата равен 1, тогда флаг знака = 1 или флаг знака = 0.Я прав?Если я прав, почему в выводе отображается флаг flag = 0?Разве это не должно быть SF = 1?Если я ошибаюсь, поправьте меня.Я в замешательстве

mov ax,20h
mov bx,80h
add ax,bx

1 Ответ

2 голосов
/ 08 апреля 2019

Таким образом, если MSB результата равен 1, тогда флаг знака = 1 или флаг знака = 0. Я прав?

Вы правы в отношении флага знака, отражающего наиболее значимый бит результата, , но в вашем добавлении add ax, bx вы добавляете 2 слова, и в этом вся разница.

Рассмотрим добавление байтов :

mov     al, 20h
mov     bl, 80h
add     al, bl     ; -> AL = 20h + 80h = A0h

Результат в AL имеет старший значащий бит (бит 7) , установленный и поэтому SF = 1

Рассмотрим добавление слов :

mov     ax, 0020h
mov     bx, 0080h
add     ax, bx     ; -> AX = 0020h + 0080h = 00A0h

Результат в AX имеет старший значащий бит (бит 15) , очищенный , поэтому SF = 0

Совет

Это может помочь написать шестнадцатеричные числа с таким количеством цифр, которое может содержать регистр.
Напишите mov ax, 0020h вместо mov ax, 20h.

...