Флаговый регистр (flags)

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

Рис. 7. 1. Флаговый регистр flags.

Рассмотрим флаги регистра flags в последовательности справа налево.

CF (Carry Flag) — флаг переноса. Содержит значение «переносов» (0 или 1) из старшего разряда при арифметических операциях и некоторых операциях сдвига и циклического сдвига.

PF (Parity Flag) — флаг четности. Проверяет младшие восемь бит результатов операций над данными. Нечетное число бит приводит к установке этого флага в 0, а четное — в 1.

AF (Auxiliary Carry Flag) — дополнительный флаг переноса. Устанавливается в 1, если арифметическая операция приводит к переносу четвертого справа бита (бит номер 3) в регистровой однобайтовой команде. Данный флаг имеет отношение к арифметическим операциям над символами кода ASCII и к десятичным упакованным полям.

ZF (Zero Flag) — флаг нуля. Устанавливается в качестве результата арифметических команд и команд сравнения. Как это ни странно, ненулевой результат приводит к установке нулевого значения этого флага, а нулевой — к установке единичного значения. Команды условного перехода JE и JZ проверяют этот флаг.

SF (Sign Flag) — знаковый флаг. Устанавливается в соответствии со знаком результата (старшего бита) после арифметических операций: положительный результат устанавливает 0, а отрицательный — 1. Команды условного перехода JG и JL проверяют этот флаг.

TF (Trap Flag) — флаг пошагового выполнения. Если этот флаг установлен в единичное состояние, то процессор переходит в режим пошагового выполнения команд или в отладочный режим.

IF (Interrupt Flag) — флаг прерывания. При нулевом состоянии этого флага прерывания запрещены, при единичном — разрешены.

DF (Direction Flag) — флаг направления. Используется в строковых операциях для определения направления передачи данных. При нулевом состоянии команда увеличивает содержимое регистров SI и DI, вызывая передачу данных слева направо, при нулевом — уменьшает содержимое этих регистров, вызывая передачу данных справа налево.

OF (Overflow Flag) — флаг переполнения. Фиксирует арифметическое переполнение, т.е. перенос вниз старшего (знакового) бита при знаковых арифметических операциях.

IOPL (Input/Output Privilege Level) — флаг уровня привилегий ввода-вы–вода. Используется в защищенном режиме работы микропроцессора для контроля доступа к командам ввода-вывода в зависимости от привилегированности задачи.

NT (Nested Task) — флаг вложенности задачи. Используется в защищенном режиме работы микропроцессора для фиксации того факта, что одна задача вложена в другую.

Два последних флага мы рассматривать не будем по той причине, что наши примеры выполняются не в защищенном режиме, а в режиме реальных адресов.

В качестве примера возьмем команду CMP, которая сравнивает два операнда и воздействует на флаги AF, CF, OF, PF, SF, ZF. Однако нет необходимости проверять все эти флаги по отдельности. В следующем примере проверяется, содержит ли регистр BX нулевое значение:

CMP BX,00 ;Сравнение BX с нулем

JZ B50 ;Переход на B50 если нуль

. (действия при не нуле)

B50: … ;Точка перехода при BX=0

Если BX содержит нулевое значение, команда CMP устанавливает флаг нуля ZF в единичное состояние, и возможно изменяет другие флаги. Команда JZ (переход, если нуль) проверяет только флаг ZF. При единичном значении ZF, обозначающее нулевой признак, команда передает управление на адрес, указанный в ее операнде, т.е. на метку B50.


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *