Регистр указателя команд содержит адрес команды, которая должна быть выполнена следующей, точнее, адрес команды, отсчитанный от начала сегмента команд, на который указывает регистр CS (рис. 11). Абсолютный адрес команды определяется регистровой парой CS:IP. Прямого доступа к регистру IP нет, т.к. его изменение есть переход. Поэтому содержимое регистров IP и CS можно менять только командами перехода.
Рис. 11. Регистр указателя команд.
Регистр флагов. Флаг представляет собой бит, принимающий значение 1 (флаг установлен), если выполнено некоторое условие, и значение 0 (флаг сброшен) в противном случае. Всего доступно 9 флагов, причем конструктивно они собраны в один 16-разрядный регистр (регистром флагов Flags) (рис. 12).
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
|
|
|
of
|
df
|
if
|
tf
|
sf
|
zf
|
|
af
|
|
pf
|
|
cf
|
Рис. 12. Структура регистра флагов.
Все флаги делятся на две группы: флаги условий и флаги состояний. Флаги условий автоматически меняются при выполнении команд и фиксируют те или иные свойства их результата. Проверка таких флагов позволяет проанализировать результат выполнения команд. К флагам условий относятся:
CF (Carry Flag) – флаг переноса используется в арифметических операциях над беззнаковыми. При переполнении разрядной сетки флаг CF устанавливается в 1. Флаг также управляется командами CLC, STC и CMC.
OF (Overflow Flag) – флаг переполнения используется в арифметических операциях над числами со знаком. Например, если при сложении или вычитании знаковых чисел получился результат, по модулю превосходящий допустимую величину (переполнение мантиссы), тогда флаг OF устанавливается в 1.
ZF (Zero Flag) – флаг нуля устанавливается в 1, если результат команды оказался нулевым.
SF (Sign Flag) – флаг знака устанавливается в 1, если в результате выполнения операции над знаковыми числами получился отрицательный результат.
PF (Parity Flag) – флаг четности равен 1, если в 8 младших битах результата очередной команды содержится четное количество двоичных единиц. Обычно учитывается в операциях ввода-вывода.
AF (Auxiliary Carry Flag) – флаг дополнительного переноса фиксирует особенности выполнения операций над двоично-десятичными числами. Флаг равен 1, если при сложении 4 младших битов (младшей тетрады) операндов сумма превышает 15 (например, в командах сложения ADD, ADC, INC) или если тетрада первого операнда меньше тетрады второго (например, в командах вычитания SUB, SBB, DEC).
Другие флаги называются флагами состояний, и менять их должна программа. Их состояние оказывает влияние на дальнейшую работу процессора. К флагам состояний относятся:
DF (Direction Flag) – флаг направления устанавливает направление просмотра строк в строковых командах. Устанавливается командами CLD и STD. При DF=0 строки просматриваются от начала к концу, при DF=1 – в обратном направлении.
IF (Interrupt Flag) – флаг прерываний устанавливается командами CLI и STI. При IF=0 процессор не реагирует на поступающие прерывания, при IF=1 блокировка снимается.
TF (Trap Flag) – флаг трассировки. При TF=1 после выполнения каждой команды процессор делает прерывание, что удобно при отладке.
Остальные биты регистра флагов не используются и их значение всегда равно 0.
Do'stlaringiz bilan baham: |