Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
I8086.DOC
Скачиваний:
64
Добавлен:
02.05.2014
Размер:
1.36 Mб
Скачать
      1. Регистр флагов

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

┌───┬───┬───┬───┬────┬────┬────┬────╥────┬────┬───┬────┬───┬────┬───┬────┐

│ 1 │ 1 │ 1 │ 1 │ OF │ DF │ IF │ TF ║ SF │ ZF │ 0 │ AF │ 0 │ PF │ 1 │ CF │

└───┴───┴───┴───┴────┴────┴────┴────╨────┴────┴───┴────┴───┴────┴───┴────┘

15 0

Разряды 15-12, 5, 3 и 1 не используются. При записи они должны содержать значения, показанные на приведённом выше рисунке. В последующих микропроцессорах (80286, 80386 и т.д.) часть этих разрядов была задействована для выполнения новых функций.

OF(разряд 11) – флаг переполнения. Он устанавливается в арифметических операциях, свидетельствуя о возникновении переполнения при обработке чисел со знаком.

DF(разряд 10) – флаг направления. Нулевое значение этого флага соответствует обработке строковых операндов в порядке возрастания их адресов, единичное – в порядке убывания.

IF(разряд 9) – флаг разрешения прерывания. Нулевое значение этого флага запрещает обработку маскируемых прерываний, единичное – разрешает.

TF(разряд 8) – флаг трассировки. Когда он установлен, после выполнения каждой инструкции микропроцессора происходит прерывание, используемое обычно в отладочных целях. Когда этот флаг сброшен, прерывание по окончании инструкции не возникает.

SF(разряд 7) – флаг знака. Изменяется большинством арифметико-логических команд. Нулевое значение показывает, что в операции над числами со знаком было получено неотрицательное число, единичное значение – что результатом является отрицательное число. Таким образом, этот флаг повторяет значение старшего (знакового) разряда результата.

ZF(разряд 6) – флаг нуля. Изменяется большинством арифметико-логических команд. Этот флаг сбрасывается в нуль, если результат операции отличен от нуля, и устанавливается, если результат равен нулю.

AF(разряд 4) – флаг вспомогательного переноса. Устанавливается в командах сложения и вычитания при возникновении переноса из третьего или заёма в третий разряд соответственно. Этот флаг используется командами десятичной коррекцииDAAиDAS.

PF(разряд 2) – флаг чётности. Устанавливается, если младший байт результата операции содержит чётное число единичных разрядов, сбрасывается в противном случае.

CF(разряд 0) – флаг переноса. Устанавливается при возникновении переноса или заёма из/в старший разряд результата при выполнении команд сложения и вычитания, а также содержит значение выдвигаемого разряда в операциях сдвига.

При описании каждой инструкции будет указано, какие разряды регистра Flagsмогут быть изменены при её выполнении и в каких случаях это происходит.

Содержимое регистра флагов целиком доступно только для инструкций PUSHFиPOPF, которые соответственно сохраняют его значение в стеке или извлекают из стека. Младший байт регистраFlagsможет быть загружен в регистрAHинструкциейLAHF, содержимое регистраAHможет быть переслано в младший байт регистраFlagsпосредством инструкцииSAHF. Кроме того, при возникновении прерывания состояние регистраFlagsсохраняется в стеке. ИнструкцияIRET, обеспечивающая возврат из прерывания, подобно инструкцииPOPFвосстанавливает содержимое регистра флагов из стека.

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

Для арифметико-логических команд содержимое регистра Flagsнапрямую недоступно.