Флаг переноса операции 0 - 1 в 8-битном регистре - PullRequest
1 голос
/ 09 мая 2020

Я попробовал следующий код в emu 80x86 IDE:

mov al,0h
sub al,1h

На выходе он отображается в эмуляторе al=FF, и я понял это, но я не понял, почему в раздел флагов cf=1

1 Ответ

2 голосов
/ 09 мая 2020

Флаг переноса CF используется, когда ЦП работает с целым числом без знака числами (в 8-битных регистрах они могут иметь значение от 00h до FFh).

Когда выполняется сложение и результат превышает максимальное значение FFh, CF сигнализирует, что это произошло, и это число 1 должно быть добавлено в регистр с более высоким порядком (ah).

Когда выполняется вычитание и результат ниже минимального значения 00h, CF сигнализирует, что это произошло, и что число 1 должно быть заимствовано (вычтено) из ah.

В вашем пример кода результат вычитания 1h из 0h в al ниже допустимого минимального значения, поэтому установлен CF. вы смотрите на эти числа как целые числа со знаком , их допустимый диапазон составляет от -128 до +127 (от 80h до 7F), а переполнение или недостаточное заполнение сигнализируется другим флагом of. В вашем коде результат (рассматриваемый как число со знаком) равен -1 (FFh), и это находится в допустимом диапазоне (без переполнения), поэтому вы должны увидеть в эмуляторе, что of=0.

...