Подтвердить что ты не робот

Сборка - флаг переноса несущего флага VS

У меня есть следующий код:

mov al, -5
add al, 132
add al, 1

Как я проверю, флаг переполнения и флаг переноса будут установлены в первой операции, а во втором - только переполнение.

Но я не понимаю, почему:

  • В неподписанном номере результат равен 143 (8FH), и для этого подходит 8-битное беззнаковое число (меньше 255) = > флаг переноса не должен быть установлен. В подписанном числе результат равен 127, он подходит для 8-битной подписки, и переполнение не должно быть установлено.

Что не так? Спасибо.

4b9b3361

Ответ 1

В беззнаковой арифметике вы добавили 0xFB в 0x84, то есть 251 + 132, который действительно больше 8-бит, и поэтому установлен флаг переноса.

Во втором случае вы добавляете +127 в 1, что действительно превышает подписанный 8-битный диапазон, и поэтому установлен флаг переполнения.

Ответ 2

Переполнение происходит, когда результат добавления двух положительных чисел отрицательный или                    результат добавления двух отрицательных чисел положителен. Например: +127+1=?

+127=0111 1111
  +1=0000 0001
     ---------
     1000 0000 

Как мы видим биты знака двух операндов и знаковый бит                в результате мы обнаруживаем, что переполнение произошло, и ответ неверный.