10.1.1. Системные флаги

Регистр флагов EFLAGS - это 32-битный регистр, в то время как в разделе 2. ^рассмотрена только часть из младших 16 бит. Теперь мы можем обсудить все:

биты 31-22: нули

бит 21: флаг идентификации (ID)

бит 20: флаг ожидания виртуального прерывания (VIP)

бит 19: флаг виртуального прерывания (VIF)

бит 18: флаг контроля за выравниванием (АС)

бит 17: флаг режима V86 (VM)

бит 16:        продолжения задачи (RF)

бит 15: О

бит 14: флаг вложенной задачи (NT)

биты 13-12: уровень привилегий ввода-вывода (IOPL)

бит 11: флаг переполнения (OF)

бит 10: флаг направления (DF)

бит 9: флаг разрешения прерываний (IF)

бит 8: флаг трассировки (TF)

биты 7-0: флаги состояния (SF, ZF, AF, PF, CF) были рассмотрены подробно раньше

Флаг TF:   если он равен 1, перед выполнением каждой команды генерируется

исключение #DB (INT 1). Флаг IF:    если он равен 0, процессор не реагирует ни на какие маскируемые

аппаратные прерывания.

Флаг DF: если он равен 1, регистры EDI/ESI при выполнении команд строко­вой обработки уменьшаются, иначе - увеличиваются.

Поле IOPL: уровень привилегий ввода-вывода, с которым выполняется текущая программа или задача. Чтобы программа могла обратиться к порту

ввода-вывода, ее текущий уровень привилегий (CPL) должен быть

меньше или равен IOPL. Это поле можно модифицировать, только имея нулевой уровень привилегий.

равен если текущая задача является вложенной по отношению к ка­кой-то другой - в обработчиках прерываний и исключений и вызван­ных командой call задачах. Флаг влияет на работу команды IRET. когда этот флаг равен 1, отладочные исключения временно запреще­ны. Он устанавливается командой IRETD из обработчика отладоч­ного прерывания, чтобы #DB не произошло перед выполнением ко­манды, которая его вызвала, еще раз. На флаг не влияют команды POPF, PUSHF и IRET.

установка этого флага переводит процессор в режим V86 (виртуаль­ный 8086).

если установить этот флаг и флаг AM в регистре CRO, каждое обра­щение к памяти из программ, выполняющихся с CPL = 3, не вырав­ненное на границу слова для слов и на границу двойного слова для двойных слов, будет вызывать исключение #АС.

это виртуальный образ флага IF (только для Pentium и выше).

этот флаг указывает процессору, что произошло аппаратное преры­вание. Флаги VIF и VIP используются в многозадачных средах для того, чтобы каждая задача имела собственный виртуальный образ флага IF (только для Pentium и выше - см. раздел 10.9.1).

если программа может изменить значение этого флага - процессор поддерживает команду CPUID (только для Pentium и выше).

Флаг NT:

Флаг RF:

Флаг VM: Флаг АС:

Флаг VIF:

Флаг VIP;

Флаг ID: