INSB, INSD, INSW Запись байта, слова или двойного слова, введенного из порта, в память(286+)
LODSB, LODSD, LODSW Копирование байта, слова или двойного слова из строки в AL/(E)AX
MOVSB, MOVSD, MOVSW Копирование байта, слова или двойного слова из одной строки в другую
OUTSB, OUTSD, OUTSW Вывод байта, считанного из памяти, в порт (286+)
SCASB, SCASD, SCASW Сканирование строки байт, слов или двойных слов — сравнение с AL/(E)AX и запись результата сравнения в регистр флагов
STOSB, STOSD, STOSW Запись байта, слова или двойного слова в строку из AL/(E)AX
REP Префикс повтора строковых операций до обнуления (Е)СХ, (Е)СХ декрементируется на каждом повторе
REPE/REPZ Префикс условного повтора строковых операций — выполнения REP при ZF=1
REPNE/ Префикс условного повтора строковых операций — выполнения
REPNZ REP при ZF=0
Инструкции математического сопроцессора (FPU) имеют свою специфику задания операндов. Переменная st(0) находится на вершине стека сопроцессора, st(i) смещена от вершины на i. Загрузка данных начинается с декремента указателя стека сопроцессора (поле TOP) — перемещения вершины. Если новая вершина не пустая (по полю TAG) или стек исчерпан, вызывается исключение с указанием причины.
После загрузки поле TAG устанавливается в соответствии с загруженным числом. При извлечении из стека производится инкремент ТОР, а в поле TAG старой вершины устанавливается признак пустой ячейки. Попытка использования пустого регистра в операциях или для сохранения результатов в памяти вызывает исключение. Инструкции с префиксом F предварительно проверяют флаг исключения ES (они называются ожидающими инструкциями), инструкции с префиксом FN флаг исключения не проверяют (неожидающие инструкции). Ряд инструкций не вызывает исключения в случае, если обнаруживаются операнды не-числа (NaN).
Таблица. Инструкции FPU
Инструкция Описание
Пересылки данных
FBLD Преобразование и помещение (push) числа в упакованном BCD-формате из памяти в стек
FBSTP Извлечение из стека и запись в память в упакованном BCD-формате (10 байт, 18 цифр)
FCMOVB Пересылка, если ниже (CF=1) (P6+)
FCMOVBE Пересылка, если не выше (CF ИЛИ ZF)=1 (P6+)
FCMOVE Пересылка, если равно (ZF=1) (P6+)
FCMOVNB Пересылка, если не ниже (CF=0) (P6+)
FCMOVNBE Пересылка, если выше ((CF ИЛИ ZF)=0) (P6+)
FCMOVNE Пересылка, если не равно (ZF=0) (P6+)
FCMOVNU Пересылка, если не NaN (PF=0) (P6+)
FCMOVU Пересылка, если NaN (unordered) (PF=0) (P6+)
FILD Загрузка (push) целого числа из памяти
FIST Запись в память в формате целого числа
FISTP Запись в память в формате целого числа с извлечением
FLD Загрузка (push) вещественного числа
FST Сохранение (копирование) числа в памяти (в вещественном формате) или в регистре стека
FSTP Запись числа в память (в вещественном формате) или в регистр стека с извлечением
FXCH Обмен значениями вершины стека и регистра
Загрузка констант
FLD1 Загрузка (push)+1,0
FLDL2E Загрузка (push) log2(e)
FLDL2T Загрузка (push) log2( 10)
FLDLG2 Загрузка (push) lg(2)
FLDLN2 Загрузка (push) ln(2)
FLDPI Загрузка (push) pi
FLDZ Загрузка (push) + 0,0
Базовая арифметика
FABS Нахождение абсолютного значения
FADD Сложение вещественных чисел
FADDP Сложение вещественных чисел с извлечением
FCHS Изменение знака
FDIV Деление вещественных чисел
FDIVP Деление вещественных чисел с извлечением
FDIVR Обратное деление вещественных чисел
FDIVRP Обратное деление вещественных чисел с извлечением
FIADD Сложение с целым числом
FIDIV Деление на целое число
FIDIVR Обратное деление целых чисел
FIMUL Умножение на целое число
FISUB Вычитание целого числа
FISUBR Вычитание из целого числа
FMUL Умножение вещественных чисел
FMULP Умножение вещественных чисел с извлечением
FPREM Нахождение частичного остатка
FPREM1 Нахождение частичного остатка в стандарте IEEE (387+)
FRNDINT Округление до ближайшего целого
FSCALE Масштабирование — умножение на округленную в сторону нуля степень числа 2
FSQRT Извлечение квадратного корня
FSUB Вычитание вещественного числа
FSUBP Вычитание вещественных чисел с извлечением
FSUBR Обратное вычитание числа
FSUBRP Обратное вычитание с извлечением
FXTRACT Выделение мантиссы и порядка числа
Сравнение данных
FCOM Сравнение вещественных чисел (установка флагов сопроцессора)
FCOMI Сравнение и соответствующая установка флагов в EFLAGS (ZF, PF, CF) (P6+)
FCOMIP Сравнение и соответствующая установка флагов в EFLAGS (ZF, PF, CF), с извлечением (P6+)
FCOMP Сравнение вещественных чисел с извлечением
FCOMPP Сравнение вещественных чисел с двойным извлечением
FICOM Сравнение с целочисленным операндом из памяти
FICOMP Сравнение с целочисленным операндом из памяти с извлечением
FTST Проверка на нуль
FUCOM Сравнение без генерации исключения в случае NaN (387+)
FUCOMI Сравнение без генерации исключения в случае NaN и соответствующая установка флагов в EFLAGS (ZF, PF, CF) (P6+)
FUCOMIP Сравнение без генерации исключения в случае NaN и соответствующая установка флагов в EFLAGS (ZF, PF, CF) с извлечением (P6+)
FUCOMP Сравнение без генерации исключения в случае NaN с извлечением (387+)
FUCOMPP Сравнение без генерации исключения в случае NaN с двойным извлечением (387+)
FXAM Анализ числа — установка кода условия в СО, С2, СЗ
Трансцендентные функции
Р2ХМ1 Вычисление
FCOS Косинус (387+)
PPATAN Арктангенс частного с извлечением
FPTAN Вычисление тангенса и загрузка (push) в стек +1,0
FSIN Вычисление синуса (387+)
FSINCOS Вычисление синуса и косинуса с помещением (push) в стек (387+)
FYL2X Вычисление Yxlog2(X)
FYL2XP1 Вычисление Yxlog2(X+1)
Управление сопроцессором
FCLEX Сброс флагов исключений с предварительной проверкой
ожидающих немаскированных исключений
FDECSTP Декремент указателя стека FPU
FFREE Освобождение регистра — пометка как свободного
FINCSTP Инкремент указателя стека FPU
FINIT Инициализация FPU с предварительной проверкой ожидающих исключений
FLDCW Загрузка управляющего слова (FPU CW) из памяти
FLDENV Загрузка состояния сопроцессора из памяти, сохраненного инструкциями FSTENV/FNSTENV
FNCLEX Сброс флагов исключений без проверки ожидающих
FNINIT Инициализация FPU без проверки ожидающих исключений
FNOP Пустая операция FPU
FNSAVE Сохранение состояния сопроцессора и стека регистров в памяти без проверки ожидающих исключений
FNSTCW Сохранение управляющего слова без проверки ожидающих исключений
FNSTENV Сохранение состояния сопроцессора (SR, CR, TAGW, FIP и FDP) в памяти без проверки ожидающих исключений
FNSTSW Запись слова состояния без проверки ожидающих исключений
FRSTOR Загрузка состояния сопроцессора и регистров из памяти
FSAVE Сохранение состояния сопроцессора и стека регистров в памяти с предварительной проверкой ожидающих исключений
FSTCW Сохранение управляющего слова с предварительной проверкой ожидающих исключений
FSTENV Сохранение состояния сопроцессора (SR, CR, TAGW, FIP и FDP) в памяти с предварительной проверкой ожидающих исключений
FSTSW Запись слова состояния для последующего переноса кода завершения в регистр флагов с предварительной проверкой ожидающих исключений
WAIT/FWAIT Синхронизация — останов CPU до завершения текущей операции FPU, проверка ожидающих исключений FPU
Инструкции ММХ появились в процессорах Pentium ММХ и с тех пор поддерживаются всеми более современными процессорами (Pentium Pro, появившийся раньше, эти инструкции не поддерживает). Они имеют сложную мнемонику, которая включает следующие элементы:
• префикс Р (Packed), указывающий на обработку упакованных форматов;
• мнемонику операции (например, ADD, CMP или XOR);
• суффикс, идентифицирующий тип насыщения: US (Unsigned Saturation) — насыщение беззнаковое, S (Signed saturation) — насыщение знаковое;
• суффикс, идентифицирующий тип данных: В — упакованные байты, W — упакованные слова, D — упакованные двойные слова, Q -учетверенное слово.
Инструкции, у которых типы входных и выходных данных различаются (например, преобразования), имеют два суффикса.
Для инструкций пересылки данных операнды источника и назначения могут находиться в памяти (m32 или m64), целочисленных регистрах (ir32) или регистрах ММХ (mm). Для остальных инструкций, кроме вышеперечисленных, операнд-источник может быть и непосредственным, а операнд назначения всегда является регистром ММХ. Для операндов, находящихся в памяти, применимы все существующие режимы адресации.
Таблица. Инструкции ММХ
Инструкция Описание
EMMS Очистка стека регистров — установка всех единиц в слове тегов
Пересылка данных
MOVD Пересылка данных в младшие 32 бита регистра ММХ (с заполнением старших бит нулями) или из младших 32 бит регистра ММХ
MOVQ Пересылка данных (64 бит) из/в регистр ММХ
Преобразование форматов
PACKSSDW Упаковка со знаковым насыщением четырех двойных слов в четыре
слова
PACKSSWB Упаковка со знаковым насыщением восьми слов в восемь байт
PACKUSWB Упаковка с насыщением восьми знаковых слов в восемь беззнаковых байт
PUNPCKHBW Чередование в регистре назначения байт старшей половины операнда-источника с байтами старшей половины операнда назначения
PUNPCKHWD Чередование в регистре назначения слов старшей половины операнда-источника со словами старшей половины операнда назначения
PUNPCKHDQ Чередование в регистре назначения двойного слова старшей половины операнда-источника с двойным словом старшей половины операнда назначения
PUNPCKLBW Чередование в регистре назначения байт младшей половины операнда-источника с байтами младшей половины операнда назначения
PUNPCKLWD Чередование в регистре назначения слов младшей половины операнда-источника со словами младшей половины операнда назначения
PUNPCKLDQ Чередование в регистре назначения двойного слова младшей половины операнда-источника с двойным словом младшей половины операнда назначения
Упакованная арифметика
PADDB Сложение упакованных байт (слов или двойных слов) без насыщения
PADDW (с циклическим переполнением)
PADDD
PADDSB Сложение знаковых упакованных байт (слов) с насыщением
PADDSW
PADDUSB Сложение упакованных беззнаковых байт (слов) с насыщением PADDUSW