Регистр флагов

Лекция 12

Состояние регистра флагов влияет на выполнение команд микропроцессором. Сейчас мы рассмотрим структуру регистра флагов. Регистр флагов состоит из 16 бит.

 


Рис. 1. Регистр, флагов микропроцессоров 8086/8088.

 

Из 16 бит семь зарезервированы, остальные выполняют различные функции, которые мы сейчас разберем.

CF - флаг переноса. Равен 1, если произошел перенос при сложении или заем при вычитании, в противном случае он равен нулю. При выполнении операции сдвига CF содержит бит, который вышел за границу ячейки или регистра. CF также служит индикатором результата умножения.

PF - флаг четности. Равен 1, если в результате операции получилось число с четным числом единиц, и 0 - в противном случае.

AF - вспомогательный флаг переноса. Аналогичен флагу CF, но контролирует заем или перенос третьего бита.

ZF - флаг нуля. Равен 1, если в результате операции получен нуль, и 0 - в противоположном случае.

SF - флаг знака. Дублирует значение старшего бита результата операции. Используется при работе с числами со знаком.

TF - флаг трассировки. Если этот бит равен 1, то после выполнения каждой операции микропроцессор обращается к специальной процедуре (прерыванию). Используется при отладке программы.

IF - флаг прерывания. Если данный флаг сброшен в 0, то микропроцессор не реагирует ни на какие внешние сигналы (сигналы прерывания). Исключение составляет немаскируемое прерывание (NMI). По линии NMI микропроцессор получает сообщения о таких критических ситуациях, как отключение питания и ошибка памяти.

DF - флаг направления. Используется строковыми (цепочечными) командами. Если он сброшен, цепочка обрабатывается с первого элемента, имеющего наименьший адрес. В противном случае цепочка обрабатывается от наибольшего адреса к наименьшему.

OF - флаг переполнения. Флаг равен 1, если результат сложения двух чисел с одинаковым знаком или результат вычитания двух чисел с противоположными знаками выйдет за пределы допустимого диапазона. Флаг обращается в 1, если старший бит операнда изменился в результате операции арифметического сдвига. OF=0, если частное от деления двух чисел переполняет результирующий регистр.

Выполнив команды PUSHF и POP AX, вы сможете проверить любой из вышеперечисленных флагов, даже если он никак не воздействует на команды условных переходов. Аналогично (PUSH AX/POPF) можно изменить любой флаг по своему усмотрению. Кстати, раз мы здесь говорим о регистре флагов, следует упомянуть один подход, который позволяет различать микропроцессоры Intel. Одна модификация микропроцессора может отличаться от предыдущей версии тем, что в ней появляется новый флаг. Это значит, что мы можем его изменить, а следовательно, отличить один микропроцессор от другого.