Списки инструкций x86 - x86 instruction listings

редактировать
Список инструкций микропроцессора x86

Набор инструкций x86 относится к набор инструкций, которые поддерживают x86 -совместимые микропроцессоры. Инструкции обычно являются частью исполняемой программы, часто сохраняются в виде компьютерного файла и выполняются на процессоре.

Набор команд x86 был расширен несколько раз, в него были добавлены более широкие регистры и типы данных, а также новые функциональные возможности.

Содержание
  • 1 целочисленные инструкции x86
    • 1.1 Исходный 8086 / 8088 инструкции
    • 1.2 Добавлены в определенные процессоры
      • 1.2.1 Добавлены с 80186/80188
      • 1.2.2 Добавлены с 80286
      • 1.2.3 Добавлены с 80386
      • 1.2.4 Добавлены с 80486
      • 1.2.5 Добавлен с Pentium
      • 1.2.6 Добавлен с Pentium MMX
      • 1.2.7 Добавлен с AMD K6
      • 1.2.8 Добавлен с Pentium Pro
      • 1.2.9 Добавлен с Pentium II
      • 1.2.10 Добавлен с помощью SSE
      • 1.2.11 Добавлен с SSE2
      • 1.2.12 Добавлен с SSE3
      • 1.2.13 Добавлен с SSE4.2
      • 1.2.14 Добавлен с x86-64
      • 1.2.15 Добавлен с AMD-V
      • 1.2.16 Добавлен с Intel VT-x
      • 1.2.17 Добавлен с ABM
      • 1.2.18 Добавлен с BMI1
      • 1.2.19 Добавлен с BMI2
      • 1.2.20 Добавлен с помощью TBM
      • 1.2.21 Добавлен с помощью набора команд CLMUL
      • 1.2.22 Добавлен с Intel ADX
  • 2 инструкции с плавающей запятой x87
    • 2.1 Исходные инструкции 8087
    • 2.2 Добавлен в определенные процессоры
      • 2.2.1 Добавлен в 80287
      • 2.2.2 Добавлен в 80387
      • 2.2.3 Добавлен в Pentium Pro
      • 2.2.4 Добавлен в SSE
      • 2.2.5 Добавлены с SSE3
  • 3 инструкции SIMD
    • 3.1 инструкции MMX
      • 3.1.1 Исходные инструкции MMX
      • 3.1.2 инструкции MMX, добавленные в определенные процессоры
        • 3.1.2.1 инструкции EMMI
        • 3.1.2.2 Инструкции MMX добавлены с помощью MMX + и SSE
        • 3.1.2.3 Инструкции MMX добавлены с помощью SSE2
        • 3.1.2.4 Инструкции MMX добавлены с помощью SSSE3
    • 3.2 3DNow! инструкции
    • 3.3 3DNow! + инструкции
      • 3.3.1 Добавлены с Athlon и K6-2 +
      • 3.3.2 Добавлены с Geode GX
    • 3.4 Инструкции SSE
    • 3.5 Инструкции SSE2
      • 3.5. 1 SSE2 SIMD-инструкции с плавающей запятой
        • 3.5.1.1 SSE2-инструкции перемещения данных
        • 3.5.1.2 SSE2 упакованные арифметические инструкции
        • 3.5.1.3 SSE2 логические инструкции
        • 3.5.1.4 SSE2-инструкции сравнения
        • 3.5. 1.5 Команды тасования и распаковки SSE2
        • 3.5.1.6 Инструкции преобразования SSE2
      • 3.5.2 Целочисленные инструкции SSE2 SIMD
        • 3.5.2.1 SSE2 MMX-подобные инструкции, расширенные до регистров SSE
        • 3.5.2.2 Целочисленные инструкции SSE2 для SSE регистрирует только
    • 3.6 инструкции SSE3
      • 3.6.1 SSE3 SIMD инструкции с плавающей запятой
      • 3.6.2 SSE3 целочисленные инструкции SIMD
    • 3.7 инструкции SSSE3
    • 3.8 инструкции SSE4
      • 3.8.1 SSE4.1
        • 3.8.1.1 Команды SSE4.1 с плавающей запятой SIMD
        • 3.8.1.2 Целочисленные инструкции SSE4.1 SIMD
      • 3.8.2 SSE4a
      • 3.8.3 SSE4.2
    • 3.9 Полученные из SSE5 инструкции
      • 3.9.1 XO P
      • 3.9.2 F16C
      • 3.9.3 FMA3
      • 3.9.4 FMA4
    • 3.10 AVX
    • 3.11 AVX2
    • 3.12 AVX-512
      • 3.12.1 AVX-512 фундамент
  • 4 Криптографические инструкции
    • 4.1 Инструкции Intel AES
    • 4.2 RDRAND и RDSEED
    • 4.3 Инструкции Intel SHA
  • 5 Недокументированные инструкции
    • 5.1 Недокументированные инструкции x86
    • 5.2 Недокументированные инструкции x87
  • 6 См. Также
  • 7 Ссылки
  • 8 Внешние ссылки
Целочисленные инструкции x86

Это полный набор инструкций Intel 8086/8088. Большинство, если не все эти инструкции доступны в 32-битном режиме; они просто работают с 32-битными регистрами (eax, ebx и т. д.) и значениями вместо их 16-битных (ax, bxи т. д.) аналогов. См. Также язык ассемблера x86 для быстрого ознакомления с этим семейством процессоров. Обновленный набор команд также сгруппирован в соответствии с архитектурой (i386, i486, i686 ) и в более общем смысле обозначается как x86 32 и x86 64 (также известный как AMD64 ).

Исходные инструкции 8086/8088

Исходный набор инструкций 8086/8088
ИнструкцияЗначениеПримечанияКод операции
AAA ASCII настроить AL после сложенияиспользуется с распакованным двоично-десятичным кодированием 0x37
AADASCII настроить AX перед делением8086/8088 В таблице данных указана только базовая версия 10 инструкции AAD (opcode 0xD5 0x0A), но любая другая база будет работать. Более поздняя документация Intel также имеет общий вид. NEC V20 и V30 (и, возможно, другие процессоры NEC серии V) всегда используют основание 10 и игнорируют аргумент, вызывая ряд несовместимостей0xD5
AAMASCII регулируют AX после умножениеДокументирована только версия с основанием 10 (операнд 0xA), см. примечания для AAD0xD4
AASASCII Adjust AL после вычитания0x3F
ADCДобавить с переносомdestination = destination + source + carry_flag 0x10… 0x15, 0x80 / ​​2… 0x83 / 2
ADDДобавить(1) r / m + = r / imm;(2) r + = m / imm;0x00… 0x05, 0x80 / ​​0… 0x83 / 0
ИЛогическое И (1) r / m = r / imm;(2) r = m / imm;0x20… 0x25, 0x80 / ​​4… 0x83 / 4
CALLВызов процедурыpush eip; eip указывает на инструкцию сразу после вызова0x9A, 0xE8, 0xFF / 2, 0xFF / 3
CBWПреобразовать байт в слово0x98
CLCОчистить флаг переноса CF = 0;0xF8
CLDОчистить флаг направления DF = 0;0xFC
CLI Очистить флаг прерывания IF = 0;0xFA
CMCФлаг переноса дополнения0xF5
CMPСравнить операнды0x38… 0x3D, 0x80 / ​​7… 0x83 / 7
CMPSBСравнить байты в памяти0xA6
CMPSWСравнить слова0xA7
CWDПреобразовать слово в двойное слово0x99
DAA Десятичная корректировка AL после сложения(используется с упакованным двоично-десятичным кодированием )0x27
DAS Десятичная корректировка AL после вычитания0x2F
DECУменьшение на 10x48… 0x4F, 0xFE / 1, 0xFF / 1
DIVБез знака разделить(1) AX = DX: AX / r / m;полученный DX = остаток(2) AL = AX / r / m;результат AH = остаток0xF7 / 6, 0xF6 / 6
ESCИспользуется с блоком с плавающей запятой 0xD8..0xDF
HLT Вход в состояние остановки0xF4
IDIVЗнаковое деление(1) AX = DX: AX / r / m;результирующее DX = остаток(2) AL = AX / r / m ;результат AH = остаток0xF7 / 7, 0xF6 / 7
IMULзнаковое умножение(1) DX: AX = AX * r / m;(2) AX = AL * r / m0x69, 0x6B (оба с 80186), 0xF7 / 5, 0xF6 / 5, 0x0FAF (с 80386)
INВвод из порта(1) AL = порт [imm];(2) AL = порт [DX];(3) AX = порт [ imm];(4) AX = порт [DX];0xE4, 0xE5, 0xEC, 0xED
INCУвеличение на 10x40… 0x47, 0xFE / 0, 0xFF / 0
INT Вызов прерывания 0xCC, 0xCD
INTOВызов прерывания при переполнении0xCE
IRETВозврат из прерывания0xCF
JccПерейти, если условие (JA, JAE, JB, JBE, JC, JE, JG, JGE, JL, JLE, JNA, JNAE, JNB, JNBE, JNC, JNE, JNG, JNGE, JNL, JNLE, JNO, JNP, JNS, JNZ, JO, JP, JPE, JPO, JS, JZ)0x70… 0x7F, 0x0F80… 0x0F8F (начиная с 80386)
JCXZПерейти, если CX равен нулю0xE3
JMP Перейти0xE9… 0xEB, 0xFF / 4, 0xFF / 5
LAHFЗагрузить ФЛАГИ в регистр AH0x9F
LDSЗагрузить указатель с использованием DS0xC5
LEAЗагрузить эффективный адрес 0x8D
LESЗагрузить ES с указателем0xC4
LOCKПодтвердить сигнал БЛОКИРОВКИ ШИНЫ(для многопроцессорной обработки)0xF0
LODSBЗагрузить строковый байтif (DF == 0) AL = * SI ++; else AL = * SI--;0xAC
LODSWЗагрузить строковое словоif (DF == 0) AX = * SI ++; else AX = * SI--;0xAD
LOOP/LOOPxУправление циклом(LOOPE, LOOPNE, LOOPNZ, LOOPZ) if (x --CX) goto lbl;0xE0… 0xE2
MOVMoveкопирует данные из одного места в другое, (1) r / m = r;(2) r = r / m;0xA0... 0xA3
MOVSBПереместить байт из строки в строку
if (DF == 0) * (байт *) DI ++ = * (байт *) SI ++; else * (байт *) DI-- = * (байт *) SI--;
0xA4
MOVSWПереместить слово из строки в строку
if (DF == 0) * (word *) DI ++ = * (word *) SI ++; else * (слово *) DI-- = * (слово *) SI--;
0xA5
MULБеззнаковое умножение(1) DX: AX = AX * r / m;(2) AX = AL * r / m;0xF7 / 4, 0xF6 / 4
NEGОтрицание дополнения до двухr / m * = -1;0xF6 / 3… 0xF7 / 3
NOP Нет операциикод операции, эквивалентный XCHG EAX, EAX0x90
NOTОтменить операнд, логическое НЕ r / m ^ = -1;0xF6 / 2… 0xF7 / 2
ORЛогическое ИЛИ (1) r / m | = r / imm;(2) r | = m / imm;0x08… 0x0D, 0x80… 0x83 / 1
OUTВывод на порт(1) порт [imm] = AL ;(2) порт [DX] = AL;(3) порт [imm] = AX;(4) порт [DX] = AX;0xE6, 0xE7, 0xEE, 0xEF
POPИзвлечь данные из стека r / m = * SP ++;POP CS (код операции 0x0F) работает только на 8086 / 8088. Более поздние процессоры используют 0x0F в качестве префикса для новых инструкций.0x07, 0x0F (только для 8086/8088), 0x17, 0x1F, 0x58… 0x5F, 0x8F / 0
POPFPop Регистр FLAGS из стекаFLAGS = * SP ++;0x9D
PUSHПомещать данные в стек* - SP = r / m;0x06, 0x0E, 0x16, 0x1E, 0x50… 0x57, 0x68, 0x6A (оба начиная с 80186), 0xFF / 6
PUSHFПоместить ФЛАГИ в стек* - SP = FLAGS;0x9C
RCLПовернуть влево (с переносом)0xC0… 0xC1 / 2 (начиная с 80186), 0xD0… 0xD3 / 2
RCRПовернуть вправо (с переносить)0xC0… 0xC1 / 3 (начиная с 80186), 0xD0… 0xD3 / 3
REPxxПовторять MOVS / STOS / CMPS / LODS / SCAS(REP, REPE, REPNE, REPNZ, REPZ)0xF2, 0xF3
RETВозврат из процедурыНе настоящая инструкция. Ассемблер преобразует их в RETN или RETF в зависимости от модели памяти целевой системы.
RETNВозврат из ближайшей процедуры0xC2, 0xC3
RETFВозврат из дальней процедуры0xCA, 0xCB
ROLПовернуть влево0xC0… 0xC1 / 0 (начиная с 80186), 0xD0… 0xD3 / 0
RORПовернуть вправо0xC0… 0xC1 / 1 (начиная с 80186), 0xD0… 0xD3 / 1
SAHFСохранить AH в FLAGS0x9E
SALСдвиг арифметически влево (сдвиг со знаком влево)(1) r / m <<= 1;(2) r / m <<= CL;0xC0… 0xC1 / 4 (начиная с 80186), 0xD0… 0xD3 / 4
SARСдвиг арифметически вправо (сдвиг со знаком вправо)(1) (со знаком) r / m>>= 1;(2) (со знаком) r / m>>= CL;0xC0… 0xC1 / 7 (начиная с 80186), 0xD0… 0xD3 / 7
SBBВычитание с заимствованиемальтернативное 1-байтовое кодирование SBB AL, ALдоступно через недокументированную инструкцию SALC0x18… 0x1D, 0x80… 0x83 / 3
SCASBСравнить байтовую строку0xAE
SCASWСравнить строку слов0xAF
SHLСдвиг влево (сдвиг без знака влево)0xC0… 0xC1 / 4 (начиная с 80186), 0xD0… 0xD3 / 4
SHRСдвиг вправо (сдвиг вправо без знака)0xC0… 0xC1 / 5 (начиная с 80186), 0xD0… 0xD3 / 5
STCУстановить флаг переносаCF = 1 ;0xF9
STDУстановить флаг направленияDF = 1;0xFD
STI Установить флаг прерыванияIF = 1;0xFB
STOSBСохранить байт в строкеif (DF == 0) * ES: DI ++ = AL; else * ES: DI-- = AL;0xAA
STOSWСохранить слово в строкеif (DF == 0) * ES: DI ++ = AX; else * ES: DI-- = AX;0xAB
SUBВычитание(1) r / m - = r / imm;( 2) r - = m / imm;0x28… 0x2D, ​​0x80… 0x83 / 5
ТЕСТ Логическое сравнение (И)(1) r / m r / imm;(2) r m / imm;0x84, 0x84, 0xA8, 0xA9, 0xF6 / 0, 0xF7 / 0
WAITWait пока не занятОжидает, пока вывод BUSY # не станет неактивным (используется с блоком с плавающей запятой )0x9B
XCHGОбмен даннымиr: =: r / m;спин-блокировка обычно использует xchg как атомарную операцию. (ошибка комы ).0x86, 0x87, 0x91… 0x97
XLATПреобразование поиска в таблицеведет себя как MOV AL, [BX + AL]0xD7
XORИсключающее ИЛИ (1) r / m ^ = r / imm;(2) r ^ = m / imm;0x30… 0x35, 0x80… 0x83 / 6

Добавлен в определенные процессоры

Добавлен с помощью 80186 /80188
InstructionMeaningNotes
BOUNDПроверить индекс массива по границамвызывает программное прерывание 5, если t est fails
ENTEREnter stack frameИзменяет стек для входа в процедуру для языка высокого уровня. Принимает два операнда: объем памяти, выделяемой в стеке, и уровень вложенности процедуры.
INSВвод из порта в строкуэквивалентен
IN (E) AX, DX MOV ES: [(E) DI], (E) AX ; настроить (E) DI в соответствии с размером операнда и DF
LEAVEОставить кадр стекаОсвобождает локальное хранилище стека, созданное предыдущей инструкцией ENTER.
OUTSСтрока вывода на портэквивалентна
MOV (E) AX, DS: [(E) SI] OUT DX, (E) AX; отрегулируйте (E) SI в соответствии с размером операнда и DF
POPAИзвлечь все регистры общего назначения из стека, что эквивалентно
POP DI POP SI POP BP POP AX ; здесь нет POP SP, все, что он делает, - это ADD SP, 2 (поскольку AX будет перезаписан позже) POP BX POP DX POP CX POP AX
PUSHAПомещает все регистры общего назначения в стекэквивалент
PUSH AX PUSH CX PUSH DX PUSH BX PUSH SP; Сохраненное значение представляет собой начальное значение SP PUSH BP PUSH SI PUSH DI
PUSH немедленноПоместить немедленное значение байта / слова в стекэквивалентно
PUSH 12h PUSH 1200h
IMUL немедленноЗнаковое умножение непосредственного значения байта / словаэквивалентно
IMUL BX, 12h IMUL DX, 1200h IMUL CX, DX, 12h IMUL BX, SI, 1200h IMUL DI, word ptr [BX + SI], 12h IMUL SI, word ptr [BP-4], 1200h
SHL / SHR / SAL / SAR / ROL / ROR / RCL / RCR немедленноПовернуть / сдвинуть биты с непосредственным значением больше 1эквивалентно
ROL AX, 3 SHR BL, 3

Добавлено с 80286
ИнструкцияЗначениеПримечания
ARPLНастроить поле RPL селектора
CLTSОчистить флаг переключения задачи в регистре CR0
LARЗагрузить байт прав доступа
LGDTЗагрузить глобальную таблицу дескрипторов
LIDTЗагрузить таблицу дескрипторов прерываний
LLDTЗагрузить локальную таблицу дескрипторов
LMSWЗагрузить статус машины s word
LOADALL Загрузить все регистры ЦП, включая внутренние, такие как GDTНедокументированные, только 80286 и 80386
LSLПредел сегмента загрузки
LTR Загрузить регистр задачи
SGDTСохранить глобальную таблицу дескрипторов
SIDTСохранить таблицу дескрипторов прерываний
SLDTСохранить локальную таблицу дескрипторов
SMSWСохранить слово состояния аппарата
STRСохранить регистр задач
VERRПроверить сегмент для чтения
VERWПроверить сегмент для записи

Добавлен с помощью 80386
InstructionMeaningNotes
BSF Bit scan forward
BSR Bit scan обратный
BT Битовый тест
BTC Битовый тест и дополнение
BTR Битовый тест и сброс
BTS Битовый тест и установка
CDQКонвертировать двойное слово в четверное словоЗнак - расширяет EAX в EDX, образуя четверное слово EDX: EAX. Поскольку (I) DIV использует EDX: EAX в качестве входных данных, CDQ должен вызываться после установки EAX, если EDX не инициализирован вручную (как при делении 64/32) перед (I) DIV.
CMPSDСравнить двойное слово строкиСравнивает ES: [(E) DI] с DS: [(E) SI] и увеличивает или уменьшает оба (E) DI и ( Д) СИ, в зависимости от DF; может иметь префикс REP
CWDEПреобразовать слово в двойное словоВ отличие от CWD, знак CWDE расширяет AX в EAX вместо AX в DX: AX
IBTSВставить битовую строкупрекращено с шагом B1 80386
INSDВвод из порта в строку двойного слова
IRETxВозврат по прерыванию; Суффикс D означает 32-битный возврат, суффикс F означает, что код эпилога не генерируется (например, инструкция LEAVE)Используйте IRETD вместо IRET в 32-битных ситуациях
JECXZПерейти, если ECX равно нулю
LFS, LGSЗагрузить дальний указатель
LSSЗагрузить сегмент стека
LODSDЗагрузить двойное слово строкиEAX = * ES: EDI ± ±;(± ± зависит от DF, ES не может быть отменен); может иметь префикс REP
LOOPW, LOOPccWЦикл, условный циклТо же, что LOOP, LOOPcc для более ранних процессоров
LOOPD, LOOPccDЦикл при равныхif (cc --ECX) goto lbl;, cc = Z (ero), E (qual), NonZero, N (вкл.) E (qual)
MOV в / из CR / DR / TRПереход в / из специальных регистровCR = управление регистры, DR = регистры отладки, TR = тестовые регистры (до 80486)
MOVSDПеремещение двойного слова строки* (двойное слово *) ES: EDI ± ± = * (двойное слово *) ESI ± ±;(± ± зависит от DF); может иметь префикс REP
MOVSXПеремещение с расширением знака(long) r = (signed char) r / m;и аналогичные
MOVZXПеремещение с нулевым расширением(long) r = (unsigned char) r / m;и аналогичные
OUTSDВывод в порт из строкового двойного словаport [ DX] = * (long *) ESI ± ±;(± ± зависит от DF)
POPADИзвлечь все двухсловные (32-битные) регистры из стекаНе выталкивает регистр ESP из стека
POPFDВставляет данные в регистр EFLAGS
PUSHADПомещает все двухсловные (32-битные) регистры в стек
PUSHFDПоместить регистр EFLAGS в стек
SCASDСканировать двойное слово строковых данныхСравнивает ES: [(E) DI] с EAX и увеличивает или уменьшает ( E) DI, в зависимости от DF; может иметь префикс REP
SETccУстановить байт в единицу при условии, в противном случае - в ноль(SETA, SETAE, SETB, SETBE, SETC, SETE, SETG, SETGE, SETL, SETLE, SETNA, SETNAE, SETNB, SETNBE, SETNC, SETNE, SETNG, SETNGE, SETNL, SETNLE, SETNO, SETNP, SETNS, SETNZ, SETO, SETP, SETPE, SETPO, SETS, SETZ)
SHLDДвойнойсдвиг влево- word
SHRDСдвиг двойного слова вправоr1 = r1>>CL ∣ r2 <<(32-CL);Вместо CL можно использовать сразу 1
STOSDStore строковое двойное слово* ES: EDI ± ± = EAX;(± ± зависит от DF, ES не может быть заменен); может иметь префикс REP
XBTSИзвлечь битовую строкуПрекращено с шагом B1 80386

Добавлен с 80486
ИнструкцияЗначениеПримечания
BSWAPОбмен байтамиr = r <<24 | r<<80x00FF0000 | r>>8 0x0000FF00 | r>>24;Определено только для 32-битных регистров. Обычно используется для переключения между прямым порядком байтов и прямым порядком байтов. При использовании с 16-битными регистрами дает разные результаты на 486, 586 и бочах /QEMU.
CMPXCHGатомарных CoMPare и eXCHanGeСм. Сравнение и замена / на более поздних версиях 80386 в недокументированном коде операции
INVDНедействительность внутренней кешейОчистить внутренние кеши
INVLPGInvalidate TLB EntryInvalidate TLB Entry для страницы, которая содержит элементы данных
WBINVDWrite Back и Invalidate CacheЗаписывает обратно все измененные строки кэша во внутреннем кэше процессора в основную память и делают недействительные внутренние кеши.
XADDeXchange and ADDМеняет первый операнд на второй, затем загружает сумму двух значений в операнд-адресат.

Добавлен с помощью Pentium
ИнструкцияСмыслПримечания
CPUID Идентификация процессораВозвращает данные, соответствующие идентификации процессора и его функции, и возвращает данные в регистры EAX, EBX, ECX и EDX. Функции инструкций, основы в регистре EAX. Это также было добавлено к более поздним процессорам 80486
CMPXCHG8BCoMPare и eXCHanGe 8 байтДругой EDX: EAX с m64. Если установлено, установите ZF и загрузите ECX: EBX в m64. В противном случае очистите ZF и загрузите m64 в EDX: EAX.
RDMSR ReaD from Регистр, зависящий от модели Загрузить MSR, либо ECX, в EDX: EAX
RDTSC ReaD Time Stamp CounterВозвращает количество тактов процессора с того момента, как процессор был в состоянии "ONLINE" (с момента последнего включения системы)
WRMSR WRite to Model-Specific RegisterЗаписать в EDX: EAX в MSR, в ECX
RSMВозобновить из режима управления системойЭто было введено в i 386SL и более поздних версийх, а также в i 486SL и более поздние версии. Возобновляется из Режим управления системой (SMM)

Пентиум MMX

ИнструкцияЗначениеПримечания
Прочтите PMC [счетчик мониторинга производительности]Указано в регистре ECX в регистрах EDX: EAX

Также были добавлены регистры MMX и инструкции поддержки MMX. Их можно использовать как для операций с целыми числами, так и для операций с плавающей запятой, см. Ниже.

Добавлен с помощью AMD K6
ИнструкцияЗначениеПримечания
SYSCALLфункционально эквивалентны SYSENTER
SYSRETэквивалент SYSEXIT

AMD изменила определение битов CPUID для этой функции с K6-II.

Добавлен с помощью Pentium Pro
ИнструкцияЗначениеПримечания
CMOVccУсловное перемещение(CMOVA, CMOVAE, CMOVB, CMOVBE, CMOVC, CMOVE, CMOVG, CMOVGE, CMOVL, CMOVLE, CMOVNA, CMOVNAE, CMOVNB, CMOVNBE, CMOVNC, CMOVNE, CMOVNG, CMOVNGE, CMOVNOV, CMOVNLE, CMOVNOV, CMOVNOV, CMOVNO, CMOVPE, CMOVPO, CMOVS, CMOVZ)
UD2Неопределенная инструкцияСоздает недопустимый код операции. Эта инструкция для программного обеспечения для явной генерации недопустимого кода операции. Код операции для этой инструкции зарезервирован для этой цели.

Добавлен с помощью Pentium II
ИнструкцияЗначениеПримечания
SYSENTERВызов SYStem ENTERИногда вызывается Инструкция Fast System Call, эта инструкция была для увеличения производительности операционной системы. Обратите внимание, что на Pentium Pro инструкция CPUID неверно сообщает об этих инструкциях как о доступных.
SYSEXITSYStem call EXIT

Добавлен с помощью SSE
ИнструкцииOpcodeЗначениеПримечания
NOP r / m160F 1F / 0Многобайтовая инструкция отсутствия операции.
NOP r / m32
PREFETCHT00F 18/1Предварительная выборка данных с адресаПредварительная выборка на всех уровнях кэша
PREFETCHT10F 18/2Предварительная выборка данных с адресаПредварительная выборка на всех уровнях кэша, ЗА ИСКЛЮЧЕНИЕМ L1
PREFETCHT20F 18/3Предварительная выборка данных с адресаПредварительная выборка на всех уровнях кеша, КРОМЕ L1 и L2
PREFETCHNTA0F 18/0Предварительная выборка данных из адресаПредварительный выбор во вневременную устойчивость кеша, минимизируя загрязнение кеша.
SFENCE0F AE F8Store FenceПодсказка процессора, чтобы убедиться, что все операции хранилища имеют место до вызова SFENCE, видны глобально

Добавлено с SSE2
ИнструкциейOpcodeЗначениеПри Примечания
CLFLUSH m80F AE / 7Cache Line FlushДелает недействительную строку кэша, которая содержит линейный адрес, собственный в исходном операнде со всех уровней иерархии кэша процессора
LFENCE0F AE E8Load FenceСериализует операции загрузки.
MFENCE0F AE F0Memory FenceВыполняет операцию сериализации для всех инструкций внедрения и сохранения, которые были выданы до инструкции MFENCE.
MOVNTI m32, r320F C3 / rПереместить двойное слово Non-TemporalПереместить двойное слово из r32 в m32, минимизируя загрязнение в иерархии кеша.
PAUSEF3 90Подсказка Spin LoopДает подсказку процессу, что следующий код является циклом вращения, для кэшируемости

Добавлен с помощью SSE3
ИнструкцияЗначениеПримечания
MONITOR EAX, ECX, EDXНастройка адреса монитораУстанавливает линейный диапазон адресов, который будет контролируется аппаратно и активирует монитор.
MWAIT EAX, ECXМониторинг ожиданияПодсказка процессора для остановки выполнения инструкции и перехода в зависимое от реализации оптимизированное состояние до возникновения класса событий.

Добавлен с помощью SSE4.2
, инструкцияКод операцииЗначениеПримечания
CRC32 r32, r / m8F2 0F 38 F0 / rAccumulate CRC32Вычисляет значение CRC с использованием полинома CRC-32C (Кастаньоли) 0x11EDC6F41 (нормальная форма 0x1EDC6F41). Это полином, используемое в iSCSI. В отличие от более популярного используемого в Ethernet, его четкость является четной, и поэтому он может обнаруживать любую ошибку с нечетным числом измененных битов.
CRC32 r32, r / m8F2 REX 0F 38 F0 / r
CRC32 r32, r / m16F2 0F 38 F1 / r
CRC32 r32, r / m32F2 0F 38 F1 / r
CRC32 r64, r / m8F2 REX.W 0F 38 F0 / r
CRC32 r64, r / m64F2 REX.W 0F 38 F1 / r
CRC32 r32, r / m8F2 0F 38 F0 / r

Добавлен с x86-64
ИнструкцияЗначениеПримечания
CDQEЗнак расширить EAX в RAX
CQOЗнак расширить RAX в RDX: RAX
CMPSQCoMPare String Quadword
CMPXCHG16BCoMPare and EXCHANGE 16 байтов
IRETQ64-битный возврат из прерывания
JRCXZПерейти, если RCX равен нулю
LODSQLoaD String Quadword
MOVSXDMOV with Sign Extend 32-bit to 64-bit
POPFQPOP RFLAGS Регистр
PUSHFQPUSH RFLAGS Register
RDTSCPReaD Time Stamp Counter and Processor ID
SCASQSCAn String Quadword
STOSQSTOre String Quadword
SWAPGSОбменять базу GS с KernelGSBase MSR

Добавлен с помощью AMD-V
InstructionЗначениеПримечанияКод операции
CLGIОчистить Глобальный Флаг прерыванияОчищает GIF0x0F 0x01 0xDD
INVLPGAНедействительная запись TLB в указанном ASIDДелает недействительное отображение TLB для виртуального страницы, указанная в RAX и ASID, соответствующая в ECX.0x0F 0x01 0xDF
MOV(CRn)Переход к регистрам управления или из нихПеремещение на 32 или 64 -битовое содержимое в регистр управления и наоборот.0x0F 0x22 или 0x0F 0x20
MOV(DRn)Переход к регистрам отладки и обратноПеремещает 32- или 64-битное содержимое для управления регистром и наоборот.0x0F 0x21 или 0x0F 0x23
SKINITБезопасный и переход с аттестациейПроверяемый запуск доверенного программного обеспечения на основе сравнения защищенного хэша0x0F 0x01 0xDE
STGIУстановить флаг глобального прерыванияУстанавливает GIF.0x0F 0x01 0xDC
VMLOADЗагрузить состояние из VMCBЗагружает подмножество состояния процессора из VMCB, заданного физическим адресом в регистре RAX.0x0F 0x01 0xDA
VMMCALLВызов VMMИспользуется исключительно для связи с VMM0x0F 0x01 0xD9
VMRUNЗапуск машиныВыполняет переключение на гостевую ОС.0x0F 0x01 0xD8
VMSAVEСохранить состояние в VMCBСохраняет дополнительное гостевое состояние в VMCB.0x0F 0x01 0xDB

Добавлен с Intel VT-x
ИнструкцияЗначениеПримечанияКод операции
INVEPTНедействительный перевод, полученный из EPTДелает недействительными записи, производные от EPT, в TLB и кэшах структуры подкачки.0x66 0x0F 0x38 0x80
INVVPIDНедействительно трансляции на основе VPIDДелает недействительными записи в TLB и кеши структуры подкачки на основе VPID.0x66 0x0F 0x38 0x80
VMFUNCВызов функции VMВызов функции VM, часть в EAX.0x0F 0x01 0xD4
VMPTRLDЗагрузить указатель на перенос управления существующей машинойЗагружает указатель текущий VMCS из памяти.0x0F 0xC7 / 6
VMPTRSTСохранить указатель на разрушенное управление данной машинойСохраняет указатель current-VMCS по указанному адресу памяти. Операнд этой инструкции всегда 64 бита и всегда находится в памяти.0x0F 0xC7 / 7
VMCLEARОчистить управление виртуальной машинойЗаписывает любые кэшированные данные в VMCS0x66 0x0F 0xC7 / 6
VMREADЧтение поля из структуры управления виртуальной машиныСчитывает поле в VMCS0x0F 0x78
VMWRITEЗапись поля в перенастройке управления данной машинойИзменяет поле в VMCS0x0F 0x79
VMCALLCall to VM MonitorВызов функции VM Monitor из гостевой системы0x0F 0x01 0xC1
VMLAUNCHЗапуск виртуальной машиныЗапуск виртуальной машины под управлением текущей VMCS0x0F 0x01 0xC2
VMRESUMEвозобновить виртуальную машинувозобновить виртуальную машину под управлением текущей виртуальной машины VMCS0x0F 0x01 0xC3
VMXOFFОставить операцию VMXОстанавливает аппаратно поддерживаемую среду виртуализации0x0F 0x01 0xC4
VMXONE nter VMX OperationВход в среду виртуализации аппаратной системы поддержки0xF3 0x0F 0xC7 / 6

Добавлен с ABM

LZCNT, POPCNT (POPulation CouNT) - расширенное управление битами

Добавлено с помощью BMI1

ANDN, BEXTR, BLSI, BLSMSK, BLSR, TZCNT

Добавлено с BMI2

BZHI, MULX, PDEP, PEXT, RORX, SARX, SHRX, SHLX

Добавлен с TBM

AMD представила TBM вместе с BMI1 в своем Пиледривер линейка процессоров; более поздние процессоры AMD Jaguar и Zen не включая TBM. Ни один из процессоров Intel (по состоянию на 2020 год) не поддерживает TBM.

ИнструкцияОписаниеЭквивалентное выражение C
BEXTRИзвлечение битового поля (с немедленным)(src>>start) ((1 << len) - 1)
BLCFILLЗаполнить младший бит сбросаx (x + 1)
BLCIИзолировать младший бит сбросаx | ~ (x + 1)
BLCICИзолировать младший бита сброса и дополнить~ x (x + 1)
BLCMSKМаска из младшего бита сбросаx ^ (x + 1)
BLCSУстановить младший бит сбросаx | (x + 1)
BLSFILLЗаполнить с самого низкого установленного битаx | (x - 1)
BLSICИзолировать младший установленный бит и дополнить~ x | (x - 1)
T1MSKCОбратная маска из конечных единиц~ x | ( x + 1)
TZMSKМаска из конечных нулей~ x (x - 1)

Добавлена ​​с набором инструкций CLMUL
ИнструкцияКод операцииОписание
PCLMULQDQ xmmreg, xmmrm, imm66 0f 3a 44 / r ibПроизвести умножение без переноса двух 64-битных многочленов надконечное поле GF (2).
PCLMULLQLQDQ xmmreg, xmmrm66 0f 3a 44 / r 00Умножение младших половин двух регистров.
PCLMULHQLQDQ xmmreg, xmmrm66 0f 3a 44 / r 01Умножьте старшую половину регистра назначения на младшую половину исходного регистра.
PCLMULLQHQDQ xmmreg, xmmrm66 0f 3a 44 / r 10Умножьте младшую половину регистра назначения на старшую половину исходного регистра.
PCLMULHQHQDQ xmmreg, xmmrm66 0f 3a 44 / r 11Умножение старших половин двух регистров.

Добавлен с помощью Intel ADX
ИнструкцияОписание
ADCXДобавляет два целых числа без знака плюс перенос, считывание переноса из флага переноса и, при необходимости, его установка там. Не влияет на другие флаги, кроме переноса.
ADOXДобавляет два целых числа без знака плюс перенос, считывая перенос из флага переполнения и при необходимости устанавливая его там. Не влияет на другие флаги, кроме переполнения.
x87 инструкции с плавающей запятой

Исходные 8087 инструкции

ИнструкцияЗначениеПримечания
F2XM12 x - 1 {\ displaystyle 2 ^ {x} -1}2 ^ {x} -1 точнее, чем 2 x {\ displaystyle 2 ^ {x}}2 ^ {x} для x, близкого к нулю
FABSАбсолютное значение
FADDДобавить
FADDPДобавить и извлечь
FBLDЗагрузить BCD
FBSTPСохранить BCD и извлечь
FCHSИзменить знак
FCLEXОчистить исключения
FCOMСравнить
FCOMPСравнить и извлечь
FCOMPPСравнить и извлечь дважды
FDECSTPУменьшить указатель стека с плавающей запятой
FDISIОтключить прерываниятолько 8087, иначе FNOP
FDIVDivideОшибка Pentium FDIV
FDIVPDivide and pop
FDIVRDivide реверсивный
FDIVRPДеление реверсивное и всплывающее
FENIРазрешить прерываниятолько 8087, в противном случае FNOP
FFREEСвободный регистр
FIADDЦелочисленное сложение
FICOMЦелочисленное сравнение
FICOMPЦелочисленное сравнение и извлечение
FIDIVЦелочисленное деление
FIDIVRЦелочисленное деление обращено
FILDЗагрузить целое число
FIMULЦелочисленное умножение
FINCSTPУвеличить указатель стека с плавающей запятой
FINITИнициализировать процессор с плавающей запятой
FISTСохранить целое число
FISTPСохранить целое и всплывающее число
FISUBЦелочисленное вычитание
FISUBRЦелочисленное вычитание, обратное
FLDЗагрузка с плавающей точкой
FLD1Загрузить 1.0 в стек
FLDCWЗагрузить управляющее слово
FLDENVЗагрузить состояние среды
FLDENVWЗагрузить состояние среды, 16 бит
FLDL2EЗагрузить журнал 2 ( e) в стек
FLDL2TЗагрузить журнал 2 (10) в стек
FLDLG2Загрузить журнал 10 (2) в стек
FLDLN2Загрузить ln (2) в стек
FLDPIЗагрузить π в стек
FLDZЗагрузить 0,0 в стек
FMULУмножить
FMULPУмножить и выдать
FNCLEXОчистить исключения, без ожидания
FNDISIОтключить прерывания, нет ожиданиетолько 8087, иначе FNOP
FNENIРазрешить прерывания, без ожиданиятолько 8087, в противном случае FNOP
FNINITИнициализировать плавающее точечный процессор, без ожидания
FNOPНет операции
FNSAVEСохранить состояние FPU, без ожидания, 8-битный
FNSAVEWСохранить состояние FPU, без ожидания, 16 бит
FNSTCWСохранить управляющее слово, без ожидания
FNSTENVСохранить среду FPU, без ожидания
FNSTENVWСохранить Среда FPU, без ожидания, 16 бит
FNSTSWСохранить слово состояния, без ожидания
FPATANЧастичный арктангенс
FPREMЧастичный остаток
FPTANЧастичный касательный
FRNDINTОкругление до целого
FRSTORВосстановить сохраненное состояние
FRSTORWВосстановить сохраненное состояниеВозможно, фактически недоступно в 8087
FSAVEСохранить состояние FPU
FSAV EWСохранить состояние FPU, 16 бит
FSCALEМасштабировать с коэффициентом 2
FSQRTКвадратный корень
FSTХранилище с плавающей запятой
FSTCWУправляющее слово хранилища
FSTENVСохранение среды FPU
FSTENVWСохранение среды FPU, 16-бит
FSTPСохранить и извлечь
FSTSWСохранить слово состояния
FSUBВычесть
FSUBPВычесть и извлечь
FSUBRОбратное вычитание
FSUBRPОбратное вычитание и pop
FTSTПроверка нуля
FWAITОжидание выполнения FPU
FXAMПроверка флагов условий
FXCHОбменные регистры
FXTRACTИзвлечь экспоненту и мантиссу
FYL2Xy · log 2x, если y = log b 2, то основание -b вычисляется логарифм
FYL2XP1y · log 2 (x + 1)точнее, чем log 2 z, если x близко к нулю

Добавлен в верх процессоры

Добавлен с помощью 80 287
ИнструкцияЗначениеПримечания
FSETPMУстановить защищенный режимтолько для 80287, иначе FNOP

Добавлен с 80387
ИнструкцияЗначениеПримечания
FCOSКосинус
ФЛДЭНВДЗагрузить состояние среды, 32-бит
FSAVEDСохранить состояние FPU, 32-бит
FPREM1Частичный остатокВычислить s Остаток IEEE
FRSTORDВосстановление сохраненного состояния, 32-битное
FSINСинус
FSINCOSСинус и косинус
FSTENVDСохранить среду FPU, 32-разрядную
FUCOMНеупорядоченное сравнение
FUCOMPНеупорядоченное сравнение и извлечение
FUCOMPPНеупорядоченное сравнение и pop two

Добавлен с вариантами Pentium Pro
  • FCMOV : FCMOVB, FCMOVBE, FCMOVE, FCMOVNB, FCMOVNBE, FCMOVNE, FCMOVNU, FCMOVU
  • варианты: FCOMI, FCOMIP, FUCOMI, FUCOMIP

Добавлен с SSE

FXRSTOR, FXSAVE

Они также поддерживаются более поздних Pentium II, которые не содержат поддержки SSE

Добавлены с SSE3

FISTTP (преобразование x87 в целое с усечением, независимо от слова состояния)

инструкции MMX

инструкции MMX работают с регистрами mm, которые составляют 64 бит шириной. Они используются совместно с регистрами FPU.

Исходные инструкции MMX

Добавлены с Pentium MMX

ИнструкцияКод операцииЗначениеПримечания
EMMS0F 77Пустое состояние технологии MMXПомечает все регистры x87 FPU для использования FPU
MOVD mm, r / m320F 6E / rПеремещение двойного слова
MOVD r / m32, мм0F 7E / rПеремещение двойного слова
MOVQ мм / м64, мм0F 7F / rПеремещение четверного слова
MOVQ мм, мм / м640F 6F / rПеремещение четверного слова
MOVQ мм, r / m64REX.W + 0F 6E / rПереместить четверное слово
MOVQ r / m64, ммREX.W + 0F 7E / rПереместить четверное слово
PACKSSDW мм1, мм2 / м640F 6B / rУпаковать двойные слова в слова (подписанные с насыщенностью)
PACKSSWB мм1, мм2 / м640F 63 / rУпаковать слова в байты (подписанные с насыщением)
PACKUSWB мм, мм / м640F 67 / rУпаковать слова в байтов (без знака с насыщением)
PADDB мм, мм / м640F FC / rДобавить упакованное целое число байтов gers
PADDW мм, мм / м640F FD / rДобавить сжатые целые слова
PADDD мм, мм / м640F FE / rДобавить упакованные целые числа с двойным словом
PADDQ мм, мм / м640F D4 / rДобавить упакованные целые числа с двойным словом
PADDSB мм, мм / м640F EC / rДобавить упакованные целые числа в байтах со знаком и насыщение
PADDSW мм, мм / м640F ED / rДобавить упакованные целые числа со словами со знаком и насыщать
PADDUSB мм, мм / м640F DC / rДобавить упакованные байтовые целые числа без знака и насыщать
PADDUSW мм, мм / м640F DD / rДобавить упакованные целые числа без знака и насыщение
PAND мм, мм / м640F DB / rПобитовое И
PANDN мм, мм / m640F DF / rПобитовое И НЕ
POR мм, мм / м640F EB / rПобитовое ИЛИ
PXOR мм, мм / м640F EF / rПобитовое исключающее ИЛИ
PCMPEQB мм, мм / м640F 74 / rСравнить упакованные байты на равенство
PCMPEQW мм, мм / м640F 75 / rСравнить pac ked слова для равенства
PCMPEQD мм, мм / м640F 76 / rСравнить сжатые двойные слова для равенства
PCMPGTB мм, мм / м640F 64 / rСравнить упакованные целые числа в байтах со знаком для значений больше
PCMPGTW мм, мм / м 640F 65 / rСравнить упакованные целые числа в байтах со знаком для значений, превышающих
PCMPGTD мм, мм / м640F 66 / rСравнить упакованные целые числа с двойным словом со знаком для значений, превышающих
PMADDWD мм, мм / м640F F5 / rУмножить упакованные слова, сложить результаты смежных двойных слов
PMULHW mm, mm / m640F E5 / rУмножить упакованные целые числа со знакомыми словами, сохранить старшие 16 биты результатов
PMULLW мм, мм / м640F D5 / rУмножение упакованных целых чисел со знаком, сохранение младших 16 бит результатов
PSLLW мм1, imm80F 71/6 ibСдвиг слов влево, смещение по нулям
PSLLW мм, мм / м640F F1 / rСдвиг слов влево, сдвиг нулей
PSLLD мм, imm80F 72/6 ibСдвиг влево двойного слова s, сдвиг по нулям
PSLLD мм, мм / м640F F2 / rСдвиг влево двойных слов, сдвиг по нулям
PSLLQ мм, imm80F 73/6 ibСдвиг влево четырехслово, сдвиг по нулям
PSLLQ мм, мм / м640F F3 / rСдвиг влево четырехслово, сдвиг по нулям
PSRAD мм, imm80F 72/4 ibСдвиг двойных слов вправо, сдвиг в знаковых битах
PSRAD мм, мм / м640F E2 / rСдвиг вправо двойных слов, сдвиг в знаковых битах
PSRAW mm, imm80F 71/4 ibСдвиг вправо слов, сдвиг в знаковых битах
PSRAW мм, мм / м640F E1 / rСдвиг слов вправо, сдвиг в знаковых битах
PSRLW мм, imm80F 71/2 ibСдвиг правых слов, сдвиг по нулям
PSRLW мм, мм / м640F D1 / rСдвиг правых слов, сдвиг по нулям
PSRLD мм, imm80F 72/2 ibСдвиг двойных слов вправо, сдвиг по нулям
PSRLD мм, мм / м640F D2 / rСдвиг двойные слова справа, сдвиг по нулям
PSRLQ mm, imm80F 73/2 ibСдвиг четвертого слова вправо, сдвиг по нулям
PSRLQ мм, мм / м640F D3 / rСдвиг четвертого слова вправо, сдвиг в нулях
PSUBB мм, мм / м640F F8 / rВычесть упакованные байтовые целые числа
PSUBW мм, мм / м640F F9 / rВычесть целые числа в упакованном виде
PSUBD мм, мм / м640F FA / rВычесть целые числа в сжатом двойном слове
PSUBSB мм, мм / м640F E8 / rВычесть упакованные байты со знаком с насыщением
PSUBSW мм, мм / м640F E9 / rВычесть упакованные слова со знаком с насыщенность
PSUBUSB мм, мм / м640F D8 / rВычесть упакованные байты без знака с насыщением
PSUBUSW мм, мм / м640F D9 / rВычесть упакованные слова без знака с насыщением
PUNPCKHBW мм, мм / м640F 68 / rРаспаковать и чередовать старшие байты
PUNPCKHWD мм, мм / м640F 69 / rРаспаковка и чередование старших слов
PUNPCKHDQ мм, мм / м640F 6A / rРаспаковывать и чередовать двойные слова высокого порядка
PUNPCKLBW мм, мм / м320F 60 / rРаспаковывать и чередовать младшие байты
PUNPCKLWD мм, мм / м320F 61 / rРаспаковка и чередование младших слов
PUNPCKLDQ мм, мм / м320F 62 / rРаспаковка и чередование младшие двойные слова

инструкции MMX, добавленные в определенные процессоры

инструкции EMMI

Добавлены с 6x86MX из Cyrix, теперь не рекомендуется

PAVEB, PADDSIW, PMAGW, PDISTIB, PSUBSIW, PMVZB, PMULHRW, PMVNZB, PMVLZB, PMVGEZB, PMULHRIW, PMACHRIW

инструкции MMX, добавленные с помощью MMX + и SSE
>Следующая инструкция MMX была добавлена ​​с SSE. Они также доступны на Athlon под названием MMX +.

ИнструкцияOpcodeЗначение
MASKMOVQ мм1, мм20F F7 / rМаскированное перемещение четырехслова
MOVNTQ m64, мм0F E7 / rПеремещение четырехслова с использованием вневременной подсказки
PSHUFW мм1, мм2 / м64, imm80F 70 / r ibПеремешать упакованные слова
PINSRW мм, r32 / m16, imm80F C4 / rВставить слово
PEXTRW reg, mm, imm80F C5 / rИзвлечь слово
PMOVMSKB reg, мм0F D7 / rПереместить байтовую маску
PMINUB мм1, мм2 / м640F DA / rМинимум упакованных целых байтов без знака
PMAXUB мм1, мм2 / м640F DE / rМаксимальное количество упакованных целых байтов без знака
PAVGB мм1, мм2 / м640F E0 / rСредние упакованные целые числа
PAVGW мм1, мм2 / м640F E3 / rСредние упакованные целые числа
PMULHUW мм1, мм2 / м640F E4 / rУмножение упакованных целых чисел без знака и сохранение высокого результата
PMINSW мм1, мм2 / м640F EA / rМинимум Па cked Целые числа со знаком со знаком
PMAXSW мм1, мм2 / м640F EE / rМаксимальное количество упакованных целых чисел со знаком со знаком
PSADBW мм1, мм2 / м640F F6 / rВычислить сумму абсолютных разностей
Инструкции MMX, добавленные с SSE2

Следующие инструкции MMX были добавлены с SSE2:

InstructionOpcodeЗначение
PSUBQ мм1, мм2 / м640F FB / rВычесть четырехсловное целое число
PMULUDQ мм1, мм2 / м640F F4 / rУмножение двойного слова без знака на целое
Инструкции MMX, добавленные с помощью SSSE3
ИнструкцияOpcodeЗначение
PSIGNB мм1, мм2 / м640F 38 08 / rОтменить / обнулить / сохранить упакованные байтовые целые числа в зависимости от соответствующего знака
PSIGNW мм1, мм2 / м640F 38 09 / rОтменить / обнулить / сохранить упакованные целые слова в зависимости от соответствующего знака
PSIGND мм1, мм2 / м640F 38 0A / rОтменить / обнулить / сохранить упакованные целые числа из двух слов в зависимости от на соответствующих знак
ПШУФБ мм1, мм2 / м640F 38 00 / rПеремешать байты
PMULHRSW мм1, мм2 / м640F 38 0B / rУмножение 16-битных слов со знаком, масштабирование и округление двойных слов со знаком, упаковка старших 16 бит
PMADDUBSW мм1, мм2 / м640F 38 04 / rУмножение со знаком и беззнаковые байты, добавить горизонтальную пару подписанных слов, упаковать насыщенные подписанные слова
PHSUBW мм1, мм2 / м640F 38 05 / rВычесть и упаковать 16-битные целые числа со знаком по горизонтали
PHSUBSW мм1, мм2 / м640F 38 07 / rВычесть и упаковать 16-битное целое число со знаком по горизонтали с насыщенностью
PHSUBD мм1, мм2 / м640F 38 06 / rВычесть и упаковать 32-битные целые числа со знаком по горизонтали
PHADDSW мм1, мм2 / м640F 38 03 / rДобавить и упаковать 16-разрядные целые числа со знаком по горизонтали, упаковать насыщенные целые числа в мм1.
PHADDW мм1, мм2 / м640F 38 01 / rСложение и упаковка 16-битных целых чисел по горизонтали
PHADDD мм1, мм2 / м640F 38 02 / rСложить и упаковать 32-битные целые числа по горизонтали
PALIGNR мм1, мм2 / м64, imm80F 3A 0F / r ibКонкатенировать назначение и исходные операнды, извлечь выровненный по байтам результат, сдвинутый вправо
PABSB мм1, мм2 / м640F 38 1C / rВычислить абсолютное значение байтов и сохранить результат без знака
PABSW мм1, мм2 / м640F 38 1D / rВычислить абсолютное значение 16-битных целых чисел и сохранить результат без знака
PABSD мм1, мм2 / м640F 38 1E / rВычислить абсолютное значение 32-битных целых чисел и сохранить результат без знака

3DNow! инструкции

Добавлены с помощью K6-2

FEMMS, PAVGUSB, PF2ID, PFACC, PFADD, PFCMPEQ, PFCMPGE, PFCMPGT, PFMAX, PFMIN, PFMUL, PFRCP, PFRCPIT1, PFRCPIT2, PFRSQIT1, PFRSQETDUB, PFRSQIT2, PFRSQRT, PFSQRT, 35>3DNow! + Инструкции

Добавлен с Athlon и K6-2+

PF2IW, PFNACC, PFPNACC, PI2FW, PSWAPD

Добавлен с Geode GX

PFRSQRTV, PFRCPV

Инструкции SSE

Добавлены с Pentium III

Инструкции SSE работают с регистрами xmm, которые имеют ширину 128 бит.

SSE состоит из следующих инструкций с плавающей запятой SSE SIMD:

InstructionOpcodeЗначение
ANDPS * xmm1, xmm2 / m1280F 54 / rПобитовое логическое И упакованных значений с плавающей запятой одинарной точности
ANDNPS * xmm1, xmm2 / m1280F 55 / rПобитовое логическое И НЕ упакованных значений с плавающей запятой одинарной точности
ORPS * xmm1, xmm2 / m1280F 56 / rПобитовое логическое ИЛИ значений с плавающей запятой одинарной точности
XORPS * xmm1, xmm2 / m1280F 57 / rПобитовое логическое исключающее ИЛИ для значений с плавающей запятой одинарной точности
MOVUPS xmm1, xmm2 / m1280F 10 / rПеремещение невыровненных упакованных значений с плавающей запятой одинарной точности
MOVSS xmm1, xmm2 / m32F3 0F 10 / rMove Scalar Значения с плавающей запятой одинарной точности
MOVUPS xmm2 / m128, xmm10F 11 / rПеремещение невыровненных упакованных значений с плавающей запятой одинарной точности
MOVSS xmm2 / m32, xmm1F3 0F 11 / rПеремещение скалярных значений с плавающей запятой одинарной точности
MOVLPS xmm, m640F 12 / rПеремещение низкоупакованных значений с плавающей запятой одинарной точности
MOVHLPS xmm1, xmm20F 12 / rПеремещение упакованных значений с плавающей запятой одинарной точности от высокого к низкому
MOVLPS m64, xmm0F 13 / rПеремещение значений с плавающей запятой одинарной точности с низкой упаковкой
UNPCKLPS xmm1, xmm2 / m1280F 14 / rРаспаковка и чередование с плавающей запятой одинарной точности с низкой упаковкой- Значения точки
UNPCKHPS xmm1, xmm2 / m1280F 15 / rРаспаковка и чередование высокопакетных значений с плавающей запятой одинарной точности
MOVHPS xmm, m640F 16 / rПеремещение значений с плавающей запятой одинарной точности с высокой степенью упаковки
MOVLHPS xmm1, xmm20F 16 / rПеремещение с упаковкой одинарной точности Значения с плавающей запятой от низкого к высокому
MOVHPS m64, xmm0F 17 / rПеремещение высоконадежных значений с плавающей запятой одинарной точности
MOVAPS xmm1, xmm2 / m1280F 28 / rПереместить выровненные упакованные значения с плавающей запятой одинарной точности
MOVAPS xmm2 / m128, xmm10F 29 / rПереместить выровненные упакованные одинарной точности Значения с плавающей точкой
MOVNTPS m128, xmm10F 2B / rПереместить выровненный четырехпакетный одинарный FP Non Temporal
MOVMSKPS reg, xmm0F 50 / rИзвлечь упакованную 4-битную маску знака с плавающей запятой одинарной точности. Старшие биты регистра заполнены нулями.
CVTPI2PS xmm, мм / м640F 2A / rПреобразование упакованных целых двойных слов в упакованные значения FP одинарной точности
CVTSI2SS xmm, r / m32F3 0F 2A / rПреобразование целого двойного слова в скалярное значение FP с одинарной точностью
CVTSI2SS xmm, r / m64F3 REX.W 0F 2A / rПреобразование целого числа Qword в скалярное значение FP с одинарной точностью
MOVNTPS m128, xmm0F 2B / rСохранение упакованных значений с плавающей запятой одинарной точности с помощью вневременной подсказки
CVTTPS2PI мм, xmm / m640F 2C / rПреобразование с усечением упакованных значений FP одинарной точности в упакованные целые числа двойного слова
CVTTSS2SI r32, xmm / m32F3 0F 2C / rПреобразовать с усечением скалярное значение FP с одинарной точностью в целое число двойного слова
CVTTSS2SI r64, xmm1 / m32F3 REX.W 0F 2C / rПреобразовать с усечением скалярное значение FP одинарной точности в Qword Integer
CVTPS2PI мм, xmm / m640F 2D / rПреобразовать упакованные значения FP одинарной точности в упакованное Dword Int egers
CVTSS2SI r32, xmm / m32F3 0F 2D / rПреобразование скалярного значения FP с одинарной точностью в целое число двойного слова
CVTSS2SI r64, xmm1 / m32F3 REX.W 0F 2D / rПреобразовать скалярное значение FP с одинарной точностью в Qword Integer
UCOMISS xmm1, xmm2 / m320F 2E / rНеупорядоченное сравнение скалярных значений с плавающей запятой одинарной точности и установка EFLAGS
COMISS xmm1, xmm2 / m320F 2F / rСравнение скалярных упорядоченных значений с плавающей запятой одинарной точности и Установить EFLAGS
SQRTPS xmm1, xmm2 / m1280F 51 / rВычислить квадратные корни упакованных значений с плавающей запятой одинарной точности
SQRTSS xmm1, xmm2 / m32F3 0F 51 / rВычислить квадратный корень из скалярного значения с плавающей запятой одинарной точности
RSQRTPS xmm1, xmm2 / m1280F 52 / rВычислить обратную величину квадратного корня упакованного значения с плавающей запятой одинарной точности
RSQRTSS xmm1, xmm2 / m32F3 0F 52 / rВычислить обратную величину квадратного корня скалярного Si ngle-Precision Floating-Point Value
RCPPS xmm1, xmm2 / m1280F 53 / rВычислить обратную величину упакованных значений с плавающей запятой одинарной точности
RCPSS xmm1, xmm2 / m32F3 0F 53 / rВычисление обратных значений скалярных значений с плавающей запятой одинарной точности
ADDPS xmm1, xmm2 / m1280F 58 / rДобавить упакованные значения с плавающей запятой одинарной точности
ADDSS xmm1, xmm2 / m32F3 0F 58 / rДобавить скалярные значения с плавающей запятой одинарной точности
MULPS xmm1, xmm2 / m1280F 59 / rУмножение значений с плавающей запятой одинарной точности
MULSS xmm1, xmm2 / m32F3 0F 59 / rУмножение скалярных значений с плавающей запятой одинарной точности
SUBPS xmm1, xmm2 / m1280F 5C / rВычесть упакованные одинарной точности с плавающей запятой- Значения точек
SUBSS xmm1, xmm2 / m32F3 0F 5C / rВычесть скалярные значения с плавающей запятой одинарной точности
MINPS xmm1, xmm2 / m1280F 5D / rМинимум возврата Упакованные значения с плавающей запятой одинарной точности
MINSS xmm1, xmm2 / m32F3 0F 5D / rВозвращают минимальные скалярные значения с плавающей запятой одинарной точности
DIVPS xmm1, xmm2 / m1280F 5E / rРазделение упакованных значений с плавающей запятой одинарной точности
DIVSS xmm1, xmm2 / m32F3 0F 5E / rРазделение скалярных значений с плавающей запятой одинарной точности
MAXPS xmm1, xmm2 / m1280F 5F / rВозвращает максимальные упакованные значения с плавающей запятой одинарной точности
MAXSS xmm1, xmm2 / m32F3 0F 5F / rВозвращает максимальные скалярные значения с плавающей запятой одинарной точности
LDMXCSR m320F AE / 2Загрузить состояние регистра MXCSR
STMXCSR m320F AE / 3Сохранить состояние регистра MXCSR
CMPPS xmm1, xmm2 / m128, imm80F C2 / r ibСравнить упакованные значения с плавающей запятой одинарной точности
CMPSS xmm1, xmm2 / m32, imm8F3 0F C2 / r ibСравнение скалярных значений с плавающей запятой одинарной точности
SHUFPS xmm1, xmm2 / m128, imm80F C6 / r ibПеремешать упакованные значения с плавающей запятой одинарной точности
  • Одинарные побитовые операции с плавающей запятой ANDPS, ANDNPS, ORPS и XORPS производят тот же результат, что и целое число SSE2 (PAND, PANDN, POR, PXOR) и двойное число (ANDPD, ANDNPD, ORPD, XORPD), но может вызвать дополнительную задержку для изменений домена при применении значений неправильного типа.

SSE2 инструкции

Добавлены с Pentium 4

SSE2 SIMD-инструкциями с плавающейзапятой

SSE2-инструкциями перемещения данных
ИнструкцияOpcode
MOVAPD xmm1, xmm2 / m12866 0F 28 / rПеремещение выровненных упакованных значений с плавающей запятой двойной точности
MOVAPD xmm2 / m128, xmm166 0F 29 / rПеремещение выровненных упакованных значений с плавающей запятой двойной точности
MOVNTPD m128, xmm166 0F 2B / rСохранение упакованных значений с использованием плавающей запятой двойной точности с вневременной подсказки
MOVHPD xmm1, m6466 0F 16 / rПереместить высокоупакованное значение с плавающей запятой второй точности
MOVHPD m64, xmm166 0F 17 / rПереместить высокоупакованное значение с плавающей запятой двойной точности
MOVLPD xmm1, m6466 0F 12 / rПереместить низкоупакованное значение с плавающей запятой двойной точности
MOVLPD m64, xmm166 0F 13 / rПереместить положение с плавающей запятой низкой точности с низким уплотнением
MOVUPD xmm1, xmm2 / m12866 0F 10 / rПереместить невыровненное упакованное значение двойной точности Значения с плавающей запятой
MOVUPD xmm2 / m128, xmm166 0F 11 / rПеремещение невыровненных упакованных значений с плавающей запятой двойной точности
MOVMSKPD reg, xmm66 0F 50 / rИзвлечь упакованную маску знака с плавающей запятой второй точности
MOVSD * xmm1, xmm2 / m64F2 0F 10 / rПереместить или объединить скалярное значение с плавающей запятой двойной точности
MOVSD xmm1 / m64, xmm2F2 0F 11 / rПереместить или объединить скалярное с плавающей запятой двойной точности
SSE2 упакованная арифметическая инструкция ns
ИнструкцияOpcodeЗначение
ADDPD xmm1, xmm2 / m12866 0F 58 / rДобавить Упакованный двойной Precision Значения с плавающей запятой
ADDSD xmm1, xmm2 / m64F2 0F 58 / rДобавить низкое значение с плавающей запятой двойной точности
DIVPD xmm1, xmm2 / m12866 0F 5E / rРазделение упакованных значений с плавающей запятой двойной точности
DIVSD xmm1, xmm2 / m64F2 0F 5E / rРазделить скалярное значение с плавающей запятой точности точности
MAXPD xmm1, xmm2 / m12866 0F 5F / rМаксимум упакованных значений с плавающей запятой двойной
MAXSD xmm1, xmm2 / m64F2 0F 5F / rВозвращает максимальное скалярное значение с плавающей запятой двойной точности
MINPD xmm1, xmm2 / m12866 0F 5D / rМинимум упакованных значений с плавающей запятой точности
MINSD xmm1, xmm2 / m64F2 0F 5D / rВозврат минимального скалярного значения с плавающей запятой двойной точности -Значение точки
MULPD x мм1, x мм2 / м 12866 0F 59 / rМногократно Упакованные значения с плавающей запятой второй точности
MULSD xmm1, xmm2 / m64F2 0F 59 / rУмножение скалярного значения с плавающей запятой двойной точности
SQRTPD xmm1, xmm2 / m12866 0F 51 / rКвадратный корень из значений с плавающей запятой двойной точности
SQRTSD xmm1, xmm2 / m64F2 0F 51 / rВычислить квадратный корень из скалярного значения с плавающей запятой двойной точности
SUBPD xmm1, xmm2 / m12866 0F 5C / rВычесть упакованное значение точности с плавающей запятой -Point Values ​​
SUBSD xmm1, xmm2 / m64F2 0F 5C / rВычесть скалярное с плавающей запятой двойной точности
Логические инструкции SSE2
ИнструкцияКод операции
ANDPD xmm1, xmm2 / m12866 0F 54 / rПобитовое логическое И упакованных значений с плавающей запятой лог войной точности
ANDNPD xmm1, xmm2 / m12866 0F 55 / rПобитовое логическое И НЕ упакованных значений с плавающей запятой двойной точности
ORPD xmm1, xmm2 / m12866 0F 56 / rПобитовое логическое ИЛИ упакованных значений с плавающей запятой второй точности
XORPD xmm1, xmm2 / m12866 0F 57 / rПобитовое логическое исключающее ИЛИ упакованного двойника Прецизионные значения с плавающей запятой
Команды сравнения SSE2
ИнструкцияOpcodeЗначение
CMPPD xmm1, xmm2 / m128, imm866 0F C2 / r ibСравнить упакованные значения с плавающей запятой двойной точности
CMPSD * xmm1, xmm2 / m64, imm8F2 0F C2 / r ibСравнить низкие значения с плавающей запятой двойной точности
COMISD xmm1, xmm2 / m6466 0F 2F / rсоответствующие скалярные упорядоченные значения с плавающей запятой двойной точности и установить EFLAGS
UCOMISD xmm1, xmm2 / m6466 0F 2E / rНеупорядоченное сравнение скалярных значений с плавающей запятой точности и установка EFLAGS
SSE2 инструкции перемешивания и распаковки
ИнструкцияоперацииЗначение
SHUFPD xmm1, xmm2 / m128, imm866 0F C6 / r ibPacked Interleave Shuffle of Pair of Double-Pre Значения с плавающей запятой cision
UNPCKHPD xmm1, xmm2 / m12866 0F 15 / rРаспаковка и чередование высокоупакованных значений с плавающей запятой двойной точностью
UNPCKLPD xmm1, xmm2 / m12866 0F 14 / rРаспаковка и чередование низкоупакованных значений с плавающей запятой двойной точности
Инструкции преобразования SSE2
ИнструкцияКод операцииЗначение
CVTDQ2PD xmm1, xmm2 / m64F3 0F E6 / rПреобразование упакованных целых двойных слов в упакованные значения с плавающей запятой двойной точности
CVTDQ2PS xmm1, xmm2 / m1280F 5B / rПреобразование упакованных целых двойных слов в упакованные значения с плавающей запятой одинарной точности
CVTPD2DQ xmm1, xmm2 / m128F2 0F E6 / rПреобразовать упакованные значения с плавающей запятой двойной точности в упакованные целые числа двойного слова
CVTPD2PI mm, xmm / m12866 0F 2D / rПреобразовать упакованные двойные - Прецизионные значения FP для упакованных целых двойных слов
CVTPD2PS xmm1, xmm2 / m12866 0F 5A / rПреобразовать Пациентные значения с плавающей запятой двойной точности в упакованные значения с плавающей запятой одинарной точность
CVTPI2PD xmm, мм / м6466 0F 2A / rПреобразование упакованных целых двойных слов в упакованные двойные -Precision FP Values ​​
CVTPS2DQ xmm1, xmm2 / m12866 0F 5B / rПреобразование упакованных значений с плавающей запятой одинарной точности в упакованные целочисленные значен ия двойного слова со знаком
CVTPS2PD xmm1, xmm2 / m640F 5A / rПреобразование упакованных значений с плавающей запятой одинарной точностью в упакованные значения с плавающей запятой двойной точности
CVTSD2SI r32, xmm1 / m64F2 0F 2D / rПреобразование скалярного значения с плавающей запятой двойной точности в целое двойное слово
CVTSD2SI r64, xmm1 / m64F2 REX.W 0F 2D / rПреобразовать скалярное значение с плавающей запятой двойной точности в четырехсловное целое с расширением знака
CVTSD2SS xmm1, xmm2 / m64F2 0F 5A / rПреобразовать скалярное двойное- Прецизионное значение с плавающей запятой в скалярное значение с плавающей запятой одинарной точности
CVTSI2SD xmm1, r32 / m32F2 0F 2A / rПреобразование двойного целого числа в скалярное значение с плавающей запятой точности
CVTSI2SD xmm1, r / m64F2 REX.W 0F 2A / rПреобразо вание четырехсловного целого числа в скалярное значение с плавающей запятой двойной точности
CVTSS2SD xmm1, xmm2 / m32F3 0F 5A / rПреобразовать скалярное значение с плавающей запятой одинарной точности в скалярное значение с плавающей запятой точности
CVTTPD2DQ xmm1, xmm2 / m12866 0F E6 / rПреобразовать с двойным усечением. Прецизионные значения с плавающей запятой в упакованные целые числа двойного слова
CVTTPD2PI мм, xmm / m12866 0F 2C / rПреобразовать с усечением упакованные значения FP двойной точности в упакованные целые числа двойного слова
CVTTPS2DQ xmm1, xmm2 / m128F3 0F 5B / rПреобразование с усечением упакованных значений с плавающей запятой одинарной точностью в упакованные целочисленные значения двойного слова со знаком
CVTTSD2SI r32, xmm1 / m64F2 0F 2C / rПреобразование со скалярным усечением с плавающей точкой двойной точности Значение точки g в знаковое целое двойное слово
CVTTSD2SI r64, xmm1 / m64F2 REX.W 0F 2C / rПреобразовать с усечением Скалярное значение точности с плавающей запятой в знак Qword Integer

Целочисленные инструкции SSE2 SIMD

SSE2 MMX-подобные инструкции, расширенные до регистров SSE

SSE2 позволяет выполнять инструкции MMX в регистрах SSE, обрабатывая один раз вдвое больше данных.

ИнструкцияOpcodeЗначение
MOVD xmm, r / m3266 0F 6E / rПереместить двойное слово
MOVD r / m32, xmm66 0F 7E / rПереместить двойное слово
MOVQ xmm1, xmm2 / m64F3 0F 7E / rПеремещение четверного слова
MOVQ xmm2 / m64, xmm166 0F D6 / rПеремещение четверного слова
MOVQ r / m64, xmm66 REX.W 0F 7E / rПереместить четвертое слово
MOVQ xmm, r / m6466 REX.W 0F 6E / rПереместить четверное слово
PMOVMSKB reg, xmm66 0F D7 / rПеремещение байтовой маски, обнуление старших битов регистра
PEXTRW reg, xmm, imm866 0F C5 / r ibИзвлечь указанное слово и переместить его в рег, установив биты 15-0 и обнуляя остальные
PINSRW xmm, r32 / m16, imm866 0F C4 / r ibПереместить младшее слово в указанную позицию слова
PACKSSDW xmm1, xmm2 / m12866 0F 6B / rПреобразует 4 упакованных целых числа двойного слова со знаком в 8 упакованных целых слов со знаком с насыщением
PACKSSWB xmm1, xmm2 / m12866 0F 63 / rПреобразует 8 упакованных целых чисел со знаком в 16 упакованных целых со знаком байтов с насыщением
PACKUSWB xmm1, xmm2 / m12866 0F 67 / rПреобразует 8 целых слов со знаком в 16 целых байтов без знака с насыщением
PADDB xmm1, xmm2 / m12866 0F FC / rДобавить с упаковкой байтовые целые числа
PADDW xmm1, xmm2 / m12866 0F FD / rДобавить сжатые целые слова
PADDD xmm1, xmm2 / m12866 0F FE / rДобавить упакованные целые числа с двойным словом
PADDQ xmm1, xmm2 / m12866 0F D4 / rДобавить упакованные целые числа с четырьмя словами.
PADDSB xmm1, xmm2 / m12866 0F EC / rДобавить упакованные байтовые целые числа со знаком с насыщением
PADDSW xmm1, xmm2 / m12866 0F ED / rДобавить упакованные целые числа со знаком со знаком с насыщением
PADDUSB xmm1, xmm2 / m12866 0F DC / rДобавить упакованные байтовые целые числа без знака с насыщением
PADDUSW xmm1, xmm2 / m12866 0F DD / rДобавить упакованные целые числа без знака с насыщением
PAND xmm1, xmm2 / m12866 0F DB / rПобитовое И
PANDN xmm1, xmm2 / m12866 0F DF / rПобитовое И НЕ
POR xmm1, xmm2 / m12866 0F EB / rПобитовое ИЛИ
PXOR xmm1, xmm2 / m12866 0F EF / rПобитовое исключающее ИЛИ
PCMPEQB xmm1, xmm2 / m12866 0F 74 / rСравнить упакованные байты на предмет равенства.
PCMPEQW xmm1, xmm2 / m12866 0F 75 / rСравнить упакованные слова на равенство.
PCMPEQD xmm1, xmm2 / m12866 0F 76 / rСравнить упакованные двойные слова на равенство.
PCMPGTB xmm1, xmm2 / m12866 0F 64 / rСравнить упакованные байтовые целые числа со знаком для большего, чем
PCMPGTW xmm1, xmm2 / m12866 0F 65 / rСравнить словом упакованные целые числа со со знаком для значений, превосходящих
PCMPGTD xmm1, xmm2 / m12866 0F 66 / rСравнить упакованные целые числа со знакомыми целыми числами для больше чем
PMULLW xmm1, xmm2 / m12866 0F D5 / rУмножение упакованных целых чисел со знаком и насыщенностью
PMULHW xmm1, xmm2 / m12866 0F E5 / rУмножение упакованных целых слов со знаком, сохранение старших 16 бит результатов
PMULHUW xmm1, xmm2 / m12866 0F E4 / rУмножение упакованных целых чисел без знака, сохранение старших 16 бит результатов
PMULUDQ xmm1, xmm2 / m12866 0F F4 / rУмножение упакованных целых чисел двойного слова без знака
PSLLW xmm1, xmm2 / m12866 0F F1 / rСдвиг слов влево при сдвиге в 0 с
PSLLW xmm1, imm866 0F 71/6 ibСдвиг слов влево w сдвиг в 0 с
PSLLD xmm1, xmm2 / m12866 0F F2 / rСдвигных двойных слов влево при смещении в 0 с
PSLLD xmm1, imm866 0F 72 / 6 ibСдвинуть двойные слова влево при сдвиге на 0 с
PSLLQ xmm1, xmm2 / m12866 0F F3 / rСдвинуть четверные слова влево при сдвиге на 0 с
PSLLQ xmm1, imm866 0F 73/6 ibСдвиг четырехслова влево при сдвиге в 0 с
PSRAD xmm1, xmm2 / m12866 0F E2 / rСдвиг двойного слова вправо при сдвиге в знаковых битах
PSRAD xmm1, imm866 0F 72/4 ibСдвиг двойного слова вправо при сдвиге в знаковых битах
PSRAW xmm1, xmm2 / m12866 0F E1 / rСдвиг слов вправо при сдвиге битов знака
PSRAW xmm1, imm866 0F 71/4 ibСдвиг слов вправо при сдвиге в знаковых битах
PSRLW xmm1, xmm2 / m12866 0F D1 / rСдвиг слов вправо при сдвиге в 0 с
PSRLW xmm1, imm866 0F 71/2 ibСдвиг слов вправо при сдвиге в 0 с
PSRLD xmm1, xmm2 / m12866 0F D2 / rСдвиг двойных слов вправо при сдвиге на 0 с
PSRLD xmm1, imm866 0F 72/2 ibСдвигает двойные слова вправо при сдвиге на 0 с
PSRLQ xmm1, xmm2 / m12866 0F D3 / rСдвигает четверные слова вправо при сдвиге на 0 с
PSRLQ xmm1, imm866 0F 73/2 ibСдвиг четверных слов вправо при сдвиге на 0 с
PSUBB xmm1, xmm2 / m12866 0F F8 / rВычесть упакованные целые байты
PSUBW xmm1, xmm2 / m12866 0F F9 / rВычесть целые упакованные слова
PSUBD xmm1, xmm2 / m12866 0F FA / rВычесть упакованные целые числа двойного слова
PSUBQ xmm1, xmm2 / m12866 0F FB / rВычесть упакованные целые числа четверного слова.
PSUBSB xmm1, xmm2 / m12866 0F E8 / rВычесть упакованные байтовые целые числа со знаком с насыщением
PSUBSW xmm1, xmm2 / m12866 0F E9 / rВычесть упакованные целые слова со знаком с насыщением
PMADDWD xmm1, xmm2 / m12866 0F F5 / rУмножить целые упакованные слова, сложить смежные результаты двойного слова
PSUBUSB xmm1, xmm2 / m12866 0F D8 / rВычесть упакованные байтовые целые числа без знака с насыщением
PSUBUSW xmm1, xmm2 / m12866 0F D9 / rВычесть упакованные целые числа без знака с насыщением
PUNPCKHBW xmm1, xmm2 / m12866 0F 68 / rРаспаковать и чередовать старшие разряды байт
PUNPCKHWD xmm1, xmm2 / m12866 0F 69 / rРаспаковка и чередование слов высокого порядка
PUNPCKHDQ xmm1, xmm2 / m12866 0F 6A / rРаспаковывать и чередовать двойные слова высокого порядка
PUNPCKLBW xmm1, xmm2 / m12866 0F 60 / rЧередовать младшие байты
PUNPCKLWD xmm1, xmm2 / m12866 0F 61 / rЧередование младших слов
PUNPCKLDQ xmm1, xmm2 / m12866 0F 62 / rЧередование низкого уровня -order doublewords
PAVGB xmm1, xmm2 / m12866 0F E0, / rСредние упакованные байтовые целые числа без знака с округлением
PAVGW xmm1, xmm2 / m12866 0F E3 / rСредние упакованные целые числа без знака с округлением
PMINUB xmm1, xmm2 / m12866 0F DA / rСравнить упакованный беззнаковый байт целые числа и сохранить упакованные минимальные значения
PMINSW xmm1, xmm2 / m12866 0F EA / rСравнить упакованные целые числа со знаком и сохранить упакованные минимальные значения
PMAXSW xmm1, xmm2 / m12866 0F EE / rСравнить упакованные целые числа со знаком слова и сохранить максимальные упакованные значения
PMAXUB xmm1, xmm2 / m12866 0F DE / rСравнить упакованные целые байты без знака и сохранить упакованные максимальные значения
PSADBW xmm1, xmm2 / m12866 0F F6 / rВычисляет абсолютные разности упакованных байтов без знака i ntegers; затем 8 малых разностей и 8 высоких разностей суммируются отдельно для получения двух целочисленных результатов со словом без знака
Целочисленные инструкции SSE2 только для регистров SSE

Следующие ниже инструкции могут использоваться только для регистров SSE, поскольку по своей природе они не работают с регистрами MMX

ИнструкцияOpcodeЗначение
MASKMOVDQU xmm1, xmm266 0F F7 / rNon -Временное сохранение выбранных байтов из регистра XMM в память
MOVDQ2Q mm, xmmF2 0F D6 / rПеремещение младшего четверного слова из XMM в регистр MMX.
MOVDQA xmm1, xmm2 / m12866 0F 6F / rПеремещение двойных четырехслово с выравниванием
MOVDQA xmm2 / m128, xmm166 0F 7F / rПереместить выровненное двойное четырехслово
MOVDQU xmm1, xmm2 / m128F3 0F 6F / rПеремещение невыровненного двойного четвертого слова
MOVDQU xmm2 / m128, xmm1F3 0F 7F / rПеремещение невыровненного двойного четвертого слова
MOVQ2DQ xmm, ммF3 0F D6 / rПеремещение четверного слова из MMX в младшее четверное слово регистра XMM
MOVNTDQ m128, xmm166 0F E7 / rСохранение упакованных целых чисел с использованием вневременной подсказки
PSHUFHW xmm1, xmm2 / m128, imm8F3 0F 70 / r ibПеремешать упакованные старшие слова.
PSHUFLW xmm1, xmm2 / m128, imm8F2 0F 70 / r ibПеремешать упакованные младшие слова.
PSHUFD xmm1, xmm2 / m128, imm866 0F 70 / r ibПеремешать упакованные двойные слова.
PSLLDQ xmm1, imm866 0F 73/7 ibПакетный сдвиг влево логических двойных четверных слов.
PSRLDQ xmm1, imm866 0F 73/3 ibОбъединенный сдвиг вправо логических двойных четверных слов.
PUNPCKHQDQ xmm1, xmm2 / m12866 0F 6D / rРаспаковка и чередование четверных слов высокого порядка,
PUNPCKLQDQ xmm1, xmm2 / m12866 0F 6C / rЧередование младших четверных слов,

инструкции SSE3

Добавлено с Pentium 4, поддерживающим SSE3

инструкции с плавающей запятой SSE3 SIMD

ИнструкцияOpcodeMeaningNotes
ADDSUBPS xmm1, xmm2 / m128F2 0F D0 / rДобавить / вычесть значения с плавающей точкой одинарной точностидля сложной арифметики
ADDSUBPD xmm1, xmm2 / m12866 0F D0 / rСложение / вычитание двойной точности с плавающей запятой значения точки
MOVDDUP xmm1, xmm2 / m64F2 0F 12 / rПеремещение значения с плавающей запятой двойной точности и дублирование
MOVSLDUP xmm1, xmm2 / m128F3 0F 12 / rПеремещение и дублирование значений с плавающей запятой одинарной точности с четным индексом
MOVSHDUP xmm1, xmm2 / m128F3 0F 16 / rПеремещение и дублирование нечетного индекса с плавающей точкой одинарной точности int values ​​
HADDPS xmm1, xmm2 / m128F2 0F 7C / rГоризонтальное сложение упакованных значений с плавающей запятой одинарной точностидля графики
HADDPD xmm1, xmm2 / m12866 0F 7C / rГоризонтальное сложение упакованных значений с плавающей запятой двойной точности
HSUBPS xmm1, xmm2 / m128F2 0F 7D / rГоризонтальное вычитание упакованных значений с плавающей запятой одинарной точности
HSUBPD xmm1, xmm2 / m12866 0F 7D / rГоризонтальное вычитание упакованных значений двойной точности значения с плавающей запятой

SSE3 Целочисленные инструкции SIMD

ИнструкцияOpcodeЗначениеПримечания
LDDQU xmm1, memF2 0F F0 / rЗагрузить невыровненные данные и вернуть двойное четверное словоИнструктивно эквивалентно MOVDQU. Для кодирования видео

SSSE3 инструкции

Добавлены с серией Xeon 5100 и начальным Core 2

Были добавлены следующие MMX-подобные инструкции, расширенные до регистров SSE с SSSE3

ИнструкцияOpcodeЗначение
PSIGNB xmm1, xmm2 / m12866 0F 38 08 / rОтрицать / ноль / сохранить упакованные байтовые целые числа в зависимости от соответствующего знака
PSIGNW xmm1, xmm2 / m12866 0F 38 09 / rОтменить / ноль / сохранить упакованные целые слова в зависимости от соответствующего знака
PSIGND xmm1, xmm2 / m12866 0F 38 0A / rОтменить / обнулить / сохранить упакованные целые числа двойного слова в зависимости от соответствующего
PSHUFB xmm1, xmm2 / m12866 0F 38 00 / rПеремешать байты
PMULHRSW xmm1, xmm2 / m12866 0F 38 0B / rУмножить 16-битные слова со знаком, масштаб и круглые подписанные двойные слова, упаковать старшие 16 бит
PMADDUBSW xmm1, xmm2 / m12866 0F 38 04 / rУмножить знаковые и беззнаковые байты, добавить горизонтальный p эфир слов со знаком, упаковка насыщенных слов со знаком
PHSUBW xmm1, xmm2 / m12866 0F 38 05 / rВычесть и упаковать 16-битные целые числа со знаком по горизонтали
PHSUBSW xmm1, xmm2 / m12866 0F 38 07 / rВычесть и упаковать 16-битное целое число со знаком по горизонтали с насыщенностью
PHSUBD xmm1, xmm2 / m12866 0F 38 06 / rВычесть и упаковать 32-битные целые числа со знаком по горизонтали
PHADDSW xmm1, xmm2 / m12866 0F 38 03 / rСложить и упаковать 16-битные целые числа со знаком по горизонтали с насыщенностью
PHADDW xmm1, xmm2 / m12866 0F 38 01 / rСложить и упаковать 16-битные целые числа по горизонтали
PHADDD xmm1, xmm2 / m12866 0F 38 02 / rСложить и упаковать 32-битные целые числа по горизонтали
PALIGNR xmm1, xmm2 / m128, imm866 0F 3A 0F / r ibОбъединить целевые и исходные операнды, извлечь результат, выровненный по байтам, смещенный вправо
PABSB xmm1, xmm2 / m12866 0F 38 1C / rВычислить абсолютное значение по tes и сохранить результат без знака
PABSW xmm1, xmm2 / m12866 0F 38 1D / rВычислить абсолютное значение 16-битных целых чисел и сохранить результат без знака
PABSD xmm1, xmm2 / m12866 0F 38 1E / rВычислить абсолютное значение 32-битных целых чисел и сохранить результат без знака

SSE4 инструкции

SSE4.1

Добавлен Core 2, изготовленный по 45 нм

SSE4.1 SIMD-инструкции с плавающей запятой
ИнструкцияOpcodeЗначение
DPPS xmm1, xmm2 / m128, imm866 0F 3A 40 / r ibВыборочно умножать упакованные значения с плавающей запятой SP, складывать и выборочно сохранять
DPPD xmm1, xmm2 / m128, imm866 0F 3A 41 / r ibВыборочно умножать упакованные значения с плавающей запятой DP, складывать и выборочно сохранять
BLENDPS xmm1, xmm2 / m128, imm866 0F 3A 0C / r ibВыбрать упакованные значения с плавающей запятой одинарной точности из указанной маски
BLENDVPS xmm1, xmm2 / m128, 66 0F 38 14 / rВыбрать p подтвержденные значения с плавающей запятой одинарной точности из указанной маски
BLENDPD xmm1, xmm2 / m128, imm866 0F 3A 0D / r ibВыбрать упакованные значения DP-FP из указанной маски
BLENDVPD xmm1, xmm2 / m128, 66 0F 38 15 / rВыберите упакованные значения DP FP из указанной маски
ROUNDPS xmm1, xmm2 / m128, imm866 0F 3A 08 / r ibКруглые упакованные значения с плавающей запятой одинарной точности
ROUNDSS xmm1, xmm2 / m32, imm866 0F 3A 0A / r ibОкругление значения с плавающей запятой одинарной точности с низкой степенью упаковки
ROUNDPD xmm1, xmm2 / m128, imm866 0F 3A 09 / r ibОкругление упакованных значений с плавающей запятой двойной точности
ROUNDSD xmm1, xmm2 / m64, imm866 0F 3A 0B / r ibОкруглить низкоупакованное значение с плавающей запятой двойной точности
INSERTPS xmm1, xmm2 / m32, imm866 0F 3A 21 / r ibВставить выбранное значение с плавающей запятой одинарной точности в указанный элемент назначения и обнулить элементы назначения
E XTRACTPS reg / m32, xmm1, imm866 0F 3A 17 / r ibИзвлечь одно значение с плавающей запятой одинарной точности по указанному смещению и сохранить результат (с расширением нулями, если применимо)
SSE4.1 Целочисленные инструкции SIMD
ИнструкцияOpcodeЗначение
MPSADBW xmm1, xmm2 / m128, imm866 0F 3A 42 / r ibСуммирует абсолютную 8-битную целочисленную разность соседних групп из 4-х байтовых целых с начальным смещением
PHMINPOSUW xmm1, xmm2 / m12866 0F 38 41 / rНайдите минимальное слово без знака
PMULLD xmm1, xmm2 / m12866 0F 38 40 / rУмножьте упакованные целые числа со знаком двойного слова и сохраните младшие 32 бита
PMULDQ xmm1, xmm2 / m12866 0F 38 28 / rУмножить упакованные целые числа двойного слова со знаком и сохранить результат четверного слова
PBLENDVB xmm1, xmm2 / m128, 66 0F 38 10 / rВыбрать байтовые значения из указанной маски
PBLENDW xmm1, xmm2 / m128, imm866 0F 3A 0E / r ibВыбрать слова из указанной маски sk
PMINSB xmm1, xmm2 / m12866 0F 38 38 / rСравнить упакованные целые байты со знаком
PMINUW xmm1, xmm2 / m12866 0F 38 3A / rСравнить упакованные целые числа без знака
PMINSD xmm1, xmm2 / m12866 0F 38 39 / rСравнить упакованные целые числа двойного слова со знаком
PMINUD xmm1, xmm2 / m12866 0F 38 3B / rСравнить упакованные целые числа двойного слова без знака
PMAXSB xmm1, xmm2 / m12866 0F 38 3C / rСравнить упакованные целые числа в байтах со знаком
PMAXUW xmm1, xmm2 / m12866 0F 38 3E / rСравнить упакованные целые числа без знака со знаком
PMAXSD xmm1, xmm2 / m12866 0F 38 3D / rСравнить упакованные целые числа двойного слова со знаком
PMAXUD xmm1, xmm2 / m12866 0F 38 3F / rСравнить упакованные целые числа двойного слова без знака
PINSRB xmm1, r32 / m8, imm866 0F 3A 20 / r ibВставить байтовое целочисленное значение в указанный элемент назначения
PINSRD xmm1, r / m32, imm866 0F 3A 22 / r ibВставить двойное слово в целочисленное значение в указанном элементе назначения
PINSRQ xmm1, r / m64, imm866 REX.W 0F 3A 22 / r ibВставить целочисленное значение qword в указанный элемент назначения
PEXTRB reg / m8, xmm2, imm866 0F 3A 14 / r ibИзвлечь байтовое целочисленное значение со смещением исходного байта, старшие биты обнуляются.
PEXTRW reg / m16, xmm, imm866 0F 3A 15 / r ibИзвлечь слово и скопировать в младшие 16 бит, с расширением нуля
PEXTRD r / m32, xmm2, imm866 0F 3A 16 / r ibИзвлечь целочисленное значение двойного слова при смещении исходного двойного слова
PEXTRQ r / m64, xmm2, imm866 REX.W 0F 3A 16 / r ibИзвлечь целочисленное значение qword при смещении исходного qword
PMOVSXBW xmm1, xmm2 / m6466 0f 38 20 / rЗнак расширить 8 упакованных 8-битных целых чисел до 8 упакованных 16-битных целых
PMOVZXBW xmm1, xmm2 / m6466 0f 38 30 / rНоль расширить 8 упакованных 8-битных целых чисел до 8 упакованных 16-битных целых чисел
PMOVSXBD xmm1, xmm2 / m3266 0f 38 21 / rЗнак расширить 4 упакованных 8-битных целых до 4 упакованных 32-битных целых
PMOVZXBD xmm1, xmm2 / m3266 0f 38 31 / rНоль расширить 4 упакованных 8-битных целых до 4 упакованных 32-битных целых чисел
PMOVSXBQ xmm1, xmm2 / m1666 0f 38 22 / rЗнак расширить 2 упакованных 8-битных целых до 2 упакованных 64-битных целых
PMOVZXBQ xmm1, xmm2 / m1666 0f 38 32 / rНулевое расширение 2 упакованных 8-битных целых чисел до 2 упакованных 64-битных целых чисел
PMOVSXWD xmm1, xmm2 / m6466 0f 38 23 / rЗнак расширить 4 упакованных 16-битных целых до 4 упакованных 32-битных целых
PMOVZXWD xmm1, xmm2 / m6466 0f 38 33 / rНулевое расширение 4 упакованных 16-битных целых чисел до 4 упакованных 32-битных целых чисел
PMOVSXWQ xmm1, xmm2 / m3266 0f 38 24 / rЗнак расширить 2 упакованных 16-битных целых до 2 упакованных 64-битных целых
PMOVZXWQ xmm1, xmm2 / m3266 0f 38 34 / rНоль расширить 2 упакованных 16-битных целые числа до 2 упакованных 64-битных целых чисел
PMOVSXDQ xmm1, xmm2 / m6466 0f 38 25 / rЗнак расширить 2 упакованных 32-битных целых числа до 2 упакованных 64-битных целых чисел
PMOVZXDQ xmm1, xmm2 / m6466 0f 38 35 / rНоль расширить 2 упакованных 32-битных целых числа до 2 упакованных 64-битных целых чисел
PTEST xmm1, xmm2 / m12866 0F 38 17 / rУстановить ZF, если результат И - все нули, установить CF, если результат И НЕ все 0s
PCMPEQQ xmm1, xmm2 / m12866 0F 38 29 / rСравнить упакованные qword на равенство
PACKUSDW xmm1, xmm2 / m12866 0F 38 2B / rПреобразование 2 × 4 упакованных целых чисел со знаком двойного слова в 8 упакованных целых слов без знака с насыщением
MOVNTDQA xmm1, m12866 0F 38 2A / rПеремещение двойного четверного слова с использованием невременной подсказки, если тип памяти WC

SSE4a

добавлен с процессорами Phenom

  • EXTRQ/INSERTQ
  • MOVNTSD / MOVNTSS

SSE4.2

Добавлен с процессорами Nehalem

ИнструкцияOpcodeЗначение
PCMPESTRI xmm1, xmm2 / m128, imm866 0F 3A 61 / r imm8Упакованное сравнение строковых данных с явной длиной, генерируя индекс
PCMPESTRM xmm1, xmm2 / m128, imm866 0F 3A 60 / r imm8Упакованное сравнение строковых данных с явной длиной, генерируя маску
PCMPISTRI xmm1, xmm2 / m128, imm866 0F 3A 63 / r imm8Упакованное сравнение s строковые данные с неявной длиной, генерируя индекс
PCMPISTRM xmm1, xmm2 / m128, imm866 0F 3A 62 / r imm8Упакованное сравнение строковых данных с неявной длиной, генерируя маска
PCMPGTQ xmm1, xmm2 / m12866 0F 38 37 / rСравнить упакованные q-слова со знаком для большего, чем.

SSE5 производные инструкции

SSE5 был предложенным расширением SSE AMD. В комплект не входил полный набор инструкций Intel SSE4, что делало его конкурентом SSE4, а не преемником. AMD решила не реализовывать SSE5, как предлагалось изначально, однако были представлены производные расширения SSE.

XOP

Представлен с ядром процессора Bulldozer, удален из Zen (микроархитектура) и далее.

Версия большей части набора инструкций SSE5

F16C

Преобразование с плавающей запятой половинной точности.

ИнструкцияЗначение
VCVTPH2PS xmmreg, xmmrm64Преобразование четырех значений с плавающей запятой половинной точности в памяти или нижней половины регистра XMM в четыре значения с плавающей запятой одинарной точности значения в регистре XMM
VCVTPH2PS ymmreg, xmmrm128Преобразование восьми значений с плавающей запятой половинной точности в памяти или в регистре XMM (нижняя половина регистра YMM) в восемь значений с плавающей запятой одинарной точности в регистре YMM
VCVTPS2PH xmmrm64, xmmreg, imm8Преобразование четырех значений с плавающей запятой одинарной точности в регистре XMM в значения с плавающей запятой половинной точности в памяти или нижнюю половину регистра XMM
VCVTPS2PH xmmrm128, ymmreg, imm8Преобразование восьми значений с плавающей запятой одинарной точности в регистре YMM в значения с плавающей запятой половинной точности в памяти или регистре XMM

FMA3

Поддерживается в процессорах AMD, начиная с архитектуры Piledriver, и в Intel, начиная с процессоров Haswell и Broadwell. с 2014 года.

Объединенное умножение-сложение (векторное умножение-накопление с плавающей запятой) с тремя операндами.

ИнструкцияЗначение
VFMADD132PDОбъединенное умножение-сложение упакованных значений с плавающей запятой двойной точности
VFMADD213PDОбъединенное умножение-сложение упакованных Значения с плавающей запятой двойной точности
VFMADD231PDОбъединенное умножение-сложение упакованных значений с плавающей запятой двойной точности
VFMADD132PSОбъединенное умножение-сложение упакованных значений с плавающей запятой одинарной точности -Point Values ​​
VFMADD213PSОбъединенное умножение упакованных значений с плавающей запятой одинарной точности
VFMADD231PSОбъединенное умножение упакованных значений с плавающей запятой одинарной точности
VFMADD132SDОбъединенное умножение-сложение скалярных значений с плавающей запятой двойной точности
VFMADD213SDОбъединенное умножение-сложение скалярных значений с плавающей запятой двойной точности
VFMADD231SDОбъединенное умножение-сложение скалярных значений с плавающей запятой двойной точности
VFMADD132SSОбъединенное умножение-сложение скалярных значений с плавающей запятой одинарной точности
VFMADD213SSОбъединенное умножение - сложение скалярных значений с плавающей запятой одинарной точности
VFMADD231SSОбъединенное умножение - сложение скалярных значений с плавающей запятой одинарной точности
VFMADDSUB132PDОбъединенное умножение с чередованием Сложение / вычитание упакованных значений с плавающей запятой двойной точности
VFMADDSUB213PDОбъединенное умножение-чередование Сложение / вычитание упакованных значений с плавающей запятой двойной точности
VFMADDSUB231PDОбъединенное умножение -Переменное сложение / вычитание упакованных значений с плавающей запятой двойной точности
VFMADDSUB132PSОбъединенное умножение и вычитание упакованных значений с плавающей запятой одинарной точности
VFMADDSUB213PSСложенное умножение-переменное сложение / вычитание упакованных значений с плавающей запятой одинарной точности
VFMADDSUB231PSОбъединенное умноженно-переменное сложение / вычитание упакованных значений с плавающей запятой одинарной точности
VFMSUB132PDОбъединенное умножение-вычитание упакованных значений с плавающей запятой двойной точности
VFMSUB213PDОбъединенное Умножение-вычитание упакованных значений с плавающей запятой двойной точности
VFMSUB231PDОбъединенное умножение-вычитание упакованных значений с плавающей запятой двойной точности
VFMSUB132PSОбъединенное умножение-вычитание Упакованные значения с плавающей запятой одинарной точности
VFMSUB213PSОбъединенное умножение-вычитание упакованных значений с плавающей запятой одинарной точности
VFMSUB231PSОбъединенное умножение-вычитание упакованного одинарного числа Значения с плавающей запятой
VFMSUB132SDОбъединенное умножение-вычитание скалярных значений с плавающей запятой двойной точности
VFMSUB213SDОбъединенное умножение-вычитание скалярных значений с плавающей запятой двойной точности
VFMSUB231SDОбъединенное умножение-вычитание скалярных значений с плавающей запятой двойной точности
VFMSUB132SSОбъединенное умножение-вычитание скалярных значений с плавающей запятой одинарной точности
VFMSUB213SSОбъединенное умножение-вычитание скалярных значений с плавающей запятой одинарной точности
VFMSUB231SSОбъединенное умножение- Вычитание скалярных значений с плавающей запятой одинарной точности
VFMSUBADD132PDОбъединенное умножение с чередованием Вычитание / сложение упакованных значений с плавающей запятой двойной точности
VFMSUBADD213PDОбъединенное несколько чередование Вычитание / сложение упакованных значений с плавающей запятой двойной точности
VFMSUBADD231PDОбъединенное умножение-чередование Вычитание / сложение упакованных значений с плавающей запятой двойной точности
VFMSUBADD132PSОбъединенное умножение -Переменное вычитание / сложение упакованных значений с плавающей запятой одинарной точности
VFMSUBADD213PSОбъединенное многократно-переменное вычитание / сложение упакованных значений с плавающей запятой одинарной точности
VFMSUBADD231PSОбъединенное умножение-чередование упакованных значений с плавающей запятой одинарной точности
VFNMADD132PDОбъединенное отрицательное умножение-сложение упакованных значений с плавающей запятой двойной точности
VFNMADD213PDОбъединенное отрицательное умножение упакованных значений с плавающей запятой двойной точности
VFNMADD231PDОбъединенное отрицательное умножение-сложение упакованных значений с плавающей запятой двойной точности
VFNMADD132PSОбъединенное отрицательное умножение упакованных значений с плавающей запятой одинарной точности
VFNMADD213PSFused Отрицательное умножение - сложение упакованных значений с плавающей запятой одинарной точности
VFNMADD231PSОбъединенное отрицательное умножение - сложение упакованных значений с плавающей запятой одинарной точности
VFNMADD132SDОтрицательное умножение с объединением -Сложение скалярных значений с плавающей запятой двойной точности
VFNMADD213SDОбъединенное отрицательное умножение -Сложение скалярных значений с плавающей запятой двойной точности
VFNMADD231SDПлавное отрицательное умножение-сложение скалярных значений с плавающей запятой второй точности
VFNMADD132SSОбъединенное отрицательное умножение-сложение скалярных значений с плавающей запятой одинарной точности
VFNMADD>
VFNMADD>>Объединенное отрицательное умножение-сложение скаляра Значения с плавающей запятой точной точности
VFNMADD231SSОбъединенное отрицательное умножение-сложение скалярных чисел с плавающей одинарной точностью -Point Values ​​
VFNMSUB132PDОбъединенное отрицательное умножение-вычитание упакованных значений с плавающей запятой двойной точности
VFNMSUB213PDОбъединенное отрицательное умножение-вычитание упакованного числа с плавающей запятой двойной точности Значения
VFNMSUB231PDОбъединенное умножение-вычитание-вычитание значений с плавающей запятой упакованной точности
VFNMSUB132PSОбъединенное отрицательное умножение-вычитание Данные значений с плавающей запятой одинарной точности
VFNMSUB213PSОбъединенное отрицательное умножение-вычитание упакованных значений с плавающей запятой одинарной точностью
VFNMSUB231PSОбъединенное отрицательное умножение-вычитание запятой запятой плавающей одинарной одинарной запятой. точности
VFNMSUB132SDОбъединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой двойной точности
VFNMSUB213SDОбъединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой двойной точности
VFN8>Объединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой двойной точности
VFNMSUB132SSОбъединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой одинарной точностью
248>Объединенное отрицательное умножение- вычитание скалярных значений с плавающей запятой одинарной точности

FMA4

Поддерживается в процессорах AMD, начиная с архитектуры Bulldozer. По состоянию на 2017 год не поддерживается ни одним чипом Intel.

Объединенное умножение-сложение с четырьмя операндами. FMA4 была реализована аппаратно до FMA3.

<215v>Cv4VL01 Wv4VL01 Wv 7E / r / is4
ИнструкцияOpcodeЗначениеПримечания
VFMADDPD xmm0, xmm1, xmm2, xmm3C4E3 WvvvvL01 69 / r / is4Объединенное умножение - сложение упакованных значений с плавающей запятой точности
VFMADDPS xmm0, xmm1, xmm2, xmm3C4E3 WvvvvL01 68 / r / is4Fused Multiply -Добавление значений с плавающей запятой одинарной точности
VFMADDSD xmm0, xmm1, xmm2, xmm3C4E3 WvvvvL01 6B / r / is4Объединенное умножение-сложение скалярной двойной запятой Значения с плавающей
VFMADDSS xmm0, xmm1, xmm2, xmm3C4E3 WvvvvL01 6A / r / is4Объединенное умножение-сложение скалярных чисел с плавающей запятой одинарной точности
VFMADDSUBPD xmm0, xmm2, xmm, xmm2, xmm2C4E3 WvvvvL01 5D / r / is4Объединенное умножение-переменное сложение / вычитание упакованных значений с плавающей запятой двойной точности
VFMADDSUBPS xmm0,, xmm2, xmm3C4E3 WvvvvL01 5C / r / is4Объединенное умножение и чередование сложения / вычитания упакованных значений с плавающей запятой одинарной точности
VFMSUBADDPD xmm0, xmm1, xmm2, xmm3C4E3 WvvvvL01 5F / r / is4Объединенное множительно-чередующееся вычитание / сложение упакованных значений с плавающей запятой двойной точности
VFMSUBADDPS1 xmm0,, xmm2, xmm3C4E3 WvvvvL01 / is 5Объединенное многократно-переменное вычитание / сложение упакованных значений с плавающей запятой одинарной точности
VFMSUBPD xmm0, xmm1, xmm2, xmm3C4E3 WvvvvL01 6D / r / is4Объединенное умножение-вычитание упакованных значений с плавающей запятой точности
VFMSUBPS xmm0, xmm1, xmm2, xmm3C4E3 WvvvvL01 6C / r / is4Объединенное умножение-вычитание упакованных с плавающей запятой одинарной точности
VFMSUBSD xmm0, xmm1, xmm2, xmm3C4E3 WvvvvL01 6F / r / is4объединенное умножение-вычитание скалярных значений с плавающей запятой двойной точности
VFMSUBSS xmm0, xmm1, xmm2, xmm3C4E3 WvvvvL01 6E / r / is4Fused Multiply -Вычет из скалярных значений с плавающей запятой одинарной точности
VFNMADDPD xmm0, xmm1, xmm2, xmm3C4E3 Wvv vvL01 79 / r / is4Объединенное отрицательное умножение - сложное запятой с плавающей двойной двойной величиной. точности
VFNMADDPS xmm0, xmm1, xmm2, xmm3C4E3 WvvvvL01 78 / r / is4Объединенное отрицательное умножение упакованных значений с плавающей запятой одинарной точностью
VFNMADDSD xmm0, x, xmm3C4E3 WvvvvL01 7B / r / is4Сложенное отрицательное умножение-сложение скалярных значений с плавающей запятой двойной точности
VFNMADDSS xmm0, xmm1, xmm2, xmm3C4E3 WvvvvL01 7A / r / is4Сложенное отрицательное умножение-сложение Скалярные значения с плавающей запятой одинарной то чности
VFNMSUBPD xmm0, xmm1, xmm2, xmm3C4E3 WvvvvL01 7D / r / is4Объединенное отрицательное умножение-вычитание упакованного числа с плавающей запятой двойной точности- Значения точек
VFNMSUBPD xmm0, xmm1, xmm2, xmm3C4E3 WvvvvL01 7C / r / is4Объединенное отрицательное умножение-вычитание упакованных данных с плавающей запятой одинарной точностью
VFNMSUBSD xmm0, xmm1, C4E3 WvvvvL01 7F / r / is4Объединенный отрицательный множитель y-вычитание скалярных значений с плавающей запятой двойной точности
VFNMSUBSS xmm0, xmm1, xmm2, xmm3Объединенное отрицательное умножение-вычитание скалярного одиночного -Точные значения с плавающей запятой

AVX

AVX были впервые поддержаны Intel с Sandy Bridge и AMD с Bulldozer.

столкновения с 256-битными регистрами.

ИнструкцияОписание
VBROADCASTSSКопирование 32-битного, 64-битного или 128-битного операнда памяти во всех элементах системы регистра XMM или YMM.
VBROADCASTSD
VBROADCASTF128
VINSERTF128Заменяет нижнюю или верхнюю половину 256-битного регистратора YMM размером 128-битного исходного операнда. Другая половина пункта назначения не изменилась.
VEXTRACTF128Извлекает нижнюю или верхнюю половину 256-битного регистра YMM и копирует значение в 128-битный целевой операнд.
VMASKMOVPSУсловно считывает любое количество элементов из операнда векторной памяти SIMD в назначении, оставляя остальные элементы вектора непрочитанными и устанавливающими соответствующие элементы в регистре назначения на ноль. В качестве альтернативы, условно записывает любое количество элементов из операнда регистратора SIMD в первый операнд памяти, оставляя оставшиеся элементы операнда сохранить другими. В процессоре процессора AMD Jaguar эта инструкция с операндом устройства памяти занимает более 300 тактовых циклов. Похоже, это недостаток дизайна.
ВМАСКМОВПД
ВПЕРМИЛПСПерестановка на полосе движения. Перемешайте 32-битные или 64-битные элементы одного входного опда. Это внутренние 256-битные инструкции, что означает, что они работают со всеми 256-битами с двумя отдельными 128-битными перетасовками, поэтому они не могут перетасовывать 128-битные дорожки.
VPERMILPD
VPERM2F128Перемешать четыре 128-битных векторных элемента двух 256-битных исходных операндов в 256-битный целевой операнд с непосредственной константой в качестве селектора.
VZEROALLОбнулить все регистры YMM и пометить их как неиспользуемые. Используется при переключении между 128-битным использованием и 256-битным использованием.
VZEROUPPERУстановить верхнюю половину всех регистров YMM на ноль. Используется при переключении между 128-битным использованием и 256-битным использованием.

AVX2

Представлено в микроархитектуре Intel Haswell и AMD Excavator.

Расширение международных целочисленных инструкций SSE и AVX до 256 бит

ИнструкцияОписание
VBROADCASTSSКопирование 32-битного или 64-битного регистрового операнда во все элементы регистра XMM или YMM. Это регистровые версии тех же инструкций в AVX1. Однако 128-битной версии нет, но тот же эффект может быть просто достигнут с помощью VINSERTF128.
VBROADCASTSD
VPBROADCASTBСкопируйте 8-, 16-, 32- или 64-разрядный целочисленный регистр или операнд памяти во всех элементах регистра XMM или YMM.
VPBROADCASTW
VPBROADCASTD
VPBROADCASTQ
VBROADCASTI128Копировать 128-битный операнд памяти во всех элементах регистратора YMM.
VINSERTI128Заменяет нижнюю или верхнюю половину 256-битного регистра YMM значения 128-битного исходного операнда. Другая половина пункта назначения не изменилась.
VEXTRACTI128Извлекает нижнюю или верхнюю половину 256-битного регистра YMM и копирует значение в 128-битный целевой операнд.
VGATHERDPDСобирает значения с плавающей запятой одинарной или точности, используя 32- или 64-битные индексы и масштаб.
VGATHERQPD
VGATHERDPS
VGATHERQPS
VPGATHERDDСобирает 32- или 64-разрядные целочисленные значения с использованием 32- или 64-разрядных индексов и масштабирования.
VPGATHERDQ
VPGATHERQD
VPGATHERQQ
VPMASKMOVDУсловно считывает любое количество элементов из операнда векторной SIMD назначения в регистр назначения, оставляя остальные элементы назначения непрочитанными и устанавливающими память до соответствующих элементов в регистре нуля. В качестве альтернативы, условно записывает любое количество элементов из операнда регистратора SIMD в операнд векторной памяти, оставляя остальные элементы операнда неизменными.
VPMASKMOVQ
VPERMPSПеремешать восемь 32-битных векторных элементов одного 256-битного исходного операнда в 256-битный вызов операнда с регистром или операндом памяти в качестве селектора.
VPERMD
VPERMPDПеремешать четыре 64-битных элемента одного 256-битного источника памяти операнда в 256-битный целевой операнд, используя регистр или операнд в качестве селектора.
VPERMQ
VPERM2I128Перемешать (два из) четырех 128-битных векторных элементов двух 256-битных исходных операндов в 256-битный операнд назначения с непосредственной константой в качестве селектора.
VPBLENDDДвойное слово, немедленная версия инструкций PBLEND из SSE4.
VPSLLVDСдвиг влево логический. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом.
VPSLLVQ
VPSRLVDСдвиг вправо логический. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом.
VPSRLVQ
VPSRAVDСдвиг вправо арифметически. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом.

AVX-512

Представлено в Intel Xeon Phi x20053>

Векторные операции с 512-битными регистрами.

AVX-512 foundation

ИнструкцияОписание
VBLENDMPDСмешивание векторов float64 с использованием управления opmask
VBLENDMPSСмешивание векторов float32 с использованием управления opmask
VPBLENDMDСмешайте форму int32 с помощью управления opmask
VPBLENDMQСмешайте образов int64 с помощью управления opmask
VPCMPDчерез знаковые / беззнаковые двойные слова в маску
VPCMPUD
VPCMPQэлектрические четверные слова со знаком / без знака в маску
VPCMPUQ
VPTESTMDЛогическое И и рав маску для 32- или 64-битных целых чисел.
VPTESTMQ
VPTESTNMDЛогическая И-НЕ и установка маски для 32- или 64-битных целых чисел.
VPTESTNMQ
VCOMPRESSPDСохранение разреженно упакованных значений с плавающей запятой двойной / одинарной точности в плотной
VCOMPRESSPS
VPCOMPRESSDСохранение разреженно упакованных целых чисел двойного / четвертого слова значения в плотную память / регистр
VPCOMPRESSQ
VEXPANDPDЗагрузить разреженные упакованные значения с плавающей запятой двойной / одинарной точности из плотной памяти
VEXPANDPS
VPEXPANDDЗагрузить разреженные упакованные целочисленные значения двойного слова / четверного слова из плотной памяти / регистра
VPEXPANDQ
VPERMI2PDПолная перестановка одинарной / двойной плавающей точки, перезаписывающая индекс.
VPERMI2PS
VPERMI2DПолная перестановка двойного / четверного слова с перезаписью индекс.
VPERMI2Q
VPERMT2PSПолная перестановка с одинарной / двойной плавающей запятой, перезапись первого источника.
VPERMT2PD
VPERMT2DПолная перестановка двойного / четверного слова с перезаписью первого источника.
VPERMT2Q
VSHUFF32x4Перемешать четыре упакованных 128-битных строки.
VSHUFF64x2
VSHUFFI32x4
VSHUFFI64x2
VPTERNLOGDПобитовая троичная логика
VPTERNLOGQ
VPMOVQDПонижающее преобразование четверного слова или двойного слова в двойное слово ; ненасыщенный, насыщенный или насыщенный без знака. Инструкции, противоположные знаку / нулю, расширяют из SSE4.1.
VPMOVSQD
VPMOVUSQD
VPMOVQW
VPMOVSQW
VPMOVUSQW
VPMOVQB
VPMOVSQB
VPMOVUSQB>VPMOVDW
VPMOVSDW
VPMOVUSDW
VPMOVDB
VPMOVSDB
VPMOVUSDB
VCVTPS2UDQПреобразование с усечением или без усечения, упакованное слово с плавающей запятой одинарной или двойной точности с плавающей запятой двойной точности в упакованное неподписанное слово без знака целые числа.
VCVTPD2UDQ
VCVTTPS2UDQ
VCVTTPD2UDQ
VCVTSS2USIПреобразование скалярного числа с плавающей запятой одиночной или двойной точности в беззнаковое целое двойное слово с усечением или без него.
VCVTSD2USI
VCVTTSS2USI
VCVTTSD2USI
VCVTUDQ2PSПреобразование упакованных целых чисел двойного слова без знака в упакованные числа с плавающей запятой одинарной или двойной точности.
VCVTUDQ2PD
VCVTUSI2PSПреобразование скалярных целых чисел двойного слова без знака в числа с плавающей запятой одинарной или двойной точности.
VCVTUSI2PD
VCVTUSI2SDПреобразование скалярных целых чисел без знака в числа с плавающей запятой одинарной или двойной точности.
VCVTUSI2SS
VCVTQQ2PDПреобразование упакованных целых четверных слов в упакованные числа с плавающей запятой одинарной или двойной точности.
VCVTQQ2PS
VGETEXPPDПреобразовать экспоненты упакованных значений fp в значения fp
VGETEXPPS
VGETEXPSDПреобразовать показатель степени скалярного значения fp в fp value
VGETEXPSS
VGETMANTPDИзвлечь вектор нормализованных мантисс из вектора float32 / float64
VGETMANTPS
VGETMANTSDИзвлечь float32 / float64 из нормализованного мантисс из скаляра float32 / float64
VGETMANTSS
VFIXUPIMMPDИсправить специальные упакованные значения float32 / float64
VFIXUPIMMPS
VFIXUPIMMSDИсправить специальный скаляр float32 / значение float64
VFIXUPIMMSS
VRCP14PDВычисление приблизительных обратных величин упакованных значений float32 / float64
VRCP14PS
VRCP14SDВычисление приблизительных обратных величин скалярного значения float32 / float64
VRCP14SS
VRNDSCALEPSОкругление упакованных значений float32 / float64 для включения заданного количества дробных битов
VRNDSCALEPD
VRNDSCALESSОкругление скалярных чисел с плавающей запятой32 / float 64 для включения заданного числа дробных битов
VRNDSCALESD
VRSQRT14PDВычисление приблизительных обратных величин квадратных корней упакованных значений с плавающей запятой 32 / с плавающей запятой 64
VRSQRT14PS
VRSQRT14SDВычислить приблизительное значение, обратное квадратному корню из скалярного значения float32 / float64
VRSQRT14SS
VSCALEFPSМасштабировать упакованные значения float32 / float64 со значениями float32 / float64
VSCALEFPD
VSCALEFSSМасштабировать скалярное значение float32 / float64 с помощью значения float32 / float64
VSCALEFSD
VALIGNDВыровнять векторы двойного или четверного слова
VALIGNQ
VPABSQУпакованное четверное слово абсолютного значения
VPMAXSQМаксимум упакованного четырехслова со знаком / без знака
VPMAXUQ
VPMINSQМинимум упакованного четырехслова со знаком / без знака
VPMINUQ
VPROLDБит повернуть влево или вправо
VPROLVD
VPROLQ
VPROLVQ
VPRORD
VPRORVD
VPRORQ
VPRORVQ
VPSCATTERDDДвойное / четырехслово с разбросом w i-е индексы двойного слова и четверного слова со знаком
VPSCATTERDQ
VPSCATTERQD
VPSCATTERQQ
VSCATTERDPSУпакованные с разбросом числа с плавающей запятой 32 / float64 с индексами двойного слова и четвертого слова со знаком
VSCATTERDPD41
VSCATTERDPD41
>VSCATTERQPD
Криптографические инструкции

Инструкции Intel AES

6 новых инструкций.

ИнструкцияОписание
AESENCВыполнить один цикл потока шифрования AES
AESENCLASTВыполнить последний цикл поток шифрования AES
AESDECВыполнение одного цикла потока дешифрования AES
AESDECLASTВыполнение последнего цикла потока дешифрования AES
AESKEYGENASSISTПомощь в создании ключей цикла AES
AESIMCПомощь в столбцах обратного смешивания AES

RDRAND и RDSEED

ИнструкцияОписание
RDRANDЧтение случайного числа
RDSEEDЧтение случайного числа

инструкций Intel SHA

7 новых инструкций.

ИнструкцияОписание
SHA1RNDS4Выполнение четырех циклов операции SHA1
SHA1NEXTEВычисление состояний SHA1 E после четырех циклов
SHA1MSG1Выполнить промежуточное вычисление для следующих двух слов сообщения SHA1
SHA1MSG2Выполнить окончательное вычисление для следующих четырех двух слов сообщениями SHA1
SHA256RNDS2Выполнить два раунда операции SHA256
SHA256MSG1ите промежуточное вычисление для следующих четырех слов сообщениями SHA256
SHA256MSG2Выполните окончательное вычисление для следующих четырех слов сообщениями SHA256
Недокументированные инструкции

Неданные инструкции x86

ЦП x86 содержит недокументированные инструкции, которые реализованы в некоторых официальных документах. Их можно найти в различных источниках в Интернете, таких как Список прерываний Ральфа Брауна и на sandpile.org

МнемоникаКод операцииОписаниеСтатус
AAM imm8D4 imm8Разделите AL на imm8, поместите частное в AH, а остаток в ALДоступно, начиная с 8086, задокументированный начиная с Pentium (в более ранней документации аргументы не указаны)
AAD imm8D5 imm8Умножение аналога AAMДоступно, начиная с 8086, задокументировано, начиная с с Pentium (в более ранней документации не указаны аргументы)
SALCD6Установить AL в зависимости от значений флага переноса (1-байтовая альтернатива SBB AL, AL)Доступно, начиная с 8086, но задокументировано только начиная с Pentium Pro.
ICEBPF1Однобайтное одношаговое исключение / Invoke ICE Доступно, начиная с 80386, задокументировано (как INT1), начиная с Pentium Pro
Неизвестная мнемоника0F 04Точная цель неизвестна, вызывает зависание ЦП (HCF ). Единственный выход - сброс процессора.

В некоторых реализациях эмулируется через BIOS как последовательность Halting.

В сообщение на форуме Vintage Computing Federation, эта инструкция объясняется как СОХРАНИТЬ. Он взаимодействует с режимом ICE.

Доступно только на 80286
LOADALL 0F 05Загружает все регистры из адреса памяти 0x000800HДоступно только на 80286
LOADALLD 0F 07Загружает все регистры из адреса памяти ES: EDIДоступно только на 80386
UD10F B9намеренно неопределенная инструкция, но в отличие от UD2 это была не опубликовано
ALTINST 0F 3FПереход и выполнение инструкций в недокументированном альтернативном наборе инструкций.Доступно только на некоторых процессорах x86 производства VIA Technologies.

Недокументированное Инструкции x87

FFREEP выполняет FFREE ST (i) и извлекает стек

См. также
Ссылки
Внешние ссылки
В Wikibook x86 Assembly есть страница на тему: X86 Instructions
Последняя правка сделана 2021-06-22 06:10:52
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте