Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LK_MashZavYP_Akchurin_2011.pdf
Скачиваний:
191
Добавлен:
10.06.2015
Размер:
8.79 Mб
Скачать

3.4.2. Регистры флагов EFLAGS

eflags/flags (flags register) — регистр флагов. Разрядность eflags/flags — 32/16

бит. Отдельные биты данного регистра имеют определенное функциональное назначение и называются флагами. Младшая часть этого регистра полностью аналогична регистру flags для i8086. Содержимое регистра eflags.

Каждый бит этого регистра отвечает либо за особенности выполнения некоторых команд ЦП, либо отражает результат выполнения команд блоком АЛУ процессора. Для анализа битов этого регистра предусмотрены специальные команды процессора.

Управляющие флаги. Состояние битов регистра EFLAGS, соответствующих управляющим флагам, программист может изменить с помощью специаль-

116

ных команд процессора. Эти флаги управляют процессом выполнения некоторых команд ЦП. В качестве примера можно привести флаги управления направлением пересьшки данных (Direction) и прерыванием (Interrupt).

Флаги состояния. Эти флаги отражают результат выполнения арифметической или логической команды ЦП. Их название, описание и сокращенное обозначение приведены ниже^

Флаг переноса (Carryflag, или CF) устанавливается в случае, если при выполнении беззнаковой арифметической операции получается число, разрядность которого превышает разрядность выделенногодля него поля результата.

Флаг переполнения {Overflow flag, или OF) устанавливается в случае, если при выполнении арифметической операции со знаком получается число, разрядность которого превышает разрядность выделенногодля него поля результата.

Флаг знака (Sign f!ag, или SF) устанавливается, если при выполнении арифметической или логической операции получается отрицательное число (т.е. старший бит результата равен 1).

Флаг нуля {Zero f!ag, или ZF) устанавливается, если при выполнении арифметической или логической операции получается число, равное нулю (т.е. все биты peзультата равны 0).

Флаг служебного переноса {Auxiliary Carry, или AF) устанавливается, если при выполнении арифметической операции с 8-разрядным операндом происходит перенос из третьего бита в четвертый.

Флаг четности {Parity flag, или PF) устанавливается в случае, если в результате выполнения арифметической или логической операции получается число, содержащее четное количеств единичных битов.

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

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

 

 

 

 

 

 

 

 

 

 

Мнемоника

 

Флаг

 

№ в

 

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

 

 

 

 

eflags

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

117

cf

pf

af

zf

sf

of

Флаг переноса

 

0

(Carry Flag)

 

 

 

 

 

 

Флаг паритета

 

2

(Parity Flag)

 

 

 

 

 

 

Вспомогательный флаг переноса 4 (Auxiliary carry Flag)

Флаг нуля

 

6

(Zero Flag)

 

 

 

 

 

 

Флаг знака

 

7

(Sign Flag)

 

 

 

 

 

 

 

 

Флаг

 

11

1 — арифметическая операция произвела перенос из старшего бита результата. Старшим является 7, 15 или 31-й бит в зависимости от размерности операнда;

0 — переноса не было.

1 — 8 младших разрядов (этот флаг

— только для 8 младших разрядов операнда любого размера) результата содержат четное число единиц;

0 — 8 младших разрядов результата содержат нечетное число единиц.

Только для команд, работающих с BCD-

числами. Фиксирует факт заема из младшей тетрады результата:

1 — в результате операции сложения был произведен перенос из разряда 3 в старший разряд или при вычитании был заем в разряд 3 младшей тетрады из значения в старшей тетраде;

0 — переносов и заемов в(из) 3 разряд(а) младшей тетрады результата не было.

1 — результат нулевой;

0 — результат ненулевой.

Отражает состояние старшего бита ре-

зультата (биты 7, 15 или 31 для 8, 16 или 32-разрядных операндов соответственно):

1 — старший бит результата равен

1;

0 — старший бит результата равен

0.

Флаг of используется для фиксирования

118

переполнения

(Overflow Flag)

 

 

Уровень

 

 

 

 

привилегий

 

12,

iopl

 

ввода-вывода

 

 

 

13

 

 

(Input/Output Privi-

 

 

 

lege Level)

 

 

 

 

 

 

 

 

 

флажок вложен-

 

 

nt

 

ности

 

14

 

задачи

 

 

 

 

 

 

 

(Nested Task)

 

 

факта потери значащего бита при ариф-

метических операциях:

1 — в результате операции происходит перенос (заем) в(из) старшего, знакового бита результата (биты

7, 15 или 31 для 8, 16 или 32-

разрядных операндов соответственно);

0 — в результате операции не происходит переноса (заема) в(из) старшего, знакового бита результата.

Используется в защищенном режиме

работы микропроцессора для контроля доступа к командам ввода-вывода в зависимости от привилегированности задач.

Используется в защищенном режиме

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

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

5 системных флагов, управляющих вводом/выводом, маскируемыми прерываниями, отладкой, переключением между задачами и виртуальным режимом 8086. Прикладным программам не рекомендуется модифицировать без необходимости эти флаги, так как в большинстве случаев это приведет к прерыванию работы программы.

119

Мнемоника

 

Флаг

 

№ в

 

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

 

 

eflags

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Предназначен для организации пошаговой

 

 

 

 

 

 

работы микропроцессора.

 

 

Флаг

 

 

 

 

1 — микропроцессор генерирует преры-

 

 

 

 

 

 

вание с номером 1 после выполнения

tf

 

трассировки

 

8

 

 

 

 

 

 

каждой машинной команды. Может ис-

 

 

(Trace Flag)

 

 

 

 

 

 

 

 

 

 

пользоваться при отладке программ, в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

частности отладчиками;

 

 

 

 

 

 

 

0 — обычная работа

 

 

 

 

 

 

 

 

 

 

 

 

 

Предназначен для разрешения или запре-

 

 

Флаг

 

 

 

щения (маскирования) аппаратных преры-

 

 

 

 

 

ваний (прерываний по входу INTR).

 

 

прерывания

 

 

 

if

 

 

9

 

 

1 — аппаратные прерывания разреше-

 

(Interrupt ena-

 

 

 

 

 

 

ны;

 

 

ble Flag)

 

 

 

 

 

 

 

 

 

 

0 — аппаратные прерывания запреще-

 

 

 

 

 

 

 

 

 

 

 

 

 

ны

Флаг

rf возобновления 16 (Resume Flag)

Флаг

vm виртуального 17 (Virtual 8086 Mode)

 

 

Флаг

контроля

 

 

ac

 

выравнивания

 

18

 

(Alignment

 

 

 

 

 

 

 

Check)

 

 

 

 

 

 

 

 

Используется при обработке прерываний от регистров отладки.

Признак работы микропроцессора в режиме

виртуального 8086.

1 — процессор работает в режиме виртуального 8086;

0 — процессор работает в реальном или защищенном режиме

Предназначен для разрешения контроля

выравнивания при обращениях к памяти. Используется совместно с битом am в системном регистре cr0. К примеру, Pentium разрешает размещать команды и данные с любого адреса. Если требуется контролировать выравнивание данных и команд по адресам кратным 2 или 4, то установка данных битов приведет к тому, что все обращения

120

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]