Ассемблер в примерах и задачах [Наталья Юрьевна Добровольская] (pdf) читать постранично, страница - 5

-  Ассемблер в примерах и задачах  1.59 Мб, 136с. скачать: (pdf) - (pdf+fbd)  читать: (полностью) - (постранично) - Наталья Юрьевна Добровольская - Олег Васильевич Гаркуша

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

бита 3-го результата / заёма в 3-й бит результата. Этот
флаг ориентирован на использование в двоично-десятичной
(binary coded decimal, BCD) арифметике;
− Флаг нуля ZF устанавливается, если результат равен нулю;

17

Ассемблер в примерах и задачах

− Флаг знака SF равен значению старшего значащего бита
результата, который является знаковым битом в знаковой
арифметике;
− Флаг
переполнения
OF
устанавливается,
если
целочисленный результат слишком длинный для размещения в
целевом операнде (регистре или ячейке памяти). Этот флаг
показывает наличие переполнения в знаковой целочисленной
арифметике.
Из перечисленных флагов только флаг CF можно изменять
напрямую с помощью инструкций STC, CLC и CMC.
Флаги состояния позволяют одной и той же арифметической
инструкции выдавать результат трёх различных типов:
беззнаковое, знаковое и двоично-десятичное (BCD) целое число.
Если результат считать беззнаковым числом, то флаг CF
показывает условие переполнения (перенос или заём), для
знакового результата перенос или заём показывает флаг OF, а для
BCD-результата перенос / заём показывает флаг AF. Флаг SF
отражает знак знакового результата, флаг ZF – и беззнаковый, и
знаковый нулевой результат.
В длинной целочисленной арифметике флаг CF используется
совместно с инструкциями сложения с переносом (ADC) и
вычитания с заёмом (SBB) для распространения переноса или заёма
из одного вычисляемого разряда длинного числа в другой.
Инструкции условного перехода Jcc (переход по условию
cc), SETcc (установить значение байта-результата в зависимости
от условия cc), LOOPcc (организация цикла) и CMOVcc (условное
копирование) используют один или несколько флагов состояния
для проверки условия. Например, инструкция перехода JLE (jump
if less or equal – переход, если «меньше или равно»)
проверяет условие «ZF = 1 или SF ≠ OF».
Флаг PF был введён для совместимости с другими
микропроцессорными архитектурами и по прямому назначению
используется редко. Более распространено его использование
совместно с остальными флагами состояния в арифметике с
плавающей запятой: инструкции сравнения (FCOM, FCOMP и т. п.) в
математическом сопроцессоре устанавливают в нём флагиусловия C0, C1, C2 и C3, и эти флаги можно скопировать в регистр
18

Регистры процессоров семейства IA-32

флагов. Для этого рекомендуется использовать инструкцию
FSTSW AX для сохранения слова состояния сопроцессора в регистре
AX и инструкцию SAHF для последующего копирования
содержимого регистра AH в младшие 8 битов регистра флагов, при
этом C0 попадает во флаг CF, C2 – в PF, а C3 – в ZF. Флаг C2
устанавливается, например, в случае несравнимых аргументов
(NaN или неподдерживаемый формат) в инструкции сравнения
FUCOM.
Флаг направления DF (бит 10 в регистре флагов) управляет
строковыми инструкциями (MOVS, CMPS, SCAS, LODS и STOS) –
установка флага заставляет уменьшать адреса (обрабатывать
строки от старших адресов к младшим), обнуление заставляет
увеличивать адреса. Инструкции STD и CLD соответственно
устанавливают и сбрасывают флаг DF.
Системные флаги и поле IOPL управляют операционной
средой и не предназначены для использования в прикладных
программах.
− Флаг разрешения прерываний IF – обнуление этого флага
запрещает отвечать на маскируемые запросы на прерывание;
− Флаг трассировки TF – установка этого флага разрешает
пошаговый режим отладки, когда после каждой выполненной
инструкции происходит прерывание программы и вызов
специального обработчика прерывания;
− поле IOPL показывает уровень приоритета ввода-вывода
исполняемой программы или задачи: чтобы программа или задача
могла выполнять инструкции ввода-вывода или менять флаг IF, её
текущий уровень приоритета (CPL) должен быть ≤ IOPL;
− Флаг вложенности задач NT – устанавливается, когда
текущая задача «вложена» в другую, прерванную задачу, и
сегмент состояния TSS текущей задачи обеспечивает обратную
связь с TSS предыдущей задачи. Флаг NT проверяется инструкцией
IRET для определения типа возврата – межзадачного или
внутризадачного;
− Флаг возобновления RF используется для маскирования
ошибок отладки;
− VM – установка этого флага в защищённом режиме
вызывает переключение в режим виртуального 8086.
19

Ассемблер в примерах и задачах

− Флаг проверки выравнивания AC – установка этого флага
вместе с битом AM в регистре CR0 включает контроль
выравнивания операндов при обращениях к памяти: обращение к
невыровненному операнду вызывает исключительную ситуацию;
− VIF – виртуальная копия флага IF; используется совместно
с флагом VIP;
− VIP – устанавливается для указания наличия отложенного
прерывания;
− ID – возможность программно изменить этот флаг в
регистре флагов указывает на поддержку инструкции CPUID.
2.2. ФОРМАТЫ МАШИННЫХ КОМАНД IA-32
2.2.1. Формат RR «регистр – регистр»
КОП r1, r2

Команды этого формата описывают действие r1 = rl * r2
или r2 = r2 * r1, где r1 и r2 – регистры общего