Регистры состояния и управления
В микропроцессор включены несколько регистров, которые постоянно содержат информацию о состоянии как самого микропроцессора, так и программы, команды которой в данный момент загружены на конвейер. К этим регистрам относятся:
- регистр флагов eflags/flags;
- регистр указателя команды eip/ip.
Флаги регистра eflags/flags можно разделить на три группы:
- 8 флагов состояния. Эти флаги могут изменяться после выполнения машинных команд.
- 1 флаг управления. Обозначается df (Directory Flag).
Он находится в 10-м бите регистра eflags и используется цепочечными командами. - 5 системных флагов, управляющих вводом/выводом, маскируемыми прерываниями, отладкой, переключением между задачами и виртуальным режимом 8086.
Таблица 1. Флаги состояния
Мнемоника флага | Флаг | Номер бита вeflags | Содержание и назначение |
cf | Флаг переноса (Carry Flag) | 1 — арифметическая операция произвела перенос из старшего бита результата. Старшим является 7, 15 или 31-й бит в зависимости от размерности операнда; 0 — переноса не было | |
pf | Флаг паритета (Parity Flag) | 1 — 8 младших разрядов (этот флаг — только для 8 младших разрядов операнда любого размера) результата содержат четное число единиц; 0 — 8 младших разрядов результата содержат нечетное число единиц | |
af | Вспомогательный флаг переноса (Auxiliary carry Flag) | Только для команд работающих с BCD-числами. Фиксирует факт заема из младшей тетрады результата: 1 — в результате операции сложения был произведен перенос из разряда 3 в старший разряд или при вычитании был заем в разряд 3 младшей тетрады из значения в старшей тетраде; 0 — переносов и заемов в(из) 3 разряд(а) младшей тетрады результата не было | |
zf | Флаг нуля (Zero Flag) | 1 — результат нулевой; 0 — результат ненулевой | |
sf | Флаг знака (Sign Flag) | Отражает состояние старшего бита результата (биты 7, 15 или 31 для 8, 16 или 32-разрядных операндов соответственно): 1 — старший бит результата равен 1; 0 — старший бит результата равен 0 | |
of | Флаг переполнения (Overflow Flag) | Флаг of используется для фиксирования факта потери значащего бита при арифметических операциях: 1 — в результате операции происходит перенос (заем) в(из) старшего, знакового бита результата (биты 7, 15 или 31 для 8, 16 или 32-разрядных операндов соответственно); 0 — в результате операции не происходит переноса (заема) в(из) старшего, знакового бита результата | |
iopl | Уровень Привилегий ввода-вывода (Input/Output Privilege Level) | 12, 13 | Используется в защищенном режиме работы микропроцессора для контроля доступа к командам ввода-вывода в зависимости от привилегированности задачи |
nt | флажок вложенности задачи (Nested Task) | Используется в защищенном режиме работы микропроцессора для фиксации того факта, что одна задача вложена в другую |
Таблица 2. Системные флаги
Мнемоника флага | Флаг | Номер бита вeflags | Содержание и назначение |
tf | Флаг трассировки (Trace Flag) | Предназначен для организации пошаговой работы микропроцессора. 1 — микропроцессор генерирует прерывание с номером 1 после выполнения каждой машинной команды. Может использоваться при отладке программ, в частности отладчиками; 0 — обычная работа | |
if | Флагпрерывания (Interrupt enable Flag) | Предназначен для разрешения или запрещения (маскирования) аппаратных прерываний (прерываний по входу INTR). 1 — аппаратные прерывания разрешены; 0 — аппаратные прерывания запрещены | |
rf | Флаг возобновления (Resume Flag) | Используется при обработке прерываний от регистров отладки. | |
vm | Флаг виртуального (Virtual 8086 Mode) | Признак работы микропроцессора в режиме виртуального 8086. 1 — процессор работает в режиме виртуального 8086; 0 — процессор работает в реальном или защищенном режиме | |
ac | Флаг контроля выравнивания (Alignment Check) | Предназначен для разрешения контроля выравнивания при обращениях к памяти. Используется совместно с битом am в системном регистре cr0. К примеру, Pentium разрешает размещать команды и данные с любого адреса. Если требуется контролировать выравнивание данных и команд по адресам кратным 2 или 4, то установка данных битов приведет к тому, что все обращения по некратным адресам будут возбуждать исключительную ситуацию |
eip/ip (Instraction Pointer register) — регистр-указателькоманд.
Регистр eip/ip имеет разрядность 32/16 бит и содержит смещение следующей подлежащей выполнению команды относительно содержимого сегментного регистра cs в текущем сегменте команд. Этот регистр непосредственно недоступен программисту, но загрузка и изменение его значения производятся различными командами управления, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний также приводит к модификации регистра eip/ip.