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

Еще один важный регистр, использующийся при выполнении большинства ко­манд, - регистр флагов. Как и раньше, его младшие 16 бит, представлявшие собой

весь этот регистр до процессора 80386, называются FLAGS. В EFLAGS каждый

бит является флагом, то есть устанавливается в 1 при определенных условиях или установка его в 1 изменяет поведение процессора. Все флаги, расположенные в старшем слове регистра, имеют отношение к управлению защищенным режи­мом, поэтому здесь рассмотрен только регистр FLAGS (см. рис. 5):

□ CF - флаг переноса. Устанавливается в 1, если результат предыдущей опера­ции не уместился в приемнике и произошел перенос из старшего бита или

0

NT

IOPL

OF

DF

IF

TF

SF

ZF

0

AF

0

PF

1

CF

15 О

Рис. 5. Регистр флагов FLAGSесли требуется заем (при вычитании), в противном случае - в 0. Например, после сложения слова ОРРРБЬ и 1, если регистр, в который надо поместить результат, - слово, в него будет записано ООООЬ и флаг СБ = 1. аРБ - флаг четности. Устанавливается в 1, если младший байт результата предыдущей команды содержит четное число битов, равных 1, и в 0, если нечетное. Это не то же самое, что делимость на два. Число делится на два без остатка, если его самый младший бит равен нулю, и не делится, когда он равен 1.

□ АБ - флаг полупереноса или вспомогательного переноса. Устанавливается в 1, если в результате предыдущей операции произошел перенос (или заем) из третьего бита в четвертый. Этот флаг используется автоматически коман­дами двоично-десятичной коррекции.

С: Ъ¥ - флаг нуля. Устанавливается в 1, если результат предыдущей команды -ноль.

□ - флаг знака. Он всегда равен старшему биту результата.

С; ТБ - флаг ловушки. Он был предусмотрен для работы отладчиков, не ис­пользующих защищенный режим. Установка его в 1 приводит к тому, что после выполнения каждой программной команды управление временно пере­дается отладчику (вызывается прерывание 1 - см. описание команды ЮТ).

□ ІБ - флаг прерываний. Сброс этого флага в 0 приводит к тому, что процессор перестает обрабатывать прерывания от внешних устройств (см. описание ко­манды ЮТ). Обычно его сбрасывают на короткое время для выполнения критических участков кода.

— флаг направления. Он контролирует поведение команд обработки строк: когда он установлен в 1, строки обрабатываются в сторону уменьше­ния адресов, когда      = 0 - наоборот.

□ ОБ - флаг переполнения. Он устанавливается в 1, если результат предыду­щей арифметической операции над числами со знаком выходит за допусти­мые для них пределы. Например, если при сложении двух положительных чисел получается число со старшим битом, равным единице, то есть отрица­тельное, и наоборот.

Флаги ІОРЬ (уровень привилегий ввода-вывода) и ЇЧТ (вложенная задача) применяются в защищенном режиме.