Подавляющее большинство программ имеют вид сложных ветвленных алгоритмов. В такой программе нередко требуется принять решение на основании результата только что исполненной команды. В этом случае используется регистр флагов (признаков) - в него АЛУ МП автоматически записывает некоторые результаты полученные при выполнении операций. Каждый флаг может иметь два значения: истинно (флаг=1) и ложно (флаг=0).
Регистр флагов:
15 7 0
OF
DF
IF
TF
SF
ZF
AF
PF
Все флаги можно разделить на две группы:
1) Неоперационные - флаги управления МП. Они выставляются программистом с помощью специальных команд. Предназначены для переключения режимов работы МП:
DF - флаг НАПРАВЛЕНИЯ. Устанавливается командами CLD и STD. Используется в командах обработки строк для указания направления продвижения по строке данных. Если DF = 0, то строка сканируется от меньших адресов к большим.
IF - флаг ПРЕРЫВАНИЙ. Устанавливается командами CLI и STI. Используется для запрещения ВНЕШНИХ прерываний (ЗА ИСКЛЮЧЕНИЕМ НЕМАСКИРУЕМЫХ). Если IF = 0, то прерывания не возникают.
TF - флаг ТРАССИРОВКИ. Устанавливается комбинацией команд через стек (смотрите применение команды PUSHF). Используется для перевода микропроцессора в одношаговый режим. Если TF = 1, включен режим трассировки.
2) Операционные - флаги устанавливаются автоматически в зависимости от результата выполнения предыдущей операции. Используются для управления ветвлением в программах:
OF - флаг ПЕРЕПОЛНЕНИЯ. Устанавливается арифметическими операциями. Используется для определения переполнения в операциях с числами, представленными в дополнительном коде. Если OF = 1, то результат арифметической операции вышел за допустимые пределы.
SF - флажок ЗНАКА. Устанавливается арифметическими операциями. Используется для определения знака числа в знаковой арифметике по старшему биту результата операции. Если SF = 1, то результат отрицательный.
ZF - флаг НУЛЯ. Устанавливается арифметическими операциями. Показывает, был ли равен нулю результат последней операции. Если ZF = 1, то результат равен нулю.
AF - флаг ДОПОЛНИТЕЛЬНОГО ПЕРЕНОСА. Устанавливается арифметическими операциями. Используется в командах десятичной арифметики. Фиксирует перенос из младшей тетрады результата в старшую. Если AF = 1, то произошел перенос.
PF - флаг ЧЕТНОСТИ. Устанавливается арифметическими операциями. Используется для контроля правильности передачи данных. Фиксирует наличие четного количества единиц в младших 8 битах результата последней операции. Если PF = 1, то количество единиц четное.
CF - флаг ПЕРЕНОСА. Устанавливается арифметическими операциями. Используется для определения переноса (при сложении) или заема (при вычитании), а также значения выдвигаемого бита после операций сдвигов. Если CF = 1, то произошел перенос (заем).
Состояние некоторых флагов можно изменить с помощью команд управления состоянием отдельных флажков.
CLC сбросить флаг CF в 0
STC Установить флаг CF в 1
CMC Инвертировать флаг CF
CLD Сбросить флаг DF в 0
STD Установить флаг DF в 1
CLI Сбросить флаг IF в 0
STI Установить флаг IF в 1
Для организации ветвлений используются команды передачи управления или переходов. Их выполнение заключается в изменении содержимого регистров CS и IP.