Рис. 1 От бита до двойного слова
Рис. 2
- блок выборки инструкций;
- блоки декодирования инструкций;
- блоки выборки данных;
- управляющий блок;
- блоки выполнения инструкций;
- блоки сохранения результатов;
- блок работы с прерываниями;
- ПЗУ, содержащее микрокод;
- набор регистров;
- счетчик команд.
CF (Флаг переноса, бит 0)
Флаг переноса фиксирует значение переноса (заема), возникающего при сложении (вычитании). Иногда используется и в других ситуациях.
PF (Флаг четности, бит 2)
Фиксирует наличие четного числа единиц в младшем байте результата операции, может быть использован, например, для контроля правильности передачи данных.
AF (Флаг вспомогательного переноса, бит 4)
Фиксирует перенос (заем) из младшей тетрады, т.е. из бита 3 в старшую тетраду при сложении (вычитании). Используется только для двоично-десятичной арифметики, которая оперирует исключительно младшими байтами.
ZF (Флаг нуля, бит 6)
Сигнализирует о получении нулевого (ZF = 1) или ненулевого (ZF = 0) результата операции.
SF (Флаг знака, бит 7)
Дублирует значение старшего бита результата, который при использовании дополнительного кода соответствует знаку числа (0 – положительное число, 1 – отрицательное).
TF (Флаг трассировки, бит 8)
При TF = 1, микропроцессор переходит в пошаговый режим работы, применяемый при отладке программ, когда автоматически генерируется особая ситуация отладки (#DB) после выполнения каждой команды. Прерывание отладки начнет генерироваться, если прикладная программа установит флаг TF с помощью команд POPF, POPFD или IRET.
IF (Флаг разрешения прерываний, бит 9)
При IF = 1, микропроцессор воспринимает (распознает) и соответственно реагирует на запрос прерывания по входу INTR#; при IF = 0, прерывания по этому входу запрещаются и микропроцессор игнорирует поступающие запросы прерываний. Значение флага IF не влияет на восприятие внешних немаскируемых прерываний по входу NMI#, а также внутренних программных прерываний, выполняемых по команде INT. В защищенном режиме изменение этого флага командами CLI, STI, POPF, POPFD и IRET возможно не всегда и определяется текущим уровнем привилегий выполняемого кода (CPL) и уровнем привилегий ввода/вывода (IOPL).
DF (Флаг направления, бит 10)
Флаг направления определяет порядок обработки цепочек в соответствующих командах (строковые команды: STOS, LODS, CMPS, OUTS и т.д.) — от меньших адресов к большим (DF = 0) или от больших к меньшим (DF = 1).
OF (Флаг переполнения, бит 11)
Флаг переполнения сигнализирует о потере старшего бита результата в связи с переполнением разрядной сетки при работе со знаковыми числами. При сложении этот флаг устанавливается в 1, если происходит перенос в старший бит и нет переноса из старшего бита, или имеется перенос из старшего бита, но отсутствует перенос в него; в противном случае, флаг OF устанавливается в 0. При вычитании он устанавливается в 1, когда возникает заем из старшего бита, но заем в старший бит отсутствует, либо имеется заем в старший бит, но отсутствует заем из него.
IOPL (Уровень привилегий ввода/вывода, биты 13 и 12: Intel286 …)
Уровень привилегий ввода/вывода используется в механизме защиты для управления доступом к адресному пространству ввода/вывода. Текущий уровень привилегий (CPL) совместно с IOPL определяет возможность по изменению поля IOPL командами POPF, POPFD и IRET.
NT (Вложенная задача, бит 14: Intel286 …)
Процессор устанавливает и проверяет этот флаг для контроля за прерванными задачами и при вызове процедур. Флаг NT влияет на действия, производимые командой IRET. Этот флаг может быть изменен командой POPF, POPFD и IRET. Некорректные изменения этого флага могут привести к возникновению различных особых ситуаций в прикладных программах.
RF (Флаг возобновления, бит 16: Intel386 …)
Флаг RF временно выключает обработку особых ситуаций отладки для того, чтобы команда, вызвавшая такую ситуацию, могла быть перезапущена и не стала бы причиной новой особой ситуации. Отладчик устанавливает этот флаг командой IRETD при возврате в прерванную программу. Команды POPF, POPFD (в режиме V86) и IRET на этот флаг не влияют.
VM (Виртуальный режим, бит 17: Intel386 …)
Установка флага VM переключает процессор в режим виртуального-8086 (специальный случай защищенного режима).
AC (Режим контроля выравнивания, бит 18: Intel486 …)
Установка флага AC и бита AM регистра CR0 включает контроль выравнивания при обращении к памяти. При этом генерируется особая ситуация контроля выравнивания (#AC), если происходит обращение к невыровненному операнду, например, к слову по нечетному адресу или к двойному слову по адресу не кратному четырем. Особая ситуация контроля выравнивания генерируется только при уровне привилегий равном 3.
VIF (Виртуальное прерывание, бит 19: Pentium …)
Этот флаг используется в специальном расширенном режиме обработки прерываний (виртуальные прерывания управляются флагом CR4.VME) и является виртуальным подобием флага IF. В зависимости от текущего значения этого флага в режиме V86 и в защищенном режиме (когда IOPL < 3, CPL = 3) процессор определенным образом обрабатывает вызовы внешних маскируемых прерываний (векторы от 32 до 255). Флаг VIF используется совместно с флагом VIP и позволяет обеспечить нормальное выполнение старого ПО, использующего команды управления маскируемыми прерываниями, в современной мультипроцессорной и мультизадачной программно-аппаратной среде.
VIP (Ожидание виртуального прерывания, бит 20: Pentium …)
Флаг VIP используется совместно с флагом VIF и позволяет прикладным программам в режиме поддержки виртуальных прерываний отслеживать внешние вызовы прерываний даже тогда, когда программа замаскирует их выполнение (индикация отложенных виртуальных прерываний). За дополнительной информацией по использованию этих флагов обратитесь к описанию прерываний и особых ситуаций.
ID (Флаг идентификации, бит 21: Pentium …)
Предназначен для проверки — поддерживается ли процессором команда CPUID. Если в программе можно установить и сбросить этот флаг, значит команда CPUID данным процессором поддерживается.
Регистры общего назначения