Команды управления сопроцессором

FINIT Инициализация сопроцессора.
FSTSW AX Запись слова состояния в AX.
FSTSW dest Запись слова состояния в dest.
FLDCW src Загрузка управляющего слова (16 бит) из dest.
FSTCW dest Сохранение управляющего слова в dest.
FCLEX Сброс исключений.
FSTENV dest Сохранение состояния оборудования (SR, CR, TAGW, FIP, FDP) в памяти.
FLDENV src Загрузка состояния оборудования из памяти.
FSAVE dest Сохранение состояния оборудования и файла регистров в памяти.
FRSTOR src Загрузка состояния оборудования и файла регистров в памяти.
FINCSTP Инкремент указателя стека.
FDECSTP Декремент указателя стека.
FFREE ST(i) Освобождение регистра – пометка ST(i) как свободного.
FNOP Холостая операция сопроцессора.
WAIT (FWAIT) Ожидание процессором завершение текущей операции сопроцессором.

Расширение MMX.Расширение MMX ориентировано в основном на использование в мультимедийных приложениях. Основная идея MMX заключается в одновременной обработке нескольких элементов данных за одну инструкцию. Расширение MMX появилось в процессорах модификации Pentium P54C и присутствует во всех последних модификациях этого процессора.

Расширение MMX использует новые типы упакованных данных: упакованные байты (восемь байт), упакованные слова (четыре слова), упакованные двойные слова (два двойных слова), учетверенное слово. Расширение MMX включает восемь регистров общего пользования (MM0-MM7). Размер регистров составляет 64 бита. Физически эти регистры пользуются младшими битами рабочих регистров сопроцессора. Команды MMX «портят» регистр состояния и регистр тэгов. По этой причине совместное использование команд MMX и команд сопроцессора может вызвать определенные трудности. Другими словами, перед каждым использованием команд MMX Вам придется сохранять контекст сопроцессора, а это может весьма замедлить работу программы. Важно отметить также, что команды MMX работают непосредственно с регистрами сопроцессора, а не с указателями на элементы стека.

 

Команды MMX расширения(по книге [3])

EMMS Очистка стека регистров. Установка всех единиц в слове тегов.
MOVD mm,m32/ir32 Пересылка данных в младшие 32 бита регистра MMX с заполнением старших бит нулями.
MOVD m32/ir32,mm Пересылка данных из младших 32 бит регистра MMX.
MOVQ mm,mm/m64 Пересылка данных в регистр MMX.
MOVQ mm/m64,mm Пересылка данных из регистра MMX.
PACKSSDW mm,mm/m64 Упаковка со знаковым насыщением двух двойных слов, расположенных в mm, и двух двойных слов mm/m64 в четыре слова, расположенных в mm.
PACKSSWB mm,mm/m64 Упаковка со знаковым насыщением четырех слов, расположенных в mm, и четырех слов mm/m64 в восемь байт, расположенных в mm.
PACKUSWB mm,mm/m64 Упаковка с насыщением четырех знаковых слов, расположенных в mm, и четырех слов mm/m64 в восемь беззнаковых байт, расположенных в mm.
PADDB mm,mm/m64 PADDW mm,mm/m64 PADDD mm,mm/m64   Сложение упакованных байт (слов или двойных слов) без насыщения (с циклическим переполнением).
PADDSB mm,mm/m64 PADDSW mm,mm/m64   Сложение упакованных байт (слов) со знаковым насыщением.
PADDUSB mm,mm/m64 PADDUSW mm,mm/m64 Сложение упакованных байт (слов) с беззнаковым насыщением.
PAND mm,mm/m64 Логическое «И».
PANDN mm,mm/m64 Логическое «И-НЕ».
PCMPEQB mm,mm/m64 PCMPEQD mm,mm/m64 PCMPEQW mm,mm/m64 Сравнение (на равенство) упакованных байт (слов, двойных слов). Все биты элемента результата будут единичными (true) при совпадении соответствующих элементов операндов и нулевыми (false)- при несовпадении.
PCMPGTB mm,mm/m64 PCMPGTD mm,mm/m64 PCMPGTW mm,mm/m64 Сравнение (по величине) упакованных знаковых байт (слов, двойных слов). Все биты элемента результата будут единичными (true), если соответствующий элемент операнда назначения больше элемента операнда источника, и нулевыми (false) в противном случае.
PMADDWD mm,mm/m64 Умножение четырех знаковых слов операнда источника на четыре знаковых слова операнда назначения. Два двойных слова результатов умножения младших слов суммируются и записываются в младшее двойное слово операнда назначения. Два двойных слова результатов умножения старших слов суммируются и записываются в старшее двойное слово операнда назначения.
PMULHW mm,mm/m64 Умножение упакованных знаковых слов с сохранением только старших 16 бит элементов результата.
PMULLW mm,mm/m64 Умножение упакованных знаковых или беззнаковых слов с сохранением только младших 16 бит результата.
POR mm,mm/m64 Логическое «ИЛИ».
PSHIMD mm,imm PSHIMQ mm,imm PSHIMW mm,imm PSHIMD представляет инструкции PSLLD, PSRAD и PSRLD с непосредственным операндом–счетчиком. PSHIMW представляет инструкции PSLLW,PSRAW, PSRLW. PSHIMQ представляет инструкции PSLLQ и PSRLQ с непосредственным операндом-счетчиком.
PSLLD mm,mm/m64 PSLLQ mm,mm/m64 PSLLW mm,mm/m64 Логический сдвиг влево упакованных слов (двойных, учетверенных) операнда назначения на количество бит, указанных в операнде–источнике, с заполнением младших бит нулями.
PSRAD mm,mm/m64 PSRAW mm,mm/m64 Арифметический сдвиг вправо упакованных двойных (учетверенных) знаковых слов операнда назначения на количество бит, указанных в операнде-источнике, с заполнением младших бит битами знаковых разрядов.
PSRLD mm,mm/m64 PSRLQ mm,mm/m64 PSRLW mm,mm/m64 Логический сдвиг вправо упакованных слов (двойных, учетверенных) операнда назначения на количество бит, указанных в операнде–источнике, с заполнением старших бит нулями.
PSUBB mm,mm/m64 PSUBW mm,mm/m64 PSUBD mm,mm/m64 Вычитание упакованных байт (слов или двойных слов) без насыщения (с циклическим антипереполнением).
PSUBSB mm,mm/m64 PSUBSW mm,mm/m64 Вычитание упакованных знаковых байт (слов) с насыщением.
PSUBUSB mm,mm/m64 PSUBUSW mm,mm/m64 Вычитание упакованных беззнаковых байт (слов) с насыщением.
PUNPCKHBW mm,mm/m64 Чередование в регистре назначения байт старшей половины операнда-источника с байтами старшей половины операнда назначения.
PUNPCKHWD mm,mm/m64 Чередование в регистре назначения слов старшей половины операнда-источника со словами старшей половины операнда назначения.
PUNPCKHDQ mm,mm/m64 Чередование в регистре назначения двойного слова старшей половины операнда–источника с двойным словом старшей половины операнда назначения.
PUNPCKLBW mm,mm/m64 Чередование в регистре назначения байт младшей половины операнда–источника с байтами младшей половины операнда назначения.
PUNPCKLWD mm,mm/m64 Чередование в регистре назначения слов младшей половины операнда–источника со словами младшей половины операнда назначения.
PUNPCKLDQ mm,mm/m64 Чередование в регистре назначения двойного слова младшей половины операнда–источника с двойным словом младшей половины операнда назначения.
PXOR mm,mm/m64 Исключающее «ИЛИ».