16-разрядный регистр состояния FLAGS содержит всю необходимую информацию о состоянии процессора 8086 и результатах выполнения последней команды.
Битовые флаги:
OF - флаг переполнения;
DF - флаг направления;
IF - флаг прерывания;
TF - флаг трассировки;
SF - флаг знака;
ZF - флаг нуля;
AF - флаг дополнительного переноса;
PF - флаг четности;
CF - флаг переноса;
Флаг переполнения OF сигнализирует о переполнении, возникшем в результате сложения или вычитания.
Флаг направления DF определяет порядок сканирования цепочек байтов или слов в соответствующих командах: от меньших адресов к большим (DF = 0) или наоборот (DF = 1).
Флаг прерывания IF определяет реакцию процессора на запросы внешних прерываний по входу INT. Если IF = 0, запросы прерываний игнорируются (говорят также, что прерывания запрещены или замаскированы), а если IF = 1, процессор распознает запросы на прерывания и реагирует на них соответствующим образом. Состояние флага IF не влияет на восприятие внешних немаскируемых прерываний по входу NMI, а также внутренних (программных) прерываний.
Установка в состояние 1 флага трассировки TF переводит процессор в одношаговый (покомандный) режим работы, который применяется при отладке программ. В этом режиме процессор автоматически генерирует внутреннее прерывание после выполнения каждой команды с переходом к соответствующей подпрограмме обработки, которая может, например, демонстрировать содержимое регистров процессора на экране дисплея.
Флаг знака SF повторяет значение старшего бита результата, который при использовании дополнительного кода соответствует знаку числа.
Флаг нуля ZF сигнализирует о получении нулевого результата операции.
Флаг вспомогательного переноса AF фиксирует перенос (заем) из младшей тетрады в старшую 8- или 16-битного результата. Он необходим только для команд десятичной арифметики.
Флаг четности (паритета) PF фиксирует наличие четного числа единиц в младших 8 разрядах результата операции. Этот флаг предназначен для контроля правильности передачи данных.
Флаг CF фиксирует значение переноса (заема), возникающего при сложении или вычитании байтов или слов, а также значение выдвигаемого бита при сдвиге операнда.
Регистр флагов не считывается и не модифицируется непосредственно. Вместо этого в системе команд микропроцессора предусмотрены специальные команды, с помощью которых программист может задать необходимое ему состояние любого из флагов (кроме TF).
Содержимое регистра флагов используется микропроцессором при выполнении команд условного перехода, циклических сдвигов, операций с цепочками байтов или слов.
Для 32-разрядных процессоров регистр флагов EFLAGS также расширен до 32 бит. Биты 0-15, определенные для 8086 и 80286, имеют прежнее назначение. Ряд флагов добавился с появлением процессоров 4-го и 5-го поколений.
Управляющие регистры
Управляющие регистры (Control Registers) CRO, CR1, CR2, CR3 хранят признаки состояния процессора, общие для всех задач. Этих регистров в процессорах 8086/88 не было.
Регистр CRO обеспечивает общее управление режимами работы процессора. Назначение некоторых бит регистра CRO:
РЕ - разрешение защиты. Установка этого флага инструкцией переводит процессор в защищенный режим.
МP - мониторинг сопроцессора.
ЕМ - эмуляция сопроцессора. Установка этого флага позволяет прозрачно осуществлять его программную эмуляцию.
TS - флаг переключения задач, устанавливается автоматически при переключении задач.
ЕТ - индикатор поддержки инструкций математического сопроцессора.
PG - включение механизма страничной переадресации памяти.
Регистр CR1 не используется.
Регистр CR2 хранит 32-битный линейный адрес, по которому был получен последний отказ страницы памяти.
Регистр CR3 используется для управления страничной организацией памяти. В старших 20 битах хранится физический базовый адрес таблицы каталога страниц.
Регистр CR4 (присутствует в процессорах Pentium и выше) содержит биты разрешения архитектурных расширений.
Прочие регистры
Системные адресные регистры предназначены для ссылок на сегменты и таблицы в защищенном режиме.
Регистры отладки (Debug Register) предназначены для задания и управления отладочными точками останова.
Состав регистров тестирования (Test Register) варьируется в зависимости от типа процессора. Процессоры 80386 имели только два регистра, предназначенных для тестирования кэша страничной переадресации, для процессора 486 состав регистров расширен.
Модельно-специфические регистры MSR (Model-Specific Registers) предназначены для управления расширениями отладки, мониторингом производительности, машинным контролем, кэшированием областей физической памяти и другими функциями. Их назначение привязывается к архитектуре конкретного процессора, состав меняется от модели к модели.