Набор инструкций x86 относится к набор инструкций, которые поддерживают x86 -совместимые микропроцессоры. Инструкции обычно являются частью исполняемой программы, часто сохраняются в виде компьютерного файла и выполняются на процессоре.
Набор команд x86 был расширен несколько раз, в него были добавлены более широкие регистры и типы данных, а также новые функциональные возможности.
Это полный набор инструкций Intel 8086/8088. Большинство, если не все эти инструкции доступны в 32-битном режиме; они просто работают с 32-битными регистрами (eax, ebx и т. д.) и значениями вместо их 16-битных (ax, bxи т. д.) аналогов. См. Также язык ассемблера x86 для быстрого ознакомления с этим семейством процессоров. Обновленный набор команд также сгруппирован в соответствии с архитектурой (i386, i486, i686 ) и в более общем смысле обозначается как x86 32 и x86 64 (также известный как AMD64 ).
Инструкция | Значение | Примечания | Код операции |
---|---|---|---|
AAA | ASCII настроить AL после сложения | используется с распакованным двоично-десятичным кодированием | 0x37 |
AAD | ASCII настроить AX перед делением | 8086/8088 В таблице данных указана только базовая версия 10 инструкции AAD (opcode 0xD5 0x0A), но любая другая база будет работать. Более поздняя документация Intel также имеет общий вид. NEC V20 и V30 (и, возможно, другие процессоры NEC серии V) всегда используют основание 10 и игнорируют аргумент, вызывая ряд несовместимостей | 0xD5 |
AAM | ASCII регулируют AX после умножение | Документирована только версия с основанием 10 (операнд 0xA), см. примечания для AAD | 0xD4 |
AAS | ASCII 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 | Уменьшение на 1 | 0x48… 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 / m | 0x69, 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 | Увеличение на 1 | 0x40… 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 | Загрузить ФЛАГИ в регистр AH | 0x9F | |
LDS | Загрузить указатель с использованием DS | 0xC5 | |
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 |
MOV | Move | копирует данные из одного места в другое, (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, EAX | 0x90 |
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 |
POPF | Pop Регистр 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 в FLAGS | 0x9E | |
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 доступно через недокументированную инструкцию SALC | 0x18… 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 |
WAIT | Wait пока не занят | Ожидает, пока вывод 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 |
Instruction | Meaning | Notes |
---|---|---|
BOUND | Проверить индекс массива по границам | вызывает программное прерывание 5, если t est fails |
ENTER | Enter 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 |
Инструкция | Значение | Примечания |
---|---|---|
ARPL | Настроить поле RPL селектора | |
CLTS | Очистить флаг переключения задачи в регистре CR0 | |
LAR | Загрузить байт прав доступа | |
LGDT | Загрузить глобальную таблицу дескрипторов | |
LIDT | Загрузить таблицу дескрипторов прерываний | |
LLDT | Загрузить локальную таблицу дескрипторов | |
LMSW | Загрузить статус машины s word | |
LOADALL | Загрузить все регистры ЦП, включая внутренние, такие как GDT | Недокументированные, только 80286 и 80386 |
LSL | Предел сегмента загрузки | |
LTR | Загрузить регистр задачи | |
SGDT | Сохранить глобальную таблицу дескрипторов | |
SIDT | Сохранить таблицу дескрипторов прерываний | |
SLDT | Сохранить локальную таблицу дескрипторов | |
SMSW | Сохранить слово состояния аппарата | |
STR | Сохранить регистр задач | |
VERR | Проверить сегмент для чтения | |
VERW | Проверить сегмент для записи |
Instruction | Meaning | Notes |
---|---|---|
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 |
STOSD | Store строковое двойное слово | * ES: EDI ± ± = EAX; (± ± зависит от DF, ES не может быть заменен); может иметь префикс REP |
XBTS | Извлечь битовую строку | Прекращено с шагом B1 80386 |
Инструкция | Значение | Примечания |
---|---|---|
BSWAP | Обмен байтами | r = r <<24 | r<<80x00FF0000 | r>>8 0x0000FF00 | r>>24; Определено только для 32-битных регистров. Обычно используется для переключения между прямым порядком байтов и прямым порядком байтов. При использовании с 16-битными регистрами дает разные результаты на 486, 586 и бочах /QEMU. |
CMPXCHG | атомарных CoMPare и eXCHanGe | См. Сравнение и замена / на более поздних версиях 80386 в недокументированном коде операции |
INVD | Недействительность внутренней кешей | Очистить внутренние кеши |
INVLPG | Invalidate TLB Entry | Invalidate TLB Entry для страницы, которая содержит элементы данных |
WBINVD | Write Back и Invalidate Cache | Записывает обратно все измененные строки кэша во внутреннем кэше процессора в основную память и делают недействительные внутренние кеши. |
XADD | eXchange and ADD | Меняет первый операнд на второй, затем загружает сумму двух значений в операнд-адресат. |
Инструкция | Смысл | Примечания |
---|---|---|
CPUID | Идентификация процессора | Возвращает данные, соответствующие идентификации процессора и его функции, и возвращает данные в регистры EAX, EBX, ECX и EDX. Функции инструкций, основы в регистре EAX. Это также было добавлено к более поздним процессорам 80486 |
CMPXCHG8B | CoMPare и 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) |
Инструкция | Значение | Примечания |
---|---|---|
Прочтите PMC [счетчик мониторинга производительности] | Указано в регистре ECX в регистрах EDX: EAX |
Также были добавлены регистры MMX и инструкции поддержки MMX. Их можно использовать как для операций с целыми числами, так и для операций с плавающей запятой, см. Ниже.
Инструкция | Значение | Примечания |
---|---|---|
SYSCALL | функционально эквивалентны SYSENTER | |
SYSRET | эквивалент SYSEXIT |
AMD изменила определение битов CPUID для этой функции с K6-II.
Инструкция | Значение | Примечания |
---|---|---|
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 | Неопределенная инструкция | Создает недопустимый код операции. Эта инструкция для программного обеспечения для явной генерации недопустимого кода операции. Код операции для этой инструкции зарезервирован для этой цели. |
Инструкция | Значение | Примечания |
---|---|---|
SYSENTER | Вызов SYStem ENTER | Иногда вызывается Инструкция Fast System Call, эта инструкция была для увеличения производительности операционной системы. Обратите внимание, что на Pentium Pro инструкция CPUID неверно сообщает об этих инструкциях как о доступных. |
SYSEXIT | SYStem call EXIT |
Инструкции | Opcode | Значение | Примечания |
---|---|---|---|
NOP r / m16 | 0F 1F / 0 | Многобайтовая инструкция отсутствия операции. | |
NOP r / m32 | |||
PREFETCHT0 | 0F 18/1 | Предварительная выборка данных с адреса | Предварительная выборка на всех уровнях кэша |
PREFETCHT1 | 0F 18/2 | Предварительная выборка данных с адреса | Предварительная выборка на всех уровнях кэша, ЗА ИСКЛЮЧЕНИЕМ L1 |
PREFETCHT2 | 0F 18/3 | Предварительная выборка данных с адреса | Предварительная выборка на всех уровнях кеша, КРОМЕ L1 и L2 |
PREFETCHNTA | 0F 18/0 | Предварительная выборка данных из адреса | Предварительный выбор во вневременную устойчивость кеша, минимизируя загрязнение кеша. |
SFENCE | 0F AE F8 | Store Fence | Подсказка процессора, чтобы убедиться, что все операции хранилища имеют место до вызова SFENCE, видны глобально |
Инструкцией | Opcode | Значение | При Примечания |
---|---|---|---|
CLFLUSH m8 | 0F AE / 7 | Cache Line Flush | Делает недействительную строку кэша, которая содержит линейный адрес, собственный в исходном операнде со всех уровней иерархии кэша процессора |
LFENCE | 0F AE E8 | Load Fence | Сериализует операции загрузки. |
MFENCE | 0F AE F0 | Memory Fence | Выполняет операцию сериализации для всех инструкций внедрения и сохранения, которые были выданы до инструкции MFENCE. |
MOVNTI m32, r32 | 0F C3 / r | Переместить двойное слово Non-Temporal | Переместить двойное слово из r32 в m32, минимизируя загрязнение в иерархии кеша. |
PAUSE | F3 90 | Подсказка Spin Loop | Дает подсказку процессу, что следующий код является циклом вращения, для кэшируемости |
Инструкция | Значение | Примечания |
---|---|---|
MONITOR EAX, ECX, EDX | Настройка адреса монитора | Устанавливает линейный диапазон адресов, который будет контролируется аппаратно и активирует монитор. |
MWAIT EAX, ECX | Мониторинг ожидания | Подсказка процессора для остановки выполнения инструкции и перехода в зависимое от реализации оптимизированное состояние до возникновения класса событий. |
, инструкция | Код операции | Значение | Примечания |
---|---|---|---|
CRC32 r32, r / m8 | F2 0F 38 F0 / r | Accumulate CRC32 | Вычисляет значение CRC с использованием полинома CRC-32C (Кастаньоли) 0x11EDC6F41 (нормальная форма 0x1EDC6F41). Это полином, используемое в iSCSI. В отличие от более популярного используемого в Ethernet, его четкость является четной, и поэтому он может обнаруживать любую ошибку с нечетным числом измененных битов. |
CRC32 r32, r / m8 | F2 REX 0F 38 F0 / r | ||
CRC32 r32, r / m16 | F2 0F 38 F1 / r | ||
CRC32 r32, r / m32 | F2 0F 38 F1 / r | ||
CRC32 r64, r / m8 | F2 REX.W 0F 38 F0 / r | ||
CRC32 r64, r / m64 | F2 REX.W 0F 38 F1 / r | ||
CRC32 r32, r / m8 | F2 0F 38 F0 / r |
Инструкция | Значение | Примечания |
---|---|---|
CDQE | Знак расширить EAX в RAX | |
CQO | Знак расширить RAX в RDX: RAX | |
CMPSQ | CoMPare String Quadword | |
CMPXCHG16B | CoMPare and EXCHANGE 16 байтов | |
IRETQ | 64-битный возврат из прерывания | |
JRCXZ | Перейти, если RCX равен нулю | |
LODSQ | LoaD String Quadword | |
MOVSXD | MOV with Sign Extend 32-bit to 64-bit | |
POPFQ | POP RFLAGS Регистр | |
PUSHFQ | PUSH RFLAGS Register | |
RDTSCP | ReaD Time Stamp Counter and Processor ID | |
SCASQ | SCAn String Quadword | |
STOSQ | STOre String Quadword | |
SWAPGS | Обменять базу GS с KernelGSBase MSR |
Instruction | Значение | Примечания | Код операции |
---|---|---|---|
CLGI | Очистить Глобальный Флаг прерывания | Очищает GIF | 0x0F 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 | Используется исключительно для связи с VMM | 0x0F 0x01 0xD9 |
VMRUN | Запуск машины | Выполняет переключение на гостевую ОС. | 0x0F 0x01 0xD8 |
VMSAVE | Сохранить состояние в VMCB | Сохраняет дополнительное гостевое состояние в VMCB. | 0x0F 0x01 0xDB |
Инструкция | Значение | Примечания | Код операции |
---|---|---|---|
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 | Очистить управление виртуальной машиной | Записывает любые кэшированные данные в VMCS | 0x66 0x0F 0xC7 / 6 |
VMREAD | Чтение поля из структуры управления виртуальной машины | Считывает поле в VMCS | 0x0F 0x78 |
VMWRITE | Запись поля в перенастройке управления данной машиной | Изменяет поле в VMCS | 0x0F 0x79 |
VMCALL | Call to VM Monitor | Вызов функции VM Monitor из гостевой системы | 0x0F 0x01 0xC1 |
VMLAUNCH | Запуск виртуальной машины | Запуск виртуальной машины под управлением текущей VMCS | 0x0F 0x01 0xC2 |
VMRESUME | возобновить виртуальную машину | возобновить виртуальную машину под управлением текущей виртуальной машины VMCS | 0x0F 0x01 0xC3 |
VMXOFF | Оставить операцию VMX | Останавливает аппаратно поддерживаемую среду виртуализации | 0x0F 0x01 0xC4 |
VMXON | E nter VMX Operation | Вход в среду виртуализации аппаратной системы поддержки | 0xF3 0x0F 0xC7 / 6 |
LZCNT, POPCNT (POPulation CouNT) - расширенное управление битами
ANDN, BEXTR, BLSI, BLSMSK, BLSR, TZCNT
BZHI, MULX, PDEP, PEXT, RORX, SARX, SHRX, SHLX
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) |
Инструкция | Код операции | Описание |
---|---|---|
PCLMULQDQ xmmreg, xmmrm, imm | 66 0f 3a 44 / r ib | Произвести умножение без переноса двух 64-битных многочленов надконечное поле GF (2). |
PCLMULLQLQDQ xmmreg, xmmrm | 66 0f 3a 44 / r 00 | Умножение младших половин двух регистров. |
PCLMULHQLQDQ xmmreg, xmmrm | 66 0f 3a 44 / r 01 | Умножьте старшую половину регистра назначения на младшую половину исходного регистра. |
PCLMULLQHQDQ xmmreg, xmmrm | 66 0f 3a 44 / r 10 | Умножьте младшую половину регистра назначения на старшую половину исходного регистра. |
PCLMULHQHQDQ xmmreg, xmmrm | 66 0f 3a 44 / r 11 | Умножение старших половин двух регистров. |
Инструкция | Описание |
---|---|
ADCX | Добавляет два целых числа без знака плюс перенос, считывание переноса из флага переноса и, при необходимости, его установка там. Не влияет на другие флаги, кроме переноса. |
ADOX | Добавляет два целых числа без знака плюс перенос, считывая перенос из флага переполнения и при необходимости устанавливая его там. Не влияет на другие флаги, кроме переполнения. |
Инструкция | Значение | Примечания |
---|---|---|
F2XM1 | точнее, чем для x, близкого к нулю | |
FABS | Абсолютное значение | |
FADD | Добавить | |
FADDP | Добавить и извлечь | |
FBLD | Загрузить BCD | |
FBSTP | Сохранить BCD и извлечь | |
FCHS | Изменить знак | |
FCLEX | Очистить исключения | |
FCOM | Сравнить | |
FCOMP | Сравнить и извлечь | |
FCOMPP | Сравнить и извлечь дважды | |
FDECSTP | Уменьшить указатель стека с плавающей запятой | |
FDISI | Отключить прерывания | только 8087, иначе FNOP |
FDIV | Divide | Ошибка Pentium FDIV |
FDIVP | Divide and pop | |
FDIVR | Divide реверсивный | |
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 | Извлечь экспоненту и мантиссу | |
FYL2X | y · log 2x | , если y = log b 2, то основание -b вычисляется логарифм |
FYL2XP1 | y · log 2 (x + 1) | точнее, чем log 2 z, если x близко к нулю |
Инструкция | Значение | Примечания |
---|---|---|
FSETPM | Установить защищенный режим | только для 80287, иначе FNOP |
Инструкция | Значение | Примечания |
---|---|---|
FCOS | Косинус | |
ФЛДЭНВД | Загрузить состояние среды, 32-бит | |
FSAVED | Сохранить состояние FPU, 32-бит | |
FPREM1 | Частичный остаток | Вычислить s Остаток IEEE |
FRSTORD | Восстановление сохраненного состояния, 32-битное | |
FSIN | Синус | |
FSINCOS | Синус и косинус | |
FSTENVD | Сохранить среду FPU, 32-разрядную | |
FUCOM | Неупорядоченное сравнение | |
FUCOMP | Неупорядоченное сравнение и извлечение | |
FUCOMPP | Неупорядоченное сравнение и pop two |
FXRSTOR, FXSAVE
Они также поддерживаются более поздних Pentium II, которые не содержат поддержки SSE
FISTTP (преобразование x87 в целое с усечением, независимо от слова состояния)
инструкции MMX работают с регистрами mm, которые составляют 64 бит шириной. Они используются совместно с регистрами FPU.
Добавлены с Pentium MMX
Инструкция | Код операции | Значение | Примечания |
---|---|---|---|
EMMS | 0F 77 | Пустое состояние технологии MMX | Помечает все регистры x87 FPU для использования FPU |
MOVD mm, r / m32 | 0F 6E / r | Перемещение двойного слова | |
MOVD r / m32, мм | 0F 7E / r | Перемещение двойного слова | |
MOVQ мм / м64, мм | 0F 7F / r | Перемещение четверного слова | |
MOVQ мм, мм / м64 | 0F 6F / r | Перемещение четверного слова | |
MOVQ мм, r / m64 | REX.W + 0F 6E / r | Переместить четверное слово | |
MOVQ r / m64, мм | REX.W + 0F 7E / r | Переместить четверное слово | |
PACKSSDW мм1, мм2 / м64 | 0F 6B / r | Упаковать двойные слова в слова (подписанные с насыщенностью) | |
PACKSSWB мм1, мм2 / м64 | 0F 63 / r | Упаковать слова в байты (подписанные с насыщением) | |
PACKUSWB мм, мм / м64 | 0F 67 / r | Упаковать слова в байтов (без знака с насыщением) | |
PADDB мм, мм / м64 | 0F FC / r | Добавить упакованное целое число байтов gers | |
PADDW мм, мм / м64 | 0F FD / r | Добавить сжатые целые слова | |
PADDD мм, мм / м64 | 0F FE / r | Добавить упакованные целые числа с двойным словом | |
PADDQ мм, мм / м64 | 0F D4 / r | Добавить упакованные целые числа с двойным словом | |
PADDSB мм, мм / м64 | 0F EC / r | Добавить упакованные целые числа в байтах со знаком и насыщение | |
PADDSW мм, мм / м64 | 0F ED / r | Добавить упакованные целые числа со словами со знаком и насыщать | |
PADDUSB мм, мм / м64 | 0F DC / r | Добавить упакованные байтовые целые числа без знака и насыщать | |
PADDUSW мм, мм / м64 | 0F DD / r | Добавить упакованные целые числа без знака и насыщение | |
PAND мм, мм / м64 | 0F DB / r | Побитовое И | |
PANDN мм, мм / m64 | 0F DF / r | Побитовое И НЕ | |
POR мм, мм / м64 | 0F EB / r | Побитовое ИЛИ | |
PXOR мм, мм / м64 | 0F EF / r | Побитовое исключающее ИЛИ | |
PCMPEQB мм, мм / м64 | 0F 74 / r | Сравнить упакованные байты на равенство | |
PCMPEQW мм, мм / м64 | 0F 75 / r | Сравнить pac ked слова для равенства | |
PCMPEQD мм, мм / м64 | 0F 76 / r | Сравнить сжатые двойные слова для равенства | |
PCMPGTB мм, мм / м64 | 0F 64 / r | Сравнить упакованные целые числа в байтах со знаком для значений больше | |
PCMPGTW мм, мм / м 64 | 0F 65 / r | Сравнить упакованные целые числа в байтах со знаком для значений, превышающих | |
PCMPGTD мм, мм / м64 | 0F 66 / r | Сравнить упакованные целые числа с двойным словом со знаком для значений, превышающих | |
PMADDWD мм, мм / м64 | 0F F5 / r | Умножить упакованные слова, сложить результаты смежных двойных слов | |
PMULHW mm, mm / m64 | 0F E5 / r | Умножить упакованные целые числа со знакомыми словами, сохранить старшие 16 биты результатов | |
PMULLW мм, мм / м64 | 0F D5 / r | Умножение упакованных целых чисел со знаком, сохранение младших 16 бит результатов | |
PSLLW мм1, imm8 | 0F 71/6 ib | Сдвиг слов влево, смещение по нулям | |
PSLLW мм, мм / м64 | 0F F1 / r | Сдвиг слов влево, сдвиг нулей | |
PSLLD мм, imm8 | 0F 72/6 ib | Сдвиг влево двойного слова s, сдвиг по нулям | |
PSLLD мм, мм / м64 | 0F F2 / r | Сдвиг влево двойных слов, сдвиг по нулям | |
PSLLQ мм, imm8 | 0F 73/6 ib | Сдвиг влево четырехслово, сдвиг по нулям | |
PSLLQ мм, мм / м64 | 0F F3 / r | Сдвиг влево четырехслово, сдвиг по нулям | |
PSRAD мм, imm8 | 0F 72/4 ib | Сдвиг двойных слов вправо, сдвиг в знаковых битах | |
PSRAD мм, мм / м64 | 0F E2 / r | Сдвиг вправо двойных слов, сдвиг в знаковых битах | |
PSRAW mm, imm8 | 0F 71/4 ib | Сдвиг вправо слов, сдвиг в знаковых битах | |
PSRAW мм, мм / м64 | 0F E1 / r | Сдвиг слов вправо, сдвиг в знаковых битах | |
PSRLW мм, imm8 | 0F 71/2 ib | Сдвиг правых слов, сдвиг по нулям | |
PSRLW мм, мм / м64 | 0F D1 / r | Сдвиг правых слов, сдвиг по нулям | |
PSRLD мм, imm8 | 0F 72/2 ib | Сдвиг двойных слов вправо, сдвиг по нулям | |
PSRLD мм, мм / м64 | 0F D2 / r | Сдвиг двойные слова справа, сдвиг по нулям | |
PSRLQ mm, imm8 | 0F 73/2 ib | Сдвиг четвертого слова вправо, сдвиг по нулям | |
PSRLQ мм, мм / м64 | 0F D3 / r | Сдвиг четвертого слова вправо, сдвиг в нулях | |
PSUBB мм, мм / м64 | 0F F8 / r | Вычесть упакованные байтовые целые числа | |
PSUBW мм, мм / м64 | 0F F9 / r | Вычесть целые числа в упакованном виде | |
PSUBD мм, мм / м64 | 0F FA / r | Вычесть целые числа в сжатом двойном слове | |
PSUBSB мм, мм / м64 | 0F E8 / r | Вычесть упакованные байты со знаком с насыщением | |
PSUBSW мм, мм / м64 | 0F E9 / r | Вычесть упакованные слова со знаком с насыщенность | |
PSUBUSB мм, мм / м64 | 0F D8 / r | Вычесть упакованные байты без знака с насыщением | |
PSUBUSW мм, мм / м64 | 0F D9 / r | Вычесть упакованные слова без знака с насыщением | |
PUNPCKHBW мм, мм / м64 | 0F 68 / r | Распаковать и чередовать старшие байты | |
PUNPCKHWD мм, мм / м64 | 0F 69 / r | Распаковка и чередование старших слов | |
PUNPCKHDQ мм, мм / м64 | 0F 6A / r | Распаковывать и чередовать двойные слова высокого порядка | |
PUNPCKLBW мм, мм / м32 | 0F 60 / r | Распаковывать и чередовать младшие байты | |
PUNPCKLWD мм, мм / м32 | 0F 61 / r | Распаковка и чередование младших слов | |
PUNPCKLDQ мм, мм / м32 | 0F 62 / r | Распаковка и чередование младшие двойные слова |
Добавлены с 6x86MX из Cyrix, теперь не рекомендуется
PAVEB, PADDSIW, PMAGW, PDISTIB, PSUBSIW, PMVZB, PMULHRW, PMVNZB, PMVLZB, PMVGEZB, PMULHRIW, PMACHRIW
Инструкция | Opcode | Значение |
---|---|---|
MASKMOVQ мм1, мм2 | 0F F7 / r | Маскированное перемещение четырехслова |
MOVNTQ m64, мм | 0F E7 / r | Перемещение четырехслова с использованием вневременной подсказки |
PSHUFW мм1, мм2 / м64, imm8 | 0F 70 / r ib | Перемешать упакованные слова |
PINSRW мм, r32 / m16, imm8 | 0F C4 / r | Вставить слово |
PEXTRW reg, mm, imm8 | 0F C5 / r | Извлечь слово |
PMOVMSKB reg, мм | 0F D7 / r | Переместить байтовую маску |
PMINUB мм1, мм2 / м64 | 0F DA / r | Минимум упакованных целых байтов без знака |
PMAXUB мм1, мм2 / м64 | 0F DE / r | Максимальное количество упакованных целых байтов без знака |
PAVGB мм1, мм2 / м64 | 0F E0 / r | Средние упакованные целые числа |
PAVGW мм1, мм2 / м64 | 0F E3 / r | Средние упакованные целые числа |
PMULHUW мм1, мм2 / м64 | 0F E4 / r | Умножение упакованных целых чисел без знака и сохранение высокого результата |
PMINSW мм1, мм2 / м64 | 0F EA / r | Минимум Па cked Целые числа со знаком со знаком |
PMAXSW мм1, мм2 / м64 | 0F EE / r | Максимальное количество упакованных целых чисел со знаком со знаком |
PSADBW мм1, мм2 / м64 | 0F F6 / r | Вычислить сумму абсолютных разностей |
Следующие инструкции MMX были добавлены с SSE2:
Instruction | Opcode | Значение |
---|---|---|
PSUBQ мм1, мм2 / м64 | 0F FB / r | Вычесть четырехсловное целое число |
PMULUDQ мм1, мм2 / м64 | 0F F4 / r | Умножение двойного слова без знака на целое |
Инструкция | Opcode | Значение |
---|---|---|
PSIGNB мм1, мм2 / м64 | 0F 38 08 / r | Отменить / обнулить / сохранить упакованные байтовые целые числа в зависимости от соответствующего знака |
PSIGNW мм1, мм2 / м64 | 0F 38 09 / r | Отменить / обнулить / сохранить упакованные целые слова в зависимости от соответствующего знака |
PSIGND мм1, мм2 / м64 | 0F 38 0A / r | Отменить / обнулить / сохранить упакованные целые числа из двух слов в зависимости от на соответствующих знак |
ПШУФБ мм1, мм2 / м64 | 0F 38 00 / r | Перемешать байты |
PMULHRSW мм1, мм2 / м64 | 0F 38 0B / r | Умножение 16-битных слов со знаком, масштабирование и округление двойных слов со знаком, упаковка старших 16 бит |
PMADDUBSW мм1, мм2 / м64 | 0F 38 04 / r | Умножение со знаком и беззнаковые байты, добавить горизонтальную пару подписанных слов, упаковать насыщенные подписанные слова |
PHSUBW мм1, мм2 / м64 | 0F 38 05 / r | Вычесть и упаковать 16-битные целые числа со знаком по горизонтали |
PHSUBSW мм1, мм2 / м64 | 0F 38 07 / r | Вычесть и упаковать 16-битное целое число со знаком по горизонтали с насыщенностью |
PHSUBD мм1, мм2 / м64 | 0F 38 06 / r | Вычесть и упаковать 32-битные целые числа со знаком по горизонтали |
PHADDSW мм1, мм2 / м64 | 0F 38 03 / r | Добавить и упаковать 16-разрядные целые числа со знаком по горизонтали, упаковать насыщенные целые числа в мм1. |
PHADDW мм1, мм2 / м64 | 0F 38 01 / r | Сложение и упаковка 16-битных целых чисел по горизонтали |
PHADDD мм1, мм2 / м64 | 0F 38 02 / r | Сложить и упаковать 32-битные целые числа по горизонтали |
PALIGNR мм1, мм2 / м64, imm8 | 0F 3A 0F / r ib | Конкатенировать назначение и исходные операнды, извлечь выровненный по байтам результат, сдвинутый вправо |
PABSB мм1, мм2 / м64 | 0F 38 1C / r | Вычислить абсолютное значение байтов и сохранить результат без знака |
PABSW мм1, мм2 / м64 | 0F 38 1D / r | Вычислить абсолютное значение 16-битных целых чисел и сохранить результат без знака |
PABSD мм1, мм2 / м64 | 0F 38 1E / r | Вычислить абсолютное значение 32-битных целых чисел и сохранить результат без знака |
Добавлены с помощью K6-2
FEMMS, PAVGUSB, PF2ID, PFACC, PFADD, PFCMPEQ, PFCMPGE, PFCMPGT, PFMAX, PFMIN, PFMUL, PFRCP, PFRCPIT1, PFRCPIT2, PFRSQIT1, PFRSQETDUB, PFRSQIT2, PFRSQRT, PFSQRT, 35>3DNow! + Инструкции
PF2IW, PFNACC, PFPNACC, PI2FW, PSWAPD
PFRSQRTV, PFRCPV
Добавлены с Pentium III
Инструкции SSE работают с регистрами xmm, которые имеют ширину 128 бит.
SSE состоит из следующих инструкций с плавающей запятой SSE SIMD:
Instruction | Opcode | Значение |
---|---|---|
ANDPS * xmm1, xmm2 / m128 | 0F 54 / r | Побитовое логическое И упакованных значений с плавающей запятой одинарной точности |
ANDNPS * xmm1, xmm2 / m128 | 0F 55 / r | Побитовое логическое И НЕ упакованных значений с плавающей запятой одинарной точности |
ORPS * xmm1, xmm2 / m128 | 0F 56 / r | Побитовое логическое ИЛИ значений с плавающей запятой одинарной точности |
XORPS * xmm1, xmm2 / m128 | 0F 57 / r | Побитовое логическое исключающее ИЛИ для значений с плавающей запятой одинарной точности |
MOVUPS xmm1, xmm2 / m128 | 0F 10 / r | Перемещение невыровненных упакованных значений с плавающей запятой одинарной точности |
MOVSS xmm1, xmm2 / m32 | F3 0F 10 / r | Move Scalar Значения с плавающей запятой одинарной точности |
MOVUPS xmm2 / m128, xmm1 | 0F 11 / r | Перемещение невыровненных упакованных значений с плавающей запятой одинарной точности |
MOVSS xmm2 / m32, xmm1 | F3 0F 11 / r | Перемещение скалярных значений с плавающей запятой одинарной точности |
MOVLPS xmm, m64 | 0F 12 / r | Перемещение низкоупакованных значений с плавающей запятой одинарной точности |
MOVHLPS xmm1, xmm2 | 0F 12 / r | Перемещение упакованных значений с плавающей запятой одинарной точности от высокого к низкому |
MOVLPS m64, xmm | 0F 13 / r | Перемещение значений с плавающей запятой одинарной точности с низкой упаковкой |
UNPCKLPS xmm1, xmm2 / m128 | 0F 14 / r | Распаковка и чередование с плавающей запятой одинарной точности с низкой упаковкой- Значения точки |
UNPCKHPS xmm1, xmm2 / m128 | 0F 15 / r | Распаковка и чередование высокопакетных значений с плавающей запятой одинарной точности |
MOVHPS xmm, m64 | 0F 16 / r | Перемещение значений с плавающей запятой одинарной точности с высокой степенью упаковки |
MOVLHPS xmm1, xmm2 | 0F 16 / r | Перемещение с упаковкой одинарной точности Значения с плавающей запятой от низкого к высокому |
MOVHPS m64, xmm | 0F 17 / r | Перемещение высоконадежных значений с плавающей запятой одинарной точности |
MOVAPS xmm1, xmm2 / m128 | 0F 28 / r | Переместить выровненные упакованные значения с плавающей запятой одинарной точности |
MOVAPS xmm2 / m128, xmm1 | 0F 29 / r | Переместить выровненные упакованные одинарной точности Значения с плавающей точкой |
MOVNTPS m128, xmm1 | 0F 2B / r | Переместить выровненный четырехпакетный одинарный FP Non Temporal |
MOVMSKPS reg, xmm | 0F 50 / r | Извлечь упакованную 4-битную маску знака с плавающей запятой одинарной точности. Старшие биты регистра заполнены нулями. |
CVTPI2PS xmm, мм / м64 | 0F 2A / r | Преобразование упакованных целых двойных слов в упакованные значения FP одинарной точности |
CVTSI2SS xmm, r / m32 | F3 0F 2A / r | Преобразование целого двойного слова в скалярное значение FP с одинарной точностью |
CVTSI2SS xmm, r / m64 | F3 REX.W 0F 2A / r | Преобразование целого числа Qword в скалярное значение FP с одинарной точностью |
MOVNTPS m128, xmm | 0F 2B / r | Сохранение упакованных значений с плавающей запятой одинарной точности с помощью вневременной подсказки |
CVTTPS2PI мм, xmm / m64 | 0F 2C / r | Преобразование с усечением упакованных значений FP одинарной точности в упакованные целые числа двойного слова |
CVTTSS2SI r32, xmm / m32 | F3 0F 2C / r | Преобразовать с усечением скалярное значение FP с одинарной точностью в целое число двойного слова |
CVTTSS2SI r64, xmm1 / m32 | F3 REX.W 0F 2C / r | Преобразовать с усечением скалярное значение FP одинарной точности в Qword Integer |
CVTPS2PI мм, xmm / m64 | 0F 2D / r | Преобразовать упакованные значения FP одинарной точности в упакованное Dword Int egers |
CVTSS2SI r32, xmm / m32 | F3 0F 2D / r | Преобразование скалярного значения FP с одинарной точностью в целое число двойного слова |
CVTSS2SI r64, xmm1 / m32 | F3 REX.W 0F 2D / r | Преобразовать скалярное значение FP с одинарной точностью в Qword Integer |
UCOMISS xmm1, xmm2 / m32 | 0F 2E / r | Неупорядоченное сравнение скалярных значений с плавающей запятой одинарной точности и установка EFLAGS |
COMISS xmm1, xmm2 / m32 | 0F 2F / r | Сравнение скалярных упорядоченных значений с плавающей запятой одинарной точности и Установить EFLAGS |
SQRTPS xmm1, xmm2 / m128 | 0F 51 / r | Вычислить квадратные корни упакованных значений с плавающей запятой одинарной точности |
SQRTSS xmm1, xmm2 / m32 | F3 0F 51 / r | Вычислить квадратный корень из скалярного значения с плавающей запятой одинарной точности |
RSQRTPS xmm1, xmm2 / m128 | 0F 52 / r | Вычислить обратную величину квадратного корня упакованного значения с плавающей запятой одинарной точности |
RSQRTSS xmm1, xmm2 / m32 | F3 0F 52 / r | Вычислить обратную величину квадратного корня скалярного Si ngle-Precision Floating-Point Value |
RCPPS xmm1, xmm2 / m128 | 0F 53 / r | Вычислить обратную величину упакованных значений с плавающей запятой одинарной точности |
RCPSS xmm1, xmm2 / m32 | F3 0F 53 / r | Вычисление обратных значений скалярных значений с плавающей запятой одинарной точности |
ADDPS xmm1, xmm2 / m128 | 0F 58 / r | Добавить упакованные значения с плавающей запятой одинарной точности |
ADDSS xmm1, xmm2 / m32 | F3 0F 58 / r | Добавить скалярные значения с плавающей запятой одинарной точности |
MULPS xmm1, xmm2 / m128 | 0F 59 / r | Умножение значений с плавающей запятой одинарной точности |
MULSS xmm1, xmm2 / m32 | F3 0F 59 / r | Умножение скалярных значений с плавающей запятой одинарной точности |
SUBPS xmm1, xmm2 / m128 | 0F 5C / r | Вычесть упакованные одинарной точности с плавающей запятой- Значения точек |
SUBSS xmm1, xmm2 / m32 | F3 0F 5C / r | Вычесть скалярные значения с плавающей запятой одинарной точности |
MINPS xmm1, xmm2 / m128 | 0F 5D / r | Минимум возврата Упакованные значения с плавающей запятой одинарной точности |
MINSS xmm1, xmm2 / m32 | F3 0F 5D / r | Возвращают минимальные скалярные значения с плавающей запятой одинарной точности |
DIVPS xmm1, xmm2 / m128 | 0F 5E / r | Разделение упакованных значений с плавающей запятой одинарной точности |
DIVSS xmm1, xmm2 / m32 | F3 0F 5E / r | Разделение скалярных значений с плавающей запятой одинарной точности |
MAXPS xmm1, xmm2 / m128 | 0F 5F / r | Возвращает максимальные упакованные значения с плавающей запятой одинарной точности |
MAXSS xmm1, xmm2 / m32 | F3 0F 5F / r | Возвращает максимальные скалярные значения с плавающей запятой одинарной точности |
LDMXCSR m32 | 0F AE / 2 | Загрузить состояние регистра MXCSR |
STMXCSR m32 | 0F AE / 3 | Сохранить состояние регистра MXCSR |
CMPPS xmm1, xmm2 / m128, imm8 | 0F C2 / r ib | Сравнить упакованные значения с плавающей запятой одинарной точности |
CMPSS xmm1, xmm2 / m32, imm8 | F3 0F C2 / r ib | Сравнение скалярных значений с плавающей запятой одинарной точности |
SHUFPS xmm1, xmm2 / m128, imm8 | 0F C6 / r ib | Перемешать упакованные значения с плавающей запятой одинарной точности |
Добавлены с Pentium 4
Инструкция | Opcode | |
---|---|---|
MOVAPD xmm1, xmm2 / m128 | 66 0F 28 / r | Перемещение выровненных упакованных значений с плавающей запятой двойной точности |
MOVAPD xmm2 / m128, xmm1 | 66 0F 29 / r | Перемещение выровненных упакованных значений с плавающей запятой двойной точности |
MOVNTPD m128, xmm1 | 66 0F 2B / r | Сохранение упакованных значений с использованием плавающей запятой двойной точности с вневременной подсказки |
MOVHPD xmm1, m64 | 66 0F 16 / r | Переместить высокоупакованное значение с плавающей запятой второй точности |
MOVHPD m64, xmm1 | 66 0F 17 / r | Переместить высокоупакованное значение с плавающей запятой двойной точности |
MOVLPD xmm1, m64 | 66 0F 12 / r | Переместить низкоупакованное значение с плавающей запятой двойной точности |
MOVLPD m64, xmm1 | 66 0F 13 / r | Переместить положение с плавающей запятой низкой точности с низким уплотнением |
MOVUPD xmm1, xmm2 / m128 | 66 0F 10 / r | Переместить невыровненное упакованное значение двойной точности Значения с плавающей запятой |
MOVUPD xmm2 / m128, xmm1 | 66 0F 11 / r | Перемещение невыровненных упакованных значений с плавающей запятой двойной точности |
MOVMSKPD reg, xmm | 66 0F 50 / r | Извлечь упакованную маску знака с плавающей запятой второй точности |
MOVSD * xmm1, xmm2 / m64 | F2 0F 10 / r | Переместить или объединить скалярное значение с плавающей запятой двойной точности |
MOVSD xmm1 / m64, xmm2 | F2 0F 11 / r | Переместить или объединить скалярное с плавающей запятой двойной точности |
Инструкция | Opcode | Значение |
---|---|---|
ADDPD xmm1, xmm2 / m128 | 66 0F 58 / r | Добавить Упакованный двойной Precision Значения с плавающей запятой |
ADDSD xmm1, xmm2 / m64 | F2 0F 58 / r | Добавить низкое значение с плавающей запятой двойной точности |
DIVPD xmm1, xmm2 / m128 | 66 0F 5E / r | Разделение упакованных значений с плавающей запятой двойной точности |
DIVSD xmm1, xmm2 / m64 | F2 0F 5E / r | Разделить скалярное значение с плавающей запятой точности точности |
MAXPD xmm1, xmm2 / m128 | 66 0F 5F / r | Максимум упакованных значений с плавающей запятой двойной |
MAXSD xmm1, xmm2 / m64 | F2 0F 5F / r | Возвращает максимальное скалярное значение с плавающей запятой двойной точности |
MINPD xmm1, xmm2 / m128 | 66 0F 5D / r | Минимум упакованных значений с плавающей запятой точности |
MINSD xmm1, xmm2 / m64 | F2 0F 5D / r | Возврат минимального скалярного значения с плавающей запятой двойной точности -Значение точки |
MULPD x мм1, x мм2 / м 128 | 66 0F 59 / r | Многократно Упакованные значения с плавающей запятой второй точности |
MULSD xmm1, xmm2 / m64 | F2 0F 59 / r | Умножение скалярного значения с плавающей запятой двойной точности |
SQRTPD xmm1, xmm2 / m128 | 66 0F 51 / r | Квадратный корень из значений с плавающей запятой двойной точности |
SQRTSD xmm1, xmm2 / m64 | F2 0F 51 / r | Вычислить квадратный корень из скалярного значения с плавающей запятой двойной точности |
SUBPD xmm1, xmm2 / m128 | 66 0F 5C / r | Вычесть упакованное значение точности с плавающей запятой -Point Values |
SUBSD xmm1, xmm2 / m64 | F2 0F 5C / r | Вычесть скалярное с плавающей запятой двойной точности |
Инструкция | Код операции | |
---|---|---|
ANDPD xmm1, xmm2 / m128 | 66 0F 54 / r | Побитовое логическое И упакованных значений с плавающей запятой лог войной точности |
ANDNPD xmm1, xmm2 / m128 | 66 0F 55 / r | Побитовое логическое И НЕ упакованных значений с плавающей запятой двойной точности |
ORPD xmm1, xmm2 / m128 | 66 0F 56 / r | Побитовое логическое ИЛИ упакованных значений с плавающей запятой второй точности |
XORPD xmm1, xmm2 / m128 | 66 0F 57 / r | Побитовое логическое исключающее ИЛИ упакованного двойника Прецизионные значения с плавающей запятой |
Инструкция | Opcode | Значение |
---|---|---|
CMPPD xmm1, xmm2 / m128, imm8 | 66 0F C2 / r ib | Сравнить упакованные значения с плавающей запятой двойной точности |
CMPSD * xmm1, xmm2 / m64, imm8 | F2 0F C2 / r ib | Сравнить низкие значения с плавающей запятой двойной точности |
COMISD xmm1, xmm2 / m64 | 66 0F 2F / r | соответствующие скалярные упорядоченные значения с плавающей запятой двойной точности и установить EFLAGS |
UCOMISD xmm1, xmm2 / m64 | 66 0F 2E / r | Неупорядоченное сравнение скалярных значений с плавающей запятой точности и установка EFLAGS |
Инструкция | операции | Значение |
---|---|---|
SHUFPD xmm1, xmm2 / m128, imm8 | 66 0F C6 / r ib | Packed Interleave Shuffle of Pair of Double-Pre Значения с плавающей запятой cision |
UNPCKHPD xmm1, xmm2 / m128 | 66 0F 15 / r | Распаковка и чередование высокоупакованных значений с плавающей запятой двойной точностью |
UNPCKLPD xmm1, xmm2 / m128 | 66 0F 14 / r | Распаковка и чередование низкоупакованных значений с плавающей запятой двойной точности |
Инструкция | Код операции | Значение |
---|---|---|
CVTDQ2PD xmm1, xmm2 / m64 | F3 0F E6 / r | Преобразование упакованных целых двойных слов в упакованные значения с плавающей запятой двойной точности |
CVTDQ2PS xmm1, xmm2 / m128 | 0F 5B / r | Преобразование упакованных целых двойных слов в упакованные значения с плавающей запятой одинарной точности |
CVTPD2DQ xmm1, xmm2 / m128 | F2 0F E6 / r | Преобразовать упакованные значения с плавающей запятой двойной точности в упакованные целые числа двойного слова |
CVTPD2PI mm, xmm / m128 | 66 0F 2D / r | Преобразовать упакованные двойные - Прецизионные значения FP для упакованных целых двойных слов |
CVTPD2PS xmm1, xmm2 / m128 | 66 0F 5A / r | Преобразовать Пациентные значения с плавающей запятой двойной точности в упакованные значения с плавающей запятой одинарной точность |
CVTPI2PD xmm, мм / м64 | 66 0F 2A / r | Преобразование упакованных целых двойных слов в упакованные двойные -Precision FP Values |
CVTPS2DQ xmm1, xmm2 / m128 | 66 0F 5B / r | Преобразование упакованных значений с плавающей запятой одинарной точности в упакованные целочисленные значен ия двойного слова со знаком |
CVTPS2PD xmm1, xmm2 / m64 | 0F 5A / r | Преобразование упакованных значений с плавающей запятой одинарной точностью в упакованные значения с плавающей запятой двойной точности |
CVTSD2SI r32, xmm1 / m64 | F2 0F 2D / r | Преобразование скалярного значения с плавающей запятой двойной точности в целое двойное слово |
CVTSD2SI r64, xmm1 / m64 | F2 REX.W 0F 2D / r | Преобразовать скалярное значение с плавающей запятой двойной точности в четырехсловное целое с расширением знака |
CVTSD2SS xmm1, xmm2 / m64 | F2 0F 5A / r | Преобразовать скалярное двойное- Прецизионное значение с плавающей запятой в скалярное значение с плавающей запятой одинарной точности |
CVTSI2SD xmm1, r32 / m32 | F2 0F 2A / r | Преобразование двойного целого числа в скалярное значение с плавающей запятой точности |
CVTSI2SD xmm1, r / m64 | F2 REX.W 0F 2A / r | Преобразо вание четырехсловного целого числа в скалярное значение с плавающей запятой двойной точности |
CVTSS2SD xmm1, xmm2 / m32 | F3 0F 5A / r | Преобразовать скалярное значение с плавающей запятой одинарной точности в скалярное значение с плавающей запятой точности |
CVTTPD2DQ xmm1, xmm2 / m128 | 66 0F E6 / r | Преобразовать с двойным усечением. Прецизионные значения с плавающей запятой в упакованные целые числа двойного слова |
CVTTPD2PI мм, xmm / m128 | 66 0F 2C / r | Преобразовать с усечением упакованные значения FP двойной точности в упакованные целые числа двойного слова |
CVTTPS2DQ xmm1, xmm2 / m128 | F3 0F 5B / r | Преобразование с усечением упакованных значений с плавающей запятой одинарной точностью в упакованные целочисленные значения двойного слова со знаком |
CVTTSD2SI r32, xmm1 / m64 | F2 0F 2C / r | Преобразование со скалярным усечением с плавающей точкой двойной точности Значение точки g в знаковое целое двойное слово |
CVTTSD2SI r64, xmm1 / m64 | F2 REX.W 0F 2C / r | Преобразовать с усечением Скалярное значение точности с плавающей запятой в знак Qword Integer |
SSE2 позволяет выполнять инструкции MMX в регистрах SSE, обрабатывая один раз вдвое больше данных.
Инструкция | Opcode | Значение |
---|---|---|
MOVD xmm, r / m32 | 66 0F 6E / r | Переместить двойное слово |
MOVD r / m32, xmm | 66 0F 7E / r | Переместить двойное слово |
MOVQ xmm1, xmm2 / m64 | F3 0F 7E / r | Перемещение четверного слова |
MOVQ xmm2 / m64, xmm1 | 66 0F D6 / r | Перемещение четверного слова |
MOVQ r / m64, xmm | 66 REX.W 0F 7E / r | Переместить четвертое слово |
MOVQ xmm, r / m64 | 66 REX.W 0F 6E / r | Переместить четверное слово |
PMOVMSKB reg, xmm | 66 0F D7 / r | Перемещение байтовой маски, обнуление старших битов регистра |
PEXTRW reg, xmm, imm8 | 66 0F C5 / r ib | Извлечь указанное слово и переместить его в рег, установив биты 15-0 и обнуляя остальные |
PINSRW xmm, r32 / m16, imm8 | 66 0F C4 / r ib | Переместить младшее слово в указанную позицию слова |
PACKSSDW xmm1, xmm2 / m128 | 66 0F 6B / r | Преобразует 4 упакованных целых числа двойного слова со знаком в 8 упакованных целых слов со знаком с насыщением |
PACKSSWB xmm1, xmm2 / m128 | 66 0F 63 / r | Преобразует 8 упакованных целых чисел со знаком в 16 упакованных целых со знаком байтов с насыщением |
PACKUSWB xmm1, xmm2 / m128 | 66 0F 67 / r | Преобразует 8 целых слов со знаком в 16 целых байтов без знака с насыщением |
PADDB xmm1, xmm2 / m128 | 66 0F FC / r | Добавить с упаковкой байтовые целые числа |
PADDW xmm1, xmm2 / m128 | 66 0F FD / r | Добавить сжатые целые слова |
PADDD xmm1, xmm2 / m128 | 66 0F FE / r | Добавить упакованные целые числа с двойным словом |
PADDQ xmm1, xmm2 / m128 | 66 0F D4 / r | Добавить упакованные целые числа с четырьмя словами. |
PADDSB xmm1, xmm2 / m128 | 66 0F EC / r | Добавить упакованные байтовые целые числа со знаком с насыщением |
PADDSW xmm1, xmm2 / m128 | 66 0F ED / r | Добавить упакованные целые числа со знаком со знаком с насыщением |
PADDUSB xmm1, xmm2 / m128 | 66 0F DC / r | Добавить упакованные байтовые целые числа без знака с насыщением |
PADDUSW xmm1, xmm2 / m128 | 66 0F DD / r | Добавить упакованные целые числа без знака с насыщением |
PAND xmm1, xmm2 / m128 | 66 0F DB / r | Побитовое И |
PANDN xmm1, xmm2 / m128 | 66 0F DF / r | Побитовое И НЕ |
POR xmm1, xmm2 / m128 | 66 0F EB / r | Побитовое ИЛИ |
PXOR xmm1, xmm2 / m128 | 66 0F EF / r | Побитовое исключающее ИЛИ |
PCMPEQB xmm1, xmm2 / m128 | 66 0F 74 / r | Сравнить упакованные байты на предмет равенства. |
PCMPEQW xmm1, xmm2 / m128 | 66 0F 75 / r | Сравнить упакованные слова на равенство. |
PCMPEQD xmm1, xmm2 / m128 | 66 0F 76 / r | Сравнить упакованные двойные слова на равенство. |
PCMPGTB xmm1, xmm2 / m128 | 66 0F 64 / r | Сравнить упакованные байтовые целые числа со знаком для большего, чем |
PCMPGTW xmm1, xmm2 / m128 | 66 0F 65 / r | Сравнить словом упакованные целые числа со со знаком для значений, превосходящих |
PCMPGTD xmm1, xmm2 / m128 | 66 0F 66 / r | Сравнить упакованные целые числа со знакомыми целыми числами для больше чем |
PMULLW xmm1, xmm2 / m128 | 66 0F D5 / r | Умножение упакованных целых чисел со знаком и насыщенностью |
PMULHW xmm1, xmm2 / m128 | 66 0F E5 / r | Умножение упакованных целых слов со знаком, сохранение старших 16 бит результатов |
PMULHUW xmm1, xmm2 / m128 | 66 0F E4 / r | Умножение упакованных целых чисел без знака, сохранение старших 16 бит результатов |
PMULUDQ xmm1, xmm2 / m128 | 66 0F F4 / r | Умножение упакованных целых чисел двойного слова без знака |
PSLLW xmm1, xmm2 / m128 | 66 0F F1 / r | Сдвиг слов влево при сдвиге в 0 с |
PSLLW xmm1, imm8 | 66 0F 71/6 ib | Сдвиг слов влево w сдвиг в 0 с |
PSLLD xmm1, xmm2 / m128 | 66 0F F2 / r | Сдвигных двойных слов влево при смещении в 0 с |
PSLLD xmm1, imm8 | 66 0F 72 / 6 ib | Сдвинуть двойные слова влево при сдвиге на 0 с |
PSLLQ xmm1, xmm2 / m128 | 66 0F F3 / r | Сдвинуть четверные слова влево при сдвиге на 0 с |
PSLLQ xmm1, imm8 | 66 0F 73/6 ib | Сдвиг четырехслова влево при сдвиге в 0 с |
PSRAD xmm1, xmm2 / m128 | 66 0F E2 / r | Сдвиг двойного слова вправо при сдвиге в знаковых битах |
PSRAD xmm1, imm8 | 66 0F 72/4 ib | Сдвиг двойного слова вправо при сдвиге в знаковых битах |
PSRAW xmm1, xmm2 / m128 | 66 0F E1 / r | Сдвиг слов вправо при сдвиге битов знака |
PSRAW xmm1, imm8 | 66 0F 71/4 ib | Сдвиг слов вправо при сдвиге в знаковых битах |
PSRLW xmm1, xmm2 / m128 | 66 0F D1 / r | Сдвиг слов вправо при сдвиге в 0 с |
PSRLW xmm1, imm8 | 66 0F 71/2 ib | Сдвиг слов вправо при сдвиге в 0 с |
PSRLD xmm1, xmm2 / m128 | 66 0F D2 / r | Сдвиг двойных слов вправо при сдвиге на 0 с |
PSRLD xmm1, imm8 | 66 0F 72/2 ib | Сдвигает двойные слова вправо при сдвиге на 0 с |
PSRLQ xmm1, xmm2 / m128 | 66 0F D3 / r | Сдвигает четверные слова вправо при сдвиге на 0 с |
PSRLQ xmm1, imm8 | 66 0F 73/2 ib | Сдвиг четверных слов вправо при сдвиге на 0 с |
PSUBB xmm1, xmm2 / m128 | 66 0F F8 / r | Вычесть упакованные целые байты |
PSUBW xmm1, xmm2 / m128 | 66 0F F9 / r | Вычесть целые упакованные слова |
PSUBD xmm1, xmm2 / m128 | 66 0F FA / r | Вычесть упакованные целые числа двойного слова |
PSUBQ xmm1, xmm2 / m128 | 66 0F FB / r | Вычесть упакованные целые числа четверного слова. |
PSUBSB xmm1, xmm2 / m128 | 66 0F E8 / r | Вычесть упакованные байтовые целые числа со знаком с насыщением |
PSUBSW xmm1, xmm2 / m128 | 66 0F E9 / r | Вычесть упакованные целые слова со знаком с насыщением |
PMADDWD xmm1, xmm2 / m128 | 66 0F F5 / r | Умножить целые упакованные слова, сложить смежные результаты двойного слова |
PSUBUSB xmm1, xmm2 / m128 | 66 0F D8 / r | Вычесть упакованные байтовые целые числа без знака с насыщением |
PSUBUSW xmm1, xmm2 / m128 | 66 0F D9 / r | Вычесть упакованные целые числа без знака с насыщением |
PUNPCKHBW xmm1, xmm2 / m128 | 66 0F 68 / r | Распаковать и чередовать старшие разряды байт |
PUNPCKHWD xmm1, xmm2 / m128 | 66 0F 69 / r | Распаковка и чередование слов высокого порядка |
PUNPCKHDQ xmm1, xmm2 / m128 | 66 0F 6A / r | Распаковывать и чередовать двойные слова высокого порядка |
PUNPCKLBW xmm1, xmm2 / m128 | 66 0F 60 / r | Чередовать младшие байты |
PUNPCKLWD xmm1, xmm2 / m128 | 66 0F 61 / r | Чередование младших слов |
PUNPCKLDQ xmm1, xmm2 / m128 | 66 0F 62 / r | Чередование низкого уровня -order doublewords |
PAVGB xmm1, xmm2 / m128 | 66 0F E0, / r | Средние упакованные байтовые целые числа без знака с округлением |
PAVGW xmm1, xmm2 / m128 | 66 0F E3 / r | Средние упакованные целые числа без знака с округлением |
PMINUB xmm1, xmm2 / m128 | 66 0F DA / r | Сравнить упакованный беззнаковый байт целые числа и сохранить упакованные минимальные значения |
PMINSW xmm1, xmm2 / m128 | 66 0F EA / r | Сравнить упакованные целые числа со знаком и сохранить упакованные минимальные значения |
PMAXSW xmm1, xmm2 / m128 | 66 0F EE / r | Сравнить упакованные целые числа со знаком слова и сохранить максимальные упакованные значения |
PMAXUB xmm1, xmm2 / m128 | 66 0F DE / r | Сравнить упакованные целые байты без знака и сохранить упакованные максимальные значения |
PSADBW xmm1, xmm2 / m128 | 66 0F F6 / r | Вычисляет абсолютные разности упакованных байтов без знака i ntegers; затем 8 малых разностей и 8 высоких разностей суммируются отдельно для получения двух целочисленных результатов со словом без знака |
Следующие ниже инструкции могут использоваться только для регистров SSE, поскольку по своей природе они не работают с регистрами MMX
Инструкция | Opcode | Значение |
---|---|---|
MASKMOVDQU xmm1, xmm2 | 66 0F F7 / r | Non -Временное сохранение выбранных байтов из регистра XMM в память |
MOVDQ2Q mm, xmm | F2 0F D6 / r | Перемещение младшего четверного слова из XMM в регистр MMX. |
MOVDQA xmm1, xmm2 / m128 | 66 0F 6F / r | Перемещение двойных четырехслово с выравниванием |
MOVDQA xmm2 / m128, xmm1 | 66 0F 7F / r | Переместить выровненное двойное четырехслово |
MOVDQU xmm1, xmm2 / m128 | F3 0F 6F / r | Перемещение невыровненного двойного четвертого слова |
MOVDQU xmm2 / m128, xmm1 | F3 0F 7F / r | Перемещение невыровненного двойного четвертого слова |
MOVQ2DQ xmm, мм | F3 0F D6 / r | Перемещение четверного слова из MMX в младшее четверное слово регистра XMM |
MOVNTDQ m128, xmm1 | 66 0F E7 / r | Сохранение упакованных целых чисел с использованием вневременной подсказки |
PSHUFHW xmm1, xmm2 / m128, imm8 | F3 0F 70 / r ib | Перемешать упакованные старшие слова. |
PSHUFLW xmm1, xmm2 / m128, imm8 | F2 0F 70 / r ib | Перемешать упакованные младшие слова. |
PSHUFD xmm1, xmm2 / m128, imm8 | 66 0F 70 / r ib | Перемешать упакованные двойные слова. |
PSLLDQ xmm1, imm8 | 66 0F 73/7 ib | Пакетный сдвиг влево логических двойных четверных слов. |
PSRLDQ xmm1, imm8 | 66 0F 73/3 ib | Объединенный сдвиг вправо логических двойных четверных слов. |
PUNPCKHQDQ xmm1, xmm2 / m128 | 66 0F 6D / r | Распаковка и чередование четверных слов высокого порядка, |
PUNPCKLQDQ xmm1, xmm2 / m128 | 66 0F 6C / r | Чередование младших четверных слов, |
Добавлено с Pentium 4, поддерживающим SSE3
Инструкция | Opcode | Meaning | Notes |
---|---|---|---|
ADDSUBPS xmm1, xmm2 / m128 | F2 0F D0 / r | Добавить / вычесть значения с плавающей точкой одинарной точности | для сложной арифметики |
ADDSUBPD xmm1, xmm2 / m128 | 66 0F D0 / r | Сложение / вычитание двойной точности с плавающей запятой значения точки | |
MOVDDUP xmm1, xmm2 / m64 | F2 0F 12 / r | Перемещение значения с плавающей запятой двойной точности и дублирование | |
MOVSLDUP xmm1, xmm2 / m128 | F3 0F 12 / r | Перемещение и дублирование значений с плавающей запятой одинарной точности с четным индексом | |
MOVSHDUP xmm1, xmm2 / m128 | F3 0F 16 / r | Перемещение и дублирование нечетного индекса с плавающей точкой одинарной точности int values | |
HADDPS xmm1, xmm2 / m128 | F2 0F 7C / r | Горизонтальное сложение упакованных значений с плавающей запятой одинарной точности | для графики |
HADDPD xmm1, xmm2 / m128 | 66 0F 7C / r | Горизонтальное сложение упакованных значений с плавающей запятой двойной точности | |
HSUBPS xmm1, xmm2 / m128 | F2 0F 7D / r | Горизонтальное вычитание упакованных значений с плавающей запятой одинарной точности | |
HSUBPD xmm1, xmm2 / m128 | 66 0F 7D / r | Горизонтальное вычитание упакованных значений двойной точности значения с плавающей запятой |
Инструкция | Opcode | Значение | Примечания |
---|---|---|---|
LDDQU xmm1, mem | F2 0F F0 / r | Загрузить невыровненные данные и вернуть двойное четверное слово | Инструктивно эквивалентно MOVDQU. Для кодирования видео |
Добавлены с серией Xeon 5100 и начальным Core 2
Были добавлены следующие MMX-подобные инструкции, расширенные до регистров SSE с SSSE3
Инструкция | Opcode | Значение |
---|---|---|
PSIGNB xmm1, xmm2 / m128 | 66 0F 38 08 / r | Отрицать / ноль / сохранить упакованные байтовые целые числа в зависимости от соответствующего знака |
PSIGNW xmm1, xmm2 / m128 | 66 0F 38 09 / r | Отменить / ноль / сохранить упакованные целые слова в зависимости от соответствующего знака |
PSIGND xmm1, xmm2 / m128 | 66 0F 38 0A / r | Отменить / обнулить / сохранить упакованные целые числа двойного слова в зависимости от соответствующего |
PSHUFB xmm1, xmm2 / m128 | 66 0F 38 00 / r | Перемешать байты |
PMULHRSW xmm1, xmm2 / m128 | 66 0F 38 0B / r | Умножить 16-битные слова со знаком, масштаб и круглые подписанные двойные слова, упаковать старшие 16 бит |
PMADDUBSW xmm1, xmm2 / m128 | 66 0F 38 04 / r | Умножить знаковые и беззнаковые байты, добавить горизонтальный p эфир слов со знаком, упаковка насыщенных слов со знаком |
PHSUBW xmm1, xmm2 / m128 | 66 0F 38 05 / r | Вычесть и упаковать 16-битные целые числа со знаком по горизонтали |
PHSUBSW xmm1, xmm2 / m128 | 66 0F 38 07 / r | Вычесть и упаковать 16-битное целое число со знаком по горизонтали с насыщенностью |
PHSUBD xmm1, xmm2 / m128 | 66 0F 38 06 / r | Вычесть и упаковать 32-битные целые числа со знаком по горизонтали |
PHADDSW xmm1, xmm2 / m128 | 66 0F 38 03 / r | Сложить и упаковать 16-битные целые числа со знаком по горизонтали с насыщенностью |
PHADDW xmm1, xmm2 / m128 | 66 0F 38 01 / r | Сложить и упаковать 16-битные целые числа по горизонтали |
PHADDD xmm1, xmm2 / m128 | 66 0F 38 02 / r | Сложить и упаковать 32-битные целые числа по горизонтали |
PALIGNR xmm1, xmm2 / m128, imm8 | 66 0F 3A 0F / r ib | Объединить целевые и исходные операнды, извлечь результат, выровненный по байтам, смещенный вправо |
PABSB xmm1, xmm2 / m128 | 66 0F 38 1C / r | Вычислить абсолютное значение по tes и сохранить результат без знака |
PABSW xmm1, xmm2 / m128 | 66 0F 38 1D / r | Вычислить абсолютное значение 16-битных целых чисел и сохранить результат без знака |
PABSD xmm1, xmm2 / m128 | 66 0F 38 1E / r | Вычислить абсолютное значение 32-битных целых чисел и сохранить результат без знака |
Добавлен Core 2, изготовленный по 45 нм
Инструкция | Opcode | Значение |
---|---|---|
DPPS xmm1, xmm2 / m128, imm8 | 66 0F 3A 40 / r ib | Выборочно умножать упакованные значения с плавающей запятой SP, складывать и выборочно сохранять |
DPPD xmm1, xmm2 / m128, imm8 | 66 0F 3A 41 / r ib | Выборочно умножать упакованные значения с плавающей запятой DP, складывать и выборочно сохранять |
BLENDPS xmm1, xmm2 / m128, imm8 | 66 0F 3A 0C / r ib | Выбрать упакованные значения с плавающей запятой одинарной точности из указанной маски |
BLENDVPS xmm1, xmm2 / m128, | 66 0F 38 14 / r | Выбрать p подтвержденные значения с плавающей запятой одинарной точности из указанной маски |
BLENDPD xmm1, xmm2 / m128, imm8 | 66 0F 3A 0D / r ib | Выбрать упакованные значения DP-FP из указанной маски |
BLENDVPD xmm1, xmm2 / m128, | 66 0F 38 15 / r | Выберите упакованные значения DP FP из указанной маски |
ROUNDPS xmm1, xmm2 / m128, imm8 | 66 0F 3A 08 / r ib | Круглые упакованные значения с плавающей запятой одинарной точности |
ROUNDSS xmm1, xmm2 / m32, imm8 | 66 0F 3A 0A / r ib | Округление значения с плавающей запятой одинарной точности с низкой степенью упаковки |
ROUNDPD xmm1, xmm2 / m128, imm8 | 66 0F 3A 09 / r ib | Округление упакованных значений с плавающей запятой двойной точности |
ROUNDSD xmm1, xmm2 / m64, imm8 | 66 0F 3A 0B / r ib | Округлить низкоупакованное значение с плавающей запятой двойной точности |
INSERTPS xmm1, xmm2 / m32, imm8 | 66 0F 3A 21 / r ib | Вставить выбранное значение с плавающей запятой одинарной точности в указанный элемент назначения и обнулить элементы назначения |
E XTRACTPS reg / m32, xmm1, imm8 | 66 0F 3A 17 / r ib | Извлечь одно значение с плавающей запятой одинарной точности по указанному смещению и сохранить результат (с расширением нулями, если применимо) |
Инструкция | Opcode | Значение |
---|---|---|
MPSADBW xmm1, xmm2 / m128, imm8 | 66 0F 3A 42 / r ib | Суммирует абсолютную 8-битную целочисленную разность соседних групп из 4-х байтовых целых с начальным смещением |
PHMINPOSUW xmm1, xmm2 / m128 | 66 0F 38 41 / r | Найдите минимальное слово без знака |
PMULLD xmm1, xmm2 / m128 | 66 0F 38 40 / r | Умножьте упакованные целые числа со знаком двойного слова и сохраните младшие 32 бита |
PMULDQ xmm1, xmm2 / m128 | 66 0F 38 28 / r | Умножить упакованные целые числа двойного слова со знаком и сохранить результат четверного слова |
PBLENDVB xmm1, xmm2 / m128, | 66 0F 38 10 / r | Выбрать байтовые значения из указанной маски |
PBLENDW xmm1, xmm2 / m128, imm8 | 66 0F 3A 0E / r ib | Выбрать слова из указанной маски sk |
PMINSB xmm1, xmm2 / m128 | 66 0F 38 38 / r | Сравнить упакованные целые байты со знаком |
PMINUW xmm1, xmm2 / m128 | 66 0F 38 3A / r | Сравнить упакованные целые числа без знака |
PMINSD xmm1, xmm2 / m128 | 66 0F 38 39 / r | Сравнить упакованные целые числа двойного слова со знаком |
PMINUD xmm1, xmm2 / m128 | 66 0F 38 3B / r | Сравнить упакованные целые числа двойного слова без знака |
PMAXSB xmm1, xmm2 / m128 | 66 0F 38 3C / r | Сравнить упакованные целые числа в байтах со знаком |
PMAXUW xmm1, xmm2 / m128 | 66 0F 38 3E / r | Сравнить упакованные целые числа без знака со знаком |
PMAXSD xmm1, xmm2 / m128 | 66 0F 38 3D / r | Сравнить упакованные целые числа двойного слова со знаком |
PMAXUD xmm1, xmm2 / m128 | 66 0F 38 3F / r | Сравнить упакованные целые числа двойного слова без знака |
PINSRB xmm1, r32 / m8, imm8 | 66 0F 3A 20 / r ib | Вставить байтовое целочисленное значение в указанный элемент назначения |
PINSRD xmm1, r / m32, imm8 | 66 0F 3A 22 / r ib | Вставить двойное слово в целочисленное значение в указанном элементе назначения |
PINSRQ xmm1, r / m64, imm8 | 66 REX.W 0F 3A 22 / r ib | Вставить целочисленное значение qword в указанный элемент назначения |
PEXTRB reg / m8, xmm2, imm8 | 66 0F 3A 14 / r ib | Извлечь байтовое целочисленное значение со смещением исходного байта, старшие биты обнуляются. |
PEXTRW reg / m16, xmm, imm8 | 66 0F 3A 15 / r ib | Извлечь слово и скопировать в младшие 16 бит, с расширением нуля |
PEXTRD r / m32, xmm2, imm8 | 66 0F 3A 16 / r ib | Извлечь целочисленное значение двойного слова при смещении исходного двойного слова |
PEXTRQ r / m64, xmm2, imm8 | 66 REX.W 0F 3A 16 / r ib | Извлечь целочисленное значение qword при смещении исходного qword |
PMOVSXBW xmm1, xmm2 / m64 | 66 0f 38 20 / r | Знак расширить 8 упакованных 8-битных целых чисел до 8 упакованных 16-битных целых |
PMOVZXBW xmm1, xmm2 / m64 | 66 0f 38 30 / r | Ноль расширить 8 упакованных 8-битных целых чисел до 8 упакованных 16-битных целых чисел |
PMOVSXBD xmm1, xmm2 / m32 | 66 0f 38 21 / r | Знак расширить 4 упакованных 8-битных целых до 4 упакованных 32-битных целых |
PMOVZXBD xmm1, xmm2 / m32 | 66 0f 38 31 / r | Ноль расширить 4 упакованных 8-битных целых до 4 упакованных 32-битных целых чисел |
PMOVSXBQ xmm1, xmm2 / m16 | 66 0f 38 22 / r | Знак расширить 2 упакованных 8-битных целых до 2 упакованных 64-битных целых |
PMOVZXBQ xmm1, xmm2 / m16 | 66 0f 38 32 / r | Нулевое расширение 2 упакованных 8-битных целых чисел до 2 упакованных 64-битных целых чисел |
PMOVSXWD xmm1, xmm2 / m64 | 66 0f 38 23 / r | Знак расширить 4 упакованных 16-битных целых до 4 упакованных 32-битных целых |
PMOVZXWD xmm1, xmm2 / m64 | 66 0f 38 33 / r | Нулевое расширение 4 упакованных 16-битных целых чисел до 4 упакованных 32-битных целых чисел |
PMOVSXWQ xmm1, xmm2 / m32 | 66 0f 38 24 / r | Знак расширить 2 упакованных 16-битных целых до 2 упакованных 64-битных целых |
PMOVZXWQ xmm1, xmm2 / m32 | 66 0f 38 34 / r | Ноль расширить 2 упакованных 16-битных целые числа до 2 упакованных 64-битных целых чисел |
PMOVSXDQ xmm1, xmm2 / m64 | 66 0f 38 25 / r | Знак расширить 2 упакованных 32-битных целых числа до 2 упакованных 64-битных целых чисел |
PMOVZXDQ xmm1, xmm2 / m64 | 66 0f 38 35 / r | Ноль расширить 2 упакованных 32-битных целых числа до 2 упакованных 64-битных целых чисел |
PTEST xmm1, xmm2 / m128 | 66 0F 38 17 / r | Установить ZF, если результат И - все нули, установить CF, если результат И НЕ все 0s |
PCMPEQQ xmm1, xmm2 / m128 | 66 0F 38 29 / r | Сравнить упакованные qword на равенство |
PACKUSDW xmm1, xmm2 / m128 | 66 0F 38 2B / r | Преобразование 2 × 4 упакованных целых чисел со знаком двойного слова в 8 упакованных целых слов без знака с насыщением |
MOVNTDQA xmm1, m128 | 66 0F 38 2A / r | Перемещение двойного четверного слова с использованием невременной подсказки, если тип памяти WC |
добавлен с процессорами Phenom
Добавлен с процессорами Nehalem
Инструкция | Opcode | Значение |
---|---|---|
PCMPESTRI xmm1, xmm2 / m128, imm8 | 66 0F 3A 61 / r imm8 | Упакованное сравнение строковых данных с явной длиной, генерируя индекс |
PCMPESTRM xmm1, xmm2 / m128, imm8 | 66 0F 3A 60 / r imm8 | Упакованное сравнение строковых данных с явной длиной, генерируя маску |
PCMPISTRI xmm1, xmm2 / m128, imm8 | 66 0F 3A 63 / r imm8 | Упакованное сравнение s строковые данные с неявной длиной, генерируя индекс |
PCMPISTRM xmm1, xmm2 / m128, imm8 | 66 0F 3A 62 / r imm8 | Упакованное сравнение строковых данных с неявной длиной, генерируя маска |
PCMPGTQ xmm1, xmm2 / m128 | 66 0F 38 37 / r | Сравнить упакованные q-слова со знаком для большего, чем. |
SSE5 был предложенным расширением SSE AMD. В комплект не входил полный набор инструкций Intel SSE4, что делало его конкурентом SSE4, а не преемником. AMD решила не реализовывать SSE5, как предлагалось изначально, однако были представлены производные расширения SSE.
Представлен с ядром процессора Bulldozer, удален из Zen (микроархитектура) и далее.
Версия большей части набора инструкций SSE5
Преобразование с плавающей запятой половинной точности.
Инструкция | Значение |
---|---|
VCVTPH2PS xmmreg, xmmrm64 | Преобразование четырех значений с плавающей запятой половинной точности в памяти или нижней половины регистра XMM в четыре значения с плавающей запятой одинарной точности значения в регистре XMM |
VCVTPH2PS ymmreg, xmmrm128 | Преобразование восьми значений с плавающей запятой половинной точности в памяти или в регистре XMM (нижняя половина регистра YMM) в восемь значений с плавающей запятой одинарной точности в регистре YMM |
VCVTPS2PH xmmrm64, xmmreg, imm8 | Преобразование четырех значений с плавающей запятой одинарной точности в регистре XMM в значения с плавающей запятой половинной точности в памяти или нижнюю половину регистра XMM |
VCVTPS2PH xmmrm128, ymmreg, imm8 | Преобразование восьми значений с плавающей запятой одинарной точности в регистре YMM в значения с плавающей запятой половинной точности в памяти или регистре XMM |
Поддерживается в процессорах 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 | Объединенное отрицательное умножение упакованных значений с плавающей запятой одинарной точности |
VFNMADD213PS | Fused Отрицательное умножение - сложение упакованных значений с плавающей запятой одинарной точности |
VFNMADD231PS | Объединенное отрицательное умножение - сложение упакованных значений с плавающей запятой одинарной точности |
VFNMADD132SD | Отрицательное умножение с объединением -Сложение скалярных значений с плавающей запятой двойной точности |
VFNMADD213SD | Объединенное отрицательное умножение -Сложение скалярных значений с плавающей запятой двойной точности |
VFNMADD231SD | Плавное отрицательное умножение-сложение скалярных значений с плавающей запятой второй точности |
VFNMADD132SS | Объединенное отрицательное умножение-сложение скалярных значений с плавающей запятой одинарной точности |
VFNMADD> | |
VFNMADD>>Объединенное отрицательное умножение-сложение скаляра Значения с плавающей запятой точной точности | |
VFNMADD231SS | Объединенное отрицательное умножение-сложение скалярных чисел с плавающей одинарной точностью -Point Values |
VFNMSUB132PD | Объединенное отрицательное умножение-вычитание упакованных значений с плавающей запятой двойной точности |
VFNMSUB213PD | Объединенное отрицательное умножение-вычитание упакованного числа с плавающей запятой двойной точности Значения |
VFNMSUB231PD | Объединенное умножение-вычитание-вычитание значений с плавающей запятой упакованной точности |
VFNMSUB132PS | Объединенное отрицательное умножение-вычитание Данные значений с плавающей запятой одинарной точности |
VFNMSUB213PS | Объединенное отрицательное умножение-вычитание упакованных значений с плавающей запятой одинарной точностью |
VFNMSUB231PS | Объединенное отрицательное умножение-вычитание запятой запятой плавающей одинарной одинарной запятой. точности |
VFNMSUB132SD | Объединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой двойной точности |
VFNMSUB213SD | Объединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой двойной точности |
VFN8> | Объединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой двойной точности |
VFNMSUB132SS | Объединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой одинарной точностью |
248> | Объединенное отрицательное умножение- вычитание скалярных значений с плавающей запятой одинарной точности |
Поддерживается в процессорах AMD, начиная с архитектуры Bulldozer. По состоянию на 2017 год не поддерживается ни одним чипом Intel.
Объединенное умножение-сложение с четырьмя операндами. FMA4 была реализована аппаратно до FMA3.
Инструкция | Opcode | Значение | Примечания |
---|---|---|---|
VFMADDPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 69 / r / is4 | Объединенное умножение - сложение упакованных значений с плавающей запятой точности | |
VFMADDPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 68 / r / is4 | Fused Multiply -Добавление значений с плавающей запятой одинарной точности | |
VFMADDSD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6B / r / is4 | Объединенное умножение-сложение скалярной двойной запятой Значения с плавающей | |
VFMADDSS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6A / r / is4 | Объединенное умножение-сложение скалярных чисел с плавающей запятой одинарной точности | |
VFMADDSUBPD xmm0, xmm2, xmm, xmm2, xmm2 | C4E3 WvvvvL01 5D / r / is4 | Объединенное умножение-переменное сложение / вычитание упакованных значений с плавающей запятой двойной точности | |
VFMADDSUBPS xmm0,, xmm2, xmm3 | C4E3 WvvvvL01 5C / r / is4 | Объединенное умножение и чередование сложения / вычитания упакованных значений с плавающей запятой одинарной точности | |
VFMSUBADDPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 5F / r / is4 | Объединенное множительно-чередующееся вычитание / сложение упакованных значений с плавающей запятой двойной точности | |
VFMSUBADDPS1 xmm0,, xmm2, xmm3 | C4E3 WvvvvL01 / is 5 | Объединенное многократно-переменное вычитание / сложение упакованных значений с плавающей запятой одинарной точности | |
VFMSUBPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6D / r / is4 | Объединенное умножение-вычитание упакованных значений с плавающей запятой точности | |
VFMSUBPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6C / r / is4 | Объединенное умножение-вычитание упакованных с плавающей запятой одинарной точности | |
VFMSUBSD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6F / r / is4 | объединенное умножение-вычитание скалярных значений с плавающей запятой двойной точности | |
VFMSUBSS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6E / r / is4 | Fused Multiply -Вычет из скалярных значений с плавающей запятой одинарной точности | |
VFNMADDPD xmm0, xmm1, xmm2, xmm3 | C4E3 Wvv vvL01 79 / r / is4 | Объединенное отрицательное умножение - сложное запятой с плавающей двойной двойной величиной. точности | |
VFNMADDPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 78 / r / is4 | Объединенное отрицательное умножение упакованных значений с плавающей запятой одинарной точностью | |
VFNMADDSD xmm0, x, xmm3 | C4E3 WvvvvL01 7B / r / is4 | Сложенное отрицательное умножение-сложение скалярных значений с плавающей запятой двойной точности | |
VFNMADDSS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7A / r / is4 | Сложенное отрицательное умножение-сложение Скалярные значения с плавающей запятой одинарной то чности | |
VFNMSUBPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7D / r / is4 | Объединенное отрицательное умножение-вычитание упакованного числа с плавающей запятой двойной точности- Значения точек | |
VFNMSUBPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7C / r / is4 | Объединенное отрицательное умножение-вычитание упакованных данных с плавающей запятой одинарной точностью | |
VFNMSUBSD xmm0, xmm1, C4E3 WvvvvL01 7F / r / is4 | Объединенный отрицательный множитель y-вычитание скалярных значений с плавающей запятой двойной точности | | |
VFNMSUBSS xmm0, xmm1, xmm2, xmm3 | <215v>Cv4VL01 Wv4VL01 Wv 7E / r / is4Объединенное отрицательное умножение-вычитание скалярного одиночного -Точные значения с плавающей запятой |
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-битным использованием. |
Представлено в микроархитектуре 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 | Сдвиг вправо арифметически. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом. |
Представлено в Intel Xeon Phi x20053>
Векторные операции с 512-битными регистрами.
Инструкция | Описание |
---|---|
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 |
6 новых инструкций.
Инструкция | Описание |
---|---|
AESENC | Выполнить один цикл потока шифрования AES |
AESENCLAST | Выполнить последний цикл поток шифрования AES |
AESDEC | Выполнение одного цикла потока дешифрования AES |
AESDECLAST | Выполнение последнего цикла потока дешифрования AES |
AESKEYGENASSIST | Помощь в создании ключей цикла AES |
AESIMC | Помощь в столбцах обратного смешивания AES |
Инструкция | Описание |
---|---|
RDRAND | Чтение случайного числа |
RDSEED | Чтение случайного числа |
7 новых инструкций.
Инструкция | Описание |
---|---|
SHA1RNDS4 | Выполнение четырех циклов операции SHA1 |
SHA1NEXTE | Вычисление состояний SHA1 E после четырех циклов |
SHA1MSG1 | Выполнить промежуточное вычисление для следующих двух слов сообщения SHA1 |
SHA1MSG2 | Выполнить окончательное вычисление для следующих четырех двух слов сообщениями SHA1 |
SHA256RNDS2 | Выполнить два раунда операции SHA256 |
SHA256MSG1 | ите промежуточное вычисление для следующих четырех слов сообщениями SHA256 |
SHA256MSG2 | Выполните окончательное вычисление для следующих четырех слов сообщениями SHA256 |
ЦП x86 содержит недокументированные инструкции, которые реализованы в некоторых официальных документах. Их можно найти в различных источниках в Интернете, таких как Список прерываний Ральфа Брауна и на sandpile.org
Мнемоника | Код операции | Описание | Статус |
---|---|---|---|
AAM imm8 | D4 imm8 | Разделите AL на imm8, поместите частное в AH, а остаток в AL | Доступно, начиная с 8086, задокументированный начиная с Pentium (в более ранней документации аргументы не указаны) |
AAD imm8 | D5 imm8 | Умножение аналога AAM | Доступно, начиная с 8086, задокументировано, начиная с с Pentium (в более ранней документации не указаны аргументы) |
SALC | D6 | Установить AL в зависимости от значений флага переноса (1-байтовая альтернатива SBB AL, AL) | Доступно, начиная с 8086, но задокументировано только начиная с Pentium Pro. |
ICEBP | F1 | Однобайтное одношаговое исключение / 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 |
UD1 | 0F B9 | намеренно неопределенная инструкция, но в отличие от UD2 это была не опубликовано | |
ALTINST | 0F 3F | Переход и выполнение инструкций в недокументированном альтернативном наборе инструкций. | Доступно только на некоторых процессорах x86 производства VIA Technologies. |
FFREEP выполняет FFREE ST (i) и извлекает стек
В Wikibook x86 Assembly есть страница на тему: X86 Instructions |