32-х битный регистр EFLAGS содержит группу флагов состояния, управляющий флаг и группу системных флагов. Некоторые флаги могут быть изменены напрямую с помощью специальных команд. Полностью регистр флагов не изменяется. После включения питания в нем записано число 0000002h
Рисунок 3 – Основная исполнительная среда микропроцессора с архитектурой IA32
Флаги состояния:
CF – флаг переноса
PF – флаг четности, устанавливается в «1», если младший значащий байт результата содержит четное число единиц
AF – корректирующий флаг, устанавливается если был перенос или заем из младшей тетрады в старшую (из старшей в младшую). Используется при выполнении операций двоично-десятичной арифметики. В иных моделях процессоров может называться CY.
ZF – флаг равенства 0 результата операции.
SF – флаг знака результата. Устанавливается равным старшему значащему биту результата. (0 – положительный результат, 1 – отрицательный результат)
OF – флаг переполнения. Устанавливается, если результирующее целое положительное слишком большое или отрицательное слишком маленькое. Этот флаг показывает условия переполнения в арифметике для целых чисел со знаком (в дополнительном коде).
Из вышеперечисленных флагов только CF может быть напрямую изменен.
DF – флаг направления, управляет строковыми командами. Если DF установлен в «1»,то при операциях со строками адреса уменьшаются (обработки строки идет с конца), если DF сброшен в «0» – адреса увеличиваются (обработка строки одет с начала).
Системные флаги – управляют операционной системой и исполняемой программой. Они не должны меняться прикладным ПО.
TF – флаг трассировки (trap flag), когда установлен в «1» – разрешает пошаговое исполнение программы
IF – флаг разрешения прерываний
IOPL – 2 бита, используются для разрешения или запрещения доступа к адресному пространству ввода/вывода. Приложение, пытающееся обратиться к пространству ввода/вывода должно обладать уровнем привилегий не более (т.е. меньше или равным) чем записано в этих битах. Всего поддерживается 4 уровня привилегий: 0 (операционная система), 1,2, (драйвера и программы обслуживающие ОС), 3 (прикладное ПО). В операционной системе Windows используется только 2 уровня привилегий: 0 (ядро ОС, драйвера уровня ядра и т.п.) и 3 (прикладное ПО).
NT – управляет цепочкой прерванных задач или цепочкой вызовов подпрограмм. Установлен в «1», если текущая задача связана с предыдущей, и сброшен в «0», если связи нет.
RF – управляет ответом процессора на отладочные исключения.
VM – флаг виртуального I8086. Для разрешения режима виртуального I8086 устанавливается в «1», сброс в «0» приводит к возвращению в защищенный режим.
AC – проверяет выравнивание слов в памяти. Установка этого флага и бита AM в регистре CR0 разрешает проверку выравнивания ссылок памяти; сброс этого флага и/или бита AM - отменяет проверку выравнивания.
VIF – виртуальный флаг прерывания.
VIP – виртуальный флаг обработки прерывания. Устанавливается ПО, процессору этот флаг доступен только для чтения. Если установлен, то прерывание обрабатывается, сброшен – никакое прерывание не обрабатывается.
ID – флаг идентификации. Возможность сбрасывать или устанавливать этот флаг показывает, что команда CPUID поддерживается.
В 64-битном режиме используется регистр RFLAGS. Старшие 32 разряда которого зарезервированы, а младшие – аналогичны EFLAFS.
Кроме представленных на рисунке 24 регистров, системному программисту доступны и другие ресурсы процессора:
· Порты ввода/вывода
· Управляющие регистры: 5 штук (CR0÷CR4), определяют режимы работы процессора и характеристики текущей задачи. Описание и назначение этих регистров приводится в документации фирмы Intel [2].
· Регистры управления памятью: регистры GDTR, IDTR, LDTR и регистр задачи (task register) определяют местоположение структур данных, используемых в управлении памятью в защищенном режиме. Описание и назначение этих регистров приводится в документации фирмы Intel.
· Отладочный регистр: отладочные регистры DR0÷DR7 управляют и позволяют отлаживать выполнение операций процессором.
· Регистры диапазона типа памяти (MTRR): используются для назначения областям памяти типа кэширования (от «ни в коем случае не кэшируемая – сразу запись/чтение» до «чтение и запись из кэша по мере возможности»), зависящего от типа памяти (ROM, RAM, отображенная на ОП память устройств и т.п.) и позволяющие оптимизировать работу с памятью.
· Специфичные регистры: у процессора есть множество различных регистров, используемых для управления и отчета о производительности процессора. Виртуально, каждому из них соответствует какая то системная функция и программно они не доступны (единственное исключение – таймер).
· Регистры проверки машины
· Счетчики контроля производительности