OF — арифметическое переполнение. Флаг OF=1, если
относительно знакового бита в результате выполнения, например,
арифметических команд произошла следующая метаморфоза:
(+)+(+)=(-); (+)-(-)=(-);
(-)+(-)=(+); (-)-(+)=(+);
(здесь в скобках указаны знаки).
CF —переполнение (байта, слова) или заем, если было вычитание.
ZF —признак нулевого результата. ZF = 1 — значит получили в
результате команды АЛУ, INC, или DEC — результат, равный нулю.
SF —знак. Здесь все просто: если команда воздействует на флаги, то флаг
SF запоминает содержимое старшего бита данных:
а) SF:= <D7>, если операнд — 1 байт;
б) SF:= <D15>, если операнд — 1 слово.
PF — событие (признак) наличия в результате четного (PF = 1)
числа единиц; касается только байта (если слово, то —младшего байта).
Приведем пример. Пусть в AX хранится: 1DCO. Выполним команду:
AND AX,1245
Н-код Двоичный код
1DCO 0001 1101 1100 0000 (АХ)
И И
1245
0001 0010 0100 0101 data
Результат=1040 0001 0000 0100 0000 (АХ)
│
(D15)
Каково же будет состояние флагов?
OF = 0; арифметического переполнения не было (хотя для этой
команды это событие бессмысленно, но ЦА выполняет свой алгоритм);
CF = 0; логическая операция —поразрядная операция, и у нее не
может быть переноса (заема);
ZF = 0; результат отличен от нуля: 1040 ≠ 0;
SF = 0; знаковый флажок запоминает: SF= < D15> = 0; хотя это для
данной команды то же не имеет смысла, но ЦА выполняет свой алгоритм;
PF = 0 – в младшем байте одна единица, то есть нет четного
числа единиц (кстати, 0 —это четное число единиц).
Знание правил установки флагов и позволяет эффективно
использовать команды условного перехода.
В таблице 7 указаны и комбинированные условия переходов.
В этом случае лучше использовать для обозначения команды в
ассемблере буквы, не входящие в скобки. Разберем эти условия
подробнее.
1) CF V ZF. Допустим, из числа А вычитается число В, или
сравнивается число А с числом В (наиболее часто используемый прием
применения этого условия). Каковы варианты состояний флагов,
соответствующие этой функции? Для ответа на этот вопрос составим
47