Assembler - язык неограниченных возможностей

         

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


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

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

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

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

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

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

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

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

бит 15: 0

бит 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, процессор не реагирует ни на какие маскируемые аппаратные прерывания.
Флаг DP: если он равен 1, регистры EDI/ESI при выполнении команд строковой обработки уменьшаются, иначе — увеличиваются.
Поле IOPL: уровень привилегий ввода-вывода, с которым выполняется текущая программа или задача. Чтобы программа могла обратиться к порту ввода-вывода, ее текущий уровень привилегий (CPL) должен быть меньше или равен IOPL. Это поле можно модифицировать, только имея нулевой уровень привилегий.
Флаг NT: равен 1, если текущая задача является вложенной по отношению к какой-то другой — в обработчиках прерываний и исключений и вызванных командой call задачах. Флаг влияет на работу команды IRET.
Флаг RF: когда этот флаг равен 1, отладочные исключения временно запрещены. Он устанавливается командой IRETD из обработчика отладочного прерывания, чтобы #DB не произошло перед выполнением команды, которая его вызвала, еще раз. На флаг не влияют команды POPF, PUSHF и IRET.
Флаг VM: установка этого флага переводит процессор в режим V86 (виртуальный 8086).
Флаг АС: если установить этот флаг и флаг AM в регистре CR0, каждое обращение к памяти из программ, выполняющихся с CPL = 3, не выровненное на границу слова для слов и на границу двойного слова для двойных слов, будет вызывать исключение #АС.
Флаг VIF: это виртуальный образ флага IF (только для Pentium и выше).
Флаг VIP: этот флаг указывает процессору, что произошло аппаратное прерывание. Флаги VIF и VIP используются в многозадачных средах для того, чтобы каждая задача имела собственный виртуальный образ флага IF (только для Pentium и выше — см. главу 5.9.1).
Флаг ID: если программа может изменить значение этого флага — процессор поддерживает команду CPUID (только для Pentium и выше).



Содержание раздела