
- •Введение в язык Assembler
- •Программные оболочки и их состав
- •Режимы работы процессоров Intel
- •Организация памяти
- •3.1.2. Сегментирование памяти
- •3.1.3. Адресация байтов и слов
- •Регистры процессоров и их классификация
- •Регистры общего назначения (рон)
- •Сегментные регистры
- •Регистры-указатели
- •Регистр флагов
- •Способы адресации операндов
- •Регистровая адресация
- •Непосредственная адресация
- •Прямая (абсолютная) адресация (адресация по смещению)
- •Косвенная адресация
- •Адресация по базе со сдвигом
- •Косвенная адресация с масштабированием
- •Адресация по базе с индексированием
- •Адресация по базе с индексированием и масштабированием
- •Классификация команд процессора Intel
- •Основные непривилегированные команды
- •Команды пересылки данных
- •Команды двоичной арифметики
- •Десятичная арифметика
- •Логические команды Логические операции
- •Логические команды
- •Mov ax, 00110011b
- •Операции над битами и байтами
- •Команды передачи управления
- •Директивы и операторы ассемблера
- •Структура программы
- •Директивы распределения памяти Псевдокоманды определения переменных
- •3.2.2. Структуры
- •3.3. Организация программы
- •3.3.1. Сегменты
- •Модели памяти и упрощенные директивы определения сегментов
- •3.3.3. Порядок загрузки сегментов
- •3.3.4. Процедуры
- •3.3.5. Конец программы
- •3.3.6. Директивы задания набора допустимых команд
- •3.3.7. Директивы управления программным счетчиком
- •3.3.8. Глобальные объявления
- •3.4. Выражения
- •3.5. Макроопределения
- •3.5.1. Блоки повторений
- •3.5.2. Макрооператоры
- •3.5.3. Другие директивы, используемые в макроопределениях
- •3.6. Другие директивы
- •3.6.1. Управление файлами
- •3.6.2. Управление листингом
Регистр флагов
Ещё один важный регистр, использующийся при выполнении большинства команд, – регистр флагов. Как и раньше, его младшие 16 бит, представлявшие собой весь этот регистр до процессора 80386, называются FLAGS. В EFLAGS каждый бит является флагом, то есть устанавливается в 1 при определённых условиях или установка его в 1 изменяет поведение процессора. Все флаги, расположенные в старшем слове регистра, имеют отношение к управлению защищённым режимом, поэтому здесь рассмотрен только регистр FLAGS (см. рис. 3):
Рис. 3. Регистр флагов FLAGS
CF – флаг переноса. Устанавливается в 1, если результат предыдущей операции не уместился в приёмнике и произошёл перенос из старшего бита или если требуется заём (при вычитании), в противном случае – в 0. Например, после сложения слова 0FFFFh и 1, если регистр, в который надо поместить результат, – слово, в него будет записано 0000h и флаг CF = 1.
PF – флаг чётности. Устанавливается в 1, если младший байт результата предыдущей команды содержит чётное число битов, равных 1, и в 0, если нечётное. Это не то же самое, что делимость на два. Число делится на два без остатка, если его самый младший бит равен нулю, и не делится, когда он равен 1.
AF – флаг полупереноса или вспомогательного переноса. Устанавливается в 1, если в результате предыдущей операции произошёл перенос (или заём) из третьего бита в четвёртый. Этот флаг используется автоматически командами двоично-десятичной коррекции.
ZF – флаг нуля. Устанавливается в 1, если результат предыдущей команды – ноль.
SF – флаг знака. Он всегда равен старшему биту результата.
TF – флаг ловушки. Он был предусмотрен для работы отладчиков, не использующих защищённый режим. Установка его в 1 приводит к тому, что после выполнения каждой программной команды управление временно передаётся отладчику (вызывается прерывание 1).
IF – флаг прерываний. Сброс этого флага в 0 приводит к тому, что процессор перестаёт обрабатывать прерывания от внешних устройств. Обычно его сбрасывают на короткое время для выполнения критических участков кода.
DF – флаг направления. Он контролирует поведение команд обработки строк: когда он установлен в 1, строки обрабатываются в сторону уменьшения адресов, когда DF = 0 – наоборот.
OF – флаг переполнения. Он устанавливается в 1, если результат предыдущей арифметической операции над числами со знаком выходит за допустимые для них пределы. Например, если при сложении двух положительных чисел получается число со старшим битом, равным единице, то есть отрицательное, и наоборот.
Флаги IOPL (уровень привилегий ввода-вывода) и NT (вложенная задача) применяются в защищённом режиме.
Последний регистр FLAGS – это регистр состояния процессора (PSW). Из его 16 разрядов используются только девять (рис. 2): CF (Carry Flag) – флаг переноса при арифметических операциях, PF (Parity Flag) – флаг четности результата, AF (Auxiliary Flag) – флаг дополнительного переноса, ZF (Zero Flag) – флаг нулевого результата, SF (Sign Flag) – флаг знака (совпадает со старшим битом результата), TF (Trap Flag) – флаг пошагового режима (используется при отладке), IF (Interrupt-enable Flag) – флаг разрешения аппаратных прерываний, DF (Direction Flag) – флаг направления при строковых операциях, OF (Overflow Flag) – флаг переполнения.
Рис. 2. Регистр состояния процессора 8086.
Биты регистра состояния устанавливаются или очищаются в зависимости от результата исполнения предыдущей команды и используются некоторыми командами процессора. Биты регистра состояния могут также устанавливаться и очищаться специальными командами процессора (о системе команд процессора будет рассказано в следующем разделе).