Смекни!
smekni.com

Форматы данных и команды их обработки процессоров Pentium III, Pentium IV (стр. 5 из 18)

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