- •3.3. Организация памяти
- •3.3.1 Модели памяти ia-32
- •3.3.2 Пейджинг и виртуальная память
- •3.3.3 Организация памяти в 64-битном режиме
- •3.3.4. Режимы работы против модели памяти
- •3.3.6 Расширенная физическая адресация в защищенном режиме
- •3.3.7 Расчет адресов в 64-битном режиме
- •3.3.7.1 Каноническая адресация
- •3.4 Основные регистры выполнения программы
- •3.4.1 Регистры общего назначения
- •3.4.1.1 Регистры общего назначения в 64-битном режиме
- •3.4.2 Регистры сегментов
- •3.4.2.1 Регистры сегментов в 64-битном режиме
- •3.4.3.1 Флаги состояния
- •3.4.3.2 Флаг df
- •3.4.3.3 Системные флаги и поле iopl
- •3.7.2 Операнды регистров
- •3.7.5. Определение смещения
- •3.7.5.1 Определение смещения в 64-битном режиме
- •3.7.6 Режимы адресации ассемблера и компилятора
- •3.7.7 Адресация портов ввода / вывода
3.4.2.1 Регистры сегментов в 64-битном режиме
3.4.3.1 Флаги состояния
Флаги состояния (бит 0, 2, 4, 6, 7 и 11) регистра EFLAGS указывают результаты арифметических команд, таких как инструкции ADD, SUB, MUL и DIV. Функции флага статуса:
CF (бит 0) Флаг переноса - установить, если арифметическая операция генерирует перенос или заимствование из самого важного бита результата; очищается в противном случае. Этот флаг указывает условие переполнения для арифметики без знака. Он также используется в арифметике с несколькими точками.
PF (бит 2) Флаг четности - задайте, если младший байт результата содержит четное число из 1 бита; очищается в противном случае.
AF (бит 4) Флаг вспомогательной несущей - устанавливается, если арифметическая операция генерирует перенос или заимствование из бит 3 результата; очищается в противном случае. Этот флаг используется в двоично-кодированной десятичной (BCD) арифметике.
ZF (бит 6) Флаг нуля - установить, если результат равен нулю; очищается в противном случае.
SF (бит 7) Флаг знака - устанавливается равным самому значащему биту результата, который является битом знака целого числа со знаком. (0 указывает положительное значение, а 1 указывает отрицательное значение.)
OF (бит 11) Флаг переполнения - задайте, если целочисленный результат является слишком большим положительным числом или слишком маленьким отрицательным числом (исключая знаковый бит) для размещения в операнде назначения; очищается в противном случае. Этот флаг указывает условие переполнения для арифметики с подписью-целым числом (два дополнения).
Из этих флагов статуса только флаг CF может быть изменен напрямую, используя инструкции STC, CLC и CMC. Также битовые инструкции (BT, BTS, BTR и BTC) копируют указанный бит в флаг CF.
Флаги состояния позволяют одной арифметической операции создавать результаты для трех разных типов данных: целые числа без знака, целые числа со знаком и целые числа BCD. Если результат арифметической операции рассматривается как целое без знака, флаг CF указывает условие вне диапазона (перенос или заимствование); если обрабатывается как целое число со знаком (номер дополнения 2), флаг OF указывает перенос или заимствование; и если он рассматривается как цифра BCD, флаг AF указывает на перенос или заимствование. Флаг SF указывает знак целого числа со знаком. Флаг ZF указывает либо ноль с подписью или без знака.
При выполнении арифметики с высокой точностью для целых чисел флаг CF используется совместно с инструкцией add with carry (ADC) и вычитанием с помощью заимствования (SBB) для распространения переноса или заимствования из одного вычисления в другое.
Инструкции по условию Jcc (переход на код условия cc), SETcc (байт, установленный в коде условия cc), LOOPcc и CMOVcc (условное перемещение) используют один или несколько флажков состояния в качестве кодов условий и проверяют их для ветви, setbyte или условия конечного цикла.
3.4.3.2 Флаг df
Флаг направления (DF, расположенный в бите 10 регистра EFLAGS) управляет строковыми инструкциями (MOVS, CMPS, SCAS, LODS и STOS). Установка флага DF приводит к автоматическому декременту строковых инструкций (для обработки строк с высоких адресов на низкие адреса). Очистка флага DF приводит к тому, что строковые инструкции автоматически увеличиваются (строки процесса от низких адресов до высоких адресов).
Инструкции STD и CLD устанавливают и очищают флаг DF, соответственно.
