Справочник по языку Ассемблера IBM PC

     

Регистры состояния и управления


В микропроцессор включены несколько регистров (см. ), которые постоянно содержат информацию о состоянии как самого микропроцессора, так и программы, команды которой в данный момент загружены на конвейер. К этим регистрам относятся:

  • регистр флагов eflags/flags;
  • регистр указателя команды .

Используя эти регистры, можно получать информацию о результатах выполнения команд и влиять на состояние самого микропроцессора. Рассмотрим подробнее назначение и содержимое этих регистров:

eflags/flags (flag register) — регистр флагов. Разрядность eflags/flags — 32/16 бит. Отдельные биты данного регистра имеют определенное функциональное назначение и называются флагами. Младшая часть этого регистра полностью аналогична регистру flags для i8086. На показано содержимое регистра eflags.

Содержимое регистра eflags

Исходя из особенностей использования, флаги регистра eflags/flags можно разделить на три группы:

  • 8 флагов состояния. Эти флаги могут изменяться после выполнения машинных команд.
    Флаги состояния регистра eflags

    отражают особенности результата исполнения арифметических или логических операций. Это дает возможность анализировать состояние вычислительного процесса и реагировать на него с помощью команд условных переходов и вызовов подпрограмм. В приведены флаги состояния и указано их назначение;

  • 1 флаг управления. Обозначается df (Directory Flag).
    Он находится в 10-м бите регистра eflags и используется цепочечными командами. Значение флага df определяет направление поэлементной обработки в этих операциях: от начала строки к концу (df ="" 0) либо наоборот, от конца строки к ее началу (df ="" 1).
    Для работы с флагом df существуют специальные команды: cld (снять флаг df) и std (установить флаг df).
    Применение этих команд позволяет привести флаг df в соответствие с алгоритмом и обеспечить автоматическое увеличение или уменьшение счетчиков при выполнении операций со строками;
  • 5 системных флагов, управляющих вводом/выводом, маскируемыми прерываниями, отладкой, переключением между задачами и виртуальным режимом 8086.
    Прикладным программам не рекомендуется модифицировать без необходимости эти флаги, так как в большинстве случаев это приведет к прерыванию работы программы. В перечислены системные флаги, их назначение.




Таблица 1. Флаги состояния


Мнемоника флагаФлагНомер бита в eflagsСодержание и назначение
cfФлаг переноса
(Carry Flag)
0 1 — арифметическая операция произвела перенос из старшего бита результата. Старшим является 7, 15 или 31-й бит в зависимости от размерности операнда;
0 — переноса не было
pfФлаг паритета
(Parity Flag)
2 1 — 8 младших разрядов (этот флаг — только для 8 младших разрядов операнда любого размера) результата содержат четное число единиц;
0 — 8 младших разрядов результата содержат нечетное число единиц
afВспомогательный флаг переноса
(Auxiliary carry Flag)
4 Только для команд работающих с BCD-числами. Фиксирует факт заема из младшей тетрады результата:
1 — в результате операции сложения был произведен перенос из разряда 3 в старший разряд или при вычитании был заем в разряд 3 младшей тетрады из значения в старшей тетраде;
0 — переносов и заемов в(из) 3 разряд(а) младшей тетрады результата не было
zfФлаг нуля (Zero Flag)6 1 — результат нулевой;
0 — результат ненулевой
sfФлаг знака
(Sign Flag)
7 Отражает состояние старшего бита результата (биты 7, 15 или 31 для 8, 16 или 32-разрядных операндов соответственно):
1 — старший бит результата равен 1;
0 — старший бит результата равен 0
ofФлаг переполнения
(Overflow Flag)
11 Флаг of используется для фиксирования факта потери значащего бита при арифметических операциях:
1 — в результате операции происходит перенос (заем) в(из) старшего, знакового бита результата (биты 7, 15 или 31 для 8, 16 или 32-разрядных операндов соответственно);
0 — в результате операции не происходит переноса (заема) в(из) старшего, знакового бита результата
ioplУровень Привилегий ввода-вывода
(Input/Output Privilege Level)
12, 13 Используется в защищенном режиме работы микропроцессора для контроля доступа к командам ввода-вывода в зависимости от привилегированности задачи
ntфлажок вложенности задачи
(Nested Task)
14 Используется в защищенном режиме работы микропроцессора для фиксации того факта, что одна задача вложена в другую



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