7.4.1.4.2. Регистр системных флагов
Регистр EFLAGS управляет вводом-выводом,
маскируемыми прерываниями, отладкой, переключением задач и включением исполнения в режиме
виртуального МП 8086
в защищенной многозадачной среде - все это в дополнение к флагам состояния,

Рис. 1.7. Регистры общего
назначения.
которые отражают результат исполнения команды. На рис.
1.8 показано содержимое
регистра EFLAGS. Младшие 16 бит его представляют собой 16-разрядный регистр флагов и состояния МП
80286, называемый FLAGS, который наиболее полезен при исполнении программ для МП 8086 и 80286.
В
нижеследующих описаниях термин «установлен» означает «установлен в 1», а термин «сброшен» означает «установлен в О».
VM (режим виртуального МП 8086),
бит 17. Бит
обеспечивает режим виртуального МП 8086 в защищенном режиме. Если он
установлен, когда процессор находится в защищенном режиме, то МП 80386
переключается на работу в режиме виртуального МП 8086. Бит VM может быть установлен только
двумя способами: 1)
в защищенном режиме командой IRET, только если текущий уровень
привилегий равен
нулю; 2) переключением задачи на любом уровне привилегий.
RF (флаг возобновления), бит 16. Временно приостанавливает
обработку исключений
для отладки (т. е. возвращает к нормальному исполнению программы) так, что исполнение команды
может быть повторено после обработки исключения для отладки, не вызывая немедленно обработку другого
исключения для отладки.
NT (вложенная задача), бит 14. Процессор использует этот флаг
для управления
последовательностью прерываемых и вызываемых задач. Команда CALL временно
передает управление от программы к подпрограмме. При завершении этой подпрограммы управление возобновляется
с команды, следующей за командой CALL. Бит NT влияет на выполнение команды IRET.
IOPL (уровень привилегий
ввода-вывода), биты 12-13. Это двухбитовое поле используется в защищенном режиме. Биты IOPL показывают наивысшее значение текущего уровня привилегий (CPL),
позволяющее выполнять команды ввода-вывода, не приводя к обработке исключения 13 или обращения к
битовой карте

Рис. 1.8.
Регистр EFLAGS.
разрешения ввода-вывода. Это поле показывает также
наивысшее значение CPL, которое позволяет изменять бит IF при выборке нового значения из
стека в регистр EFLAGS (команды выборки POP и загрузки PUSH в стек рассматриваются в гл. 10).
OF (флаг переполнения), бит 11. Флаг установлен, если операция
привела к переносу (заему) в знаковый
(самый старший) бит результата, но не привела к переносу (заему) из самого старшего бита, или наоборот.
DF (флаг направления), бит 10. Определяет, должны ли регистры ESI и/или EDI инкремектироваться
или декрементироваться во время операций со строками. Если флаг сброшен, то они инкрементируются, иначе
декрементируются.
IF (разрешение прерывания), бит 9.
Установка флага
IF позволяет МП воспринимать
запросы внешних (маскируемых) прерываний. Очистка этого бита запрещает такие прерывания. Флаг
не влияет на обработку как маскируемых внешних прерываний, так и исключений.
TF (флаг ловушки), бит 8. Установка флага TF переводит МП в пошаговый режим для отладки. Процессор автоматически генерирует исключение 1 после
каждой команды, что позволяет
проверить программу на исполнение каждой
команды. Когда флаг IF сброшен, то ловушка по
исключению 1 возникает в точках адресов останова, загружаемых в регистры отладки DRO-DR3. Более подробная информация дана ниже при
обсуждении регистров отладки.
SF (флаг знака), бит 7. Установлен, если установлен
старший бит результата, иначе он сброшен. Для 8-, 16- и 32-разрядных операций этот флаг отражает
состояние бита 7,
15 и 31 соответственно.
ZF (флаг нуля), бит 6. Установлен, если все биты
результата равны нулю, иначе сброшен.
AF (флаг вспомогательного
переноса), бит 4. Используется для упрощения сложения и вычитания упакованных двоично-десятичных чисел.
Независимо от длины операнда (8, 16 или 32 бит) флаг AF установлен, если операция
привела к заему из
бита 3 при вычитании или переносу из бита 3 при сложении, иначе он сброшен. Напомним, что
двоично-десятичные числа используют биты от 0 до 3 для представления десятичных
цифр.
PF (флаг четности), бит 2. Установлен, если младшие восемь
битов операнда содержат
четное число единиц (проверка на четность), иначе сброшен. На этот флаг влияют только младшие восемь
битов независимо от длины операнда.
CF (флаг переноса), бит 0. Установлен, если операция
привела к переносу из старшего бита при сложении или к заему в старший бит при вычитании, иначе
сброшен. Для 8-,
16- и 32-разрядных операций этот бит устанавливается при переносе из битов 7, 15 и 31
соответственно.