Нести флаг на подписанной арифметике - PullRequest
0 голосов
/ 05 декабря 2018
mov ah, -128 
mov bh, 80h 
add ah,bh 

Почему этот код устанавливает CF, принимая во внимание тот факт, что вычисления не требуют переноса?Или лучше, каково поведение CF в знаковой арифметике и OF в беззнаковых?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Невозможно представить 128 с 8-битным значением со знаком:

-128 = 0x80

Итак, вы вычислили:

(-128)
+ (-128)
-------
-256   (not a 8 Bit value and overflow to the next Byte -> C is set)

И перенос установлен.

8-битное значение со знаком подходит для диапазона: -128 ... 127

0 голосов
/ 05 декабря 2018

Сложение выполняется как Два дополнения , и результат больше 8 бит.0x80 + 0x80 = 0x100 или в двоичном виде:

   0b10000000
+  0b10000000
-------------
= 0b100000000

и, следовательно, результат равен 0 и установлен флаг переноса.

Не думайте о -128 как отрицательном числе, скорее подумайтев качестве положительного числа (128), которое имеет ту же битовую комбинацию, что и комплимент двух ваших отрицательных чисел, затем выполните сложение без знака.(И поэтому установлен флаг переноса.)

...