Списки инструкций X86 - X86 instruction listings
эта статья может быть слишком долго читать и удобно ориентироваться.Ноябрь 2017 г.) ( |
В x86 Набор инструкций относится к набору инструкций, которые x86 -совместимый микропроцессоры поддержка. Инструкции обычно являются частью исполняемый файл программа, часто сохраняемая как компьютерный файл и выполняется на процессоре.
Набор инструкций x86 был расширен несколько раз, в результате чего регистры и типы данных, а также новые функции.[1]
целочисленные инструкции x86
Это полный набор команд Intel 8086/8088. Большинство, если не все эти инструкции доступны в 32-битном режиме; они просто работают с 32-битными регистрами (eax, ebxи т. д.) и значения вместо их 16-битных (топор, bxи др.) аналоги. Смотрите также язык ассемблера x86 для быстрого ознакомления с этим семейством процессоров. Обновленный набор инструкций также сгруппирован по архитектуре (i386, i486, i686 ) и в более общем смысле упоминается как x86 32 и x86 64 (также известен как AMD64 ).
Оригинальная инструкция для 8086/8088
Инструкция | Смысл | Заметки | Код операции |
---|---|---|---|
AAA | ASCII настроить AL после добавления | используется с распакованными двоично-десятичный код | 0x37 |
AAD | ASCII настроить AX перед делением | В таблице данных 8086/8088 представлена только версия базовой 10 инструкции AAD (код операции 0xD5 0x0A), но подойдет любая другая база. Более поздняя документация Intel также имеет общий вид. NEC V20 и V30 (и, возможно, другие процессоры NEC серии V) всегда используют основание 10 и игнорируют аргумент, что вызывает ряд несовместимостей. | 0xD5 |
AAM | ASCII настроить AX после умножения | Документирована только версия base 10 (операнд 0xA), см. Примечания для AAD. | 0xD4 |
ААС | ASCII настроить AL после вычитания | 0x3F | |
АЦП | Добавить с переносом | пункт назначения = пункт назначения + источник + carry_flag | 0x10… 0x15, 0x80… 0x81 / 2, 0x82… 0x83 / 2 (начиная с 80186) |
ДОБАВИТЬ | Добавить | (1) г / м + = г / имм; (2) г + = м / имм; | 0x00… 0x05, 0x80 / 0… 0x81 / 0, 0x82 / 0… 0x83 / 0 (с 80186) |
И | Логическое И | (1) r / m & = r / imm; (2) r & = m / imm; | 0x20… 0x25, 0x80… 0x81 / 4, 0x82… 0x83 / 4 (начиная с 80186) |
ВЫЗОВ | Процедура вызова | От себя eip; eip указывает на инструкцию сразу после вызова | 0x9A, 0xE8, 0xFF / 2, 0xFF / 3 |
CBW | Преобразовать байт в слово | 0x98 | |
CLC | ясно нести флаг | CF = 0; | 0xF8 |
CLD | ясно флаг направления | DF = 0; | 0xFC |
CLI | ясно флаг прерывания | ЕСЛИ = 0; | 0xFA |
CMC | Флаг переноса дополнения | 0xF5 | |
CMP | Сравнить операнды | 0x38… 0x3D, 0x80… 0x81 / 7, 0x82… 0x83 / 7 (начиная с 80186) | |
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 / м | 0x69, 0x6B (оба с 80186), 0xF7 / 5, 0xF6 / 5, 0x0FAF (с 80386) |
В | Вход из порта | (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 | |
В | Вызов для прерывания при переполнении | 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 | |
СПД | Указатель загрузки с помощью DS | 0xC5 | |
LEA | Загрузить эффективный адрес | 0x8D | |
LES | Загрузить ES с помощью указателя | 0xC4 | |
ЗАМОК | Подтвердить сигнал BUS LOCK # | (для многопроцессорности) | 0xF0 |
ЛОДСБ | Загрузить байт строки | если (DF==0) AL = *SI++; еще AL = *SI--; | 0xAC |
LODSW | Загрузить строковое слово | если (DF==0) ТОПОР = *SI++; еще ТОПОР = *SI--; | 0xAD |
LOOP / LOOPx | Контроль цикла | (LOOPE, LOOPNE, LOOPNZ, LOOPZ) если (Икс && --CX) перейти к фунт; | 0xE0… 0xE2 |
MOV | Шаг | копирует данные из одного места в другое, (1) г / м = г; (2) г = г / м; | 0xA0 ... 0xA3 |
МОВСБ | Переместить байт из строки в строку | если (DF==0) *(байт*)DI++ = *(байт*)SI++; еще *(байт*)DI-- = *(байт*)SI--; | 0xA4 |
MOVSW | Переместить слово из строки в строку | если (DF==0) *(слово*)DI++ = *(слово*)SI++; еще *(слово*)DI-- = *(слово*)SI--; | 0xA5 |
MUL | Беззнаковое умножение | (1) DX: AX = AX * r / m; (2) AX = AL * r / m; | 0xF7 / 4, 0xF6 / 4 |
NEG | Отрицание дополнения до двух | р/м *= -1; | 0xF6 / 3… 0xF7 / 3 |
NOP | Нет операции | код операции, эквивалентный XCHG EAX, EAX | 0x90 |
НЕ | Отменить операнд, логическое НЕ | р/м ^= -1; | 0xF6 / 2… 0xF7 / 2 |
ИЛИ | Логическое ИЛИ | (1) р/м |= р/имм; (2) р |= м/имм; | 0x08… 0x0D, 0x80… 0x81 / 1, 0x82… 0x83 / 1 (начиная с 80186) |
ВНЕ | Вывод в порт | (1) порт [imm] = AL; (2) порт [DX] = AL; (3) порт [imm] = AX; (4) порт [DX] = AX; | 0xE6, 0xE7, 0xEE, 0xEF |
Поп | Извлечь данные из стек | г / м = * СП ++; POP CS (код операции 0x0F) работает только на 8086/8088. Более поздние процессоры используют 0x0F в качестве префикса для новых инструкций. | 0x07, 0x0F (только 8086/8088), 0x17, 0x1F, 0x58… 0x5F, 0x8F / 0 |
POPF | Поп Регистр ФЛАГОВ из стека | ФЛАГИ = * SP ++; | 0x9D |
ОТ СЕБЯ | Помещать данные в стек | *--SP = р/м; | 0x06, 0x0E, 0x16, 0x1E, 0x50… 0x57, 0x68, 0x6A (оба с 80186), 0xFF / 6 |
PUSHF | Поместите ФЛАГИ в стек | *--SP = Флаги; | 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) г / м << = 1; (2) г / м << = 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… 0x81 / 3, 0x82… 0x83 / 3 (начиная с 80186) |
SCASB | Сравнить байтовую строку | 0xAE | |
SCASW | Сравнить строку слов | 0xAF | |
SHL | сдвиг влево (сдвиг без знака влево) | 0xC0… 0xC1 / 4 (начиная с 80186), 0xD0… 0xD3 / 4 | |
SHR | Сдвиг вправо (сдвиг вправо без знака) | 0xC0… 0xC1 / 5 (начиная с 80186), 0xD0… 0xD3 / 5 | |
STC | Установить флаг переноса | CF = 1; | 0xF9 |
ЗППП | Установить флаг направления | DF = 1; | 0xFD |
ИППП | Установить флаг прерывания | ЕСЛИ = 1; | 0xFB |
СТОСБ | Сохранить байт в строке | если (DF==0) *ES:DI++ = AL; еще *ES:DI-- = AL; | 0xAA |
STOSW | Сохранить слово в строке | если (DF==0) *ES:DI++ = ТОПОР; еще *ES:DI-- = ТОПОР; | 0xAB |
SUB | Вычитание | (1) r / m - = r / imm; (2) r - = м / имм; | 0x28… 0x2D, 0x80… 0x81 / 5, 0x82… 0x83 / 5 (начиная с 80186) |
ТЕСТОВОЕ ЗАДАНИЕ | Логическое сравнение (И) | (1) r / m & r / imm; (2) r & m / imm; | 0x84, 0x84, 0xA8, 0xA9, 0xF6 / 0, 0xF7 / 0 |
ПОДОЖДИТЕ | Подождите, пока не будет занято | Ожидает, пока вывод BUSY # не станет неактивным (используется с блок с плавающей запятой ) | 0x9B |
XCHG | Обмен данными | р :=: р/м; А спин-блокировка обычно использует xchg как атомная операция. (кома ошибка ). | 0x86, 0x87, 0x91… 0x97 |
XLAT | Перевод поиска по таблице | ведет себя как MOV AL, [BX + AL] | 0xD7 |
XOR | Эксклюзивный или | (1) г / м ^ = г / имм; (2) г ^ = м / имм; | 0x30… 0x35, 0x80… 0x81 / 6, 0x82… 0x83 / 6 (начиная с 80186) |
Добавлено в конкретных процессорах
Добавлено с 80186 /80188
Инструкция | Смысл | Заметки |
---|---|---|
СВЯЗАННЫЙ | Проверить индекс массива на соответствие границам | вызывает программное прерывание 5, если тест не пройден |
ВОЙТИ | Введите кадр стека | Изменяет стек для входа в процедуру для языка высокого уровня. Принимает два операнда: объем памяти, выделяемой в стеке, и уровень вложенности процедуры. |
INS | Ввод из порта в строку | эквивалентноВ (E)ТОПОР, DXMOV ES:[(E)DI], (E)ТОПОР; отрегулируйте (E) DI в соответствии с размером операнда и DF |
УЕХАТЬ | Оставить кадр стека | Освобождает локальное хранилище стека, созданное предыдущей инструкцией ENTER. |
ВЫХОДЫ | Строка вывода в порт | эквивалентноMOV (E)ТОПОР, DS:[(E)SI]ВНЕ DX, (E)ТОПОР; отрегулируйте (E) SI в соответствии с размером операнда и DF |
ПОПА | Извлечь из стека все регистры общего назначения | эквивалентноПоп DIПоп SIПоп BPПоп ТОПОР ; здесь нет POP SP, все, что он делает, это ДОБАВИТЬ SP, 2 (поскольку AX будет перезаписан позже)Поп BXПоп DXПоп CXПоп ТОПОР |
ПУША | Поместите все регистры общего назначения в стек | эквивалентноОТ СЕБЯ ТОПОРОТ СЕБЯ CXОТ СЕБЯ DXОТ СЕБЯ BXОТ СЕБЯ SP ; Сохраненное значение является начальным значением SP.ОТ СЕБЯ BPОТ СЕБЯ SIОТ СЕБЯ DI |
НАЖАТЬ немедленно | Немедленно поместить значение байта / слова в стек | эквивалентноОТ СЕБЯ 12чОТ СЕБЯ 1200 ч |
IMUL немедленно | Знаковое умножение непосредственного значения байта / слова | эквивалентноIMUL BX,12чIMUL DX,1200 чIMUL CX, DX, 12чIMUL BX, SI, 1200 чIMUL DI, слово ptr [BX+SI], 12чIMUL SI, слово ptr [BP-4], 1200 ч |
SHL / SHR / SAL / SAR / ROL / ROR / RCL / RCR немедленно | Повернуть / сдвинуть биты с немедленным значением больше 1 | эквивалентноROL ТОПОР,3SHR BL,3 |
Добавлено с 80286
Инструкция | Смысл | Заметки |
---|---|---|
ARPL | Настроить поле RPL селектора | |
CLTS | Очистить флаг переключения задачи в регистре CR0 | |
LAR | Загрузить байт прав доступа | |
LGDT | Загрузить глобальную таблицу дескрипторов | |
LIDT | Загрузить таблицу дескрипторов прерываний | |
LLDT | Загрузить локальную таблицу дескрипторов | |
LMSW | Загрузить слово состояния машины | |
ЗАГРУЗИТЬ | Загрузить все регистры процессора, включая внутренние, такие как GDT | Недокументированные, только 80286 и 80386 |
LSL | Ограничение сегмента нагрузки | |
LTR | Загрузить реестр задач | |
SGDT | Хранить глобальную таблицу дескрипторов | |
SIDT | Таблица дескрипторов прерываний | |
SLDT | Хранить локальную таблицу дескрипторов | |
SMSW | Слово состояния машины | |
STR | Реестр задач магазина | |
VERR | Проверить сегмент для чтения | |
VERW | Проверить сегмент на запись |
Добавлено с 80386
Инструкция | Смысл | Заметки |
---|---|---|
BSF | Битовое сканирование вперед | |
BSR | Битовое сканирование в обратном направлении | |
BT | Битовый тест | |
BTC | Битовый тест и дополнение | |
БТР | Битовый тест и сброс | |
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, так и (E) SI, в зависимости от 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 | Цикл при равенстве | если (cc && --ECX) goto lbl; , cc = Z(эро), E(qual), NнаZэро N(на)E(квалификация) |
MOV в / из CR / DR / TR | Переход в / из специальных регистров | CR = регистры управления, DR = регистры отладки, TR = тестовые регистры (до 80486) |
МОВСД | Переместить двойное слово строки | * (двойное слово *) ES: EDI ± ± = * (двойное слово *) ESI ± ±; (± ± зависит от DF); может иметь префикс REP |
MOVSX | Перемещение со знаком-расширением | (длинный) r = (знаковый символ) r / m; и подобные |
MOVZX | Перемещение с нулевым расширением | (длинный) r = (unsigned char) r / m; и подобные |
OUTSD | Вывод в порт из строкового двойного слова | порт [DX] = * (long *) ESI ± ±; (± ± зависит от DF) |
ПОПАД | Извлечь из стека все регистры двойного слова (32-битные) | Не выталкивает регистр ESP из стека |
ПОПФД | Вставить данные в регистр EFLAGS | |
ПУШАД | Помещать все регистры двойного слова (32-битные) в стек | |
ПУШФД | Поместить регистр 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 | Сдвиг влево двойное слово | |
SHRD | Сдвиг вправо двойное слово | r1 = r1 >> CL ∣ r2 << (32-CL); Вместо CL можно использовать сразу 1 |
STOSD | Двойное слово в строке | * ES: EDI ± ± = EAX; (± ± зависит от DF, ES не может быть отменен); может иметь префикс REP |
XBTS | Извлечь битовую строку | снято с производства с шагом B1 80386 |
Добавлено с 80486
Инструкция | Смысл | Заметки |
---|---|---|
BSWAP | Обмен байтами | р = р<<24 | р<<8&0x00FF0000 | р>>8&0x0000FF00 | р>>24; Определен только для 32-битных регистров. Обычно используется для переключения между прямым порядком байтов и прямым порядком байтов. При использовании с 16-битными регистрами дает разные результаты на 486,[2] 586, и Bochs /QEMU.[3] |
CMPXCHG | АТОМНАЯ КОМПАРАТУРА И ОБСЛУЖИВАНИЕ | Увидеть Сравнить и обменять / на более поздних версиях 80386, как доступен недокументированный код операции |
INVD | Аннулировать внутренние кеши | Очистить внутренние кеши |
INVLPG | Признать недействительным TLB Вход | Недействительная запись TLB для страницы, содержащей указанные данные |
WBINVD | Обратная запись и недействительный кеш | Записывает все измененные строки кэша во внутреннем кэше процессора в основную память и делает недействительными внутренние кэши. |
XADD | Обмен и ДОБАВИТЬ | Меняет первый операнд вторым операндом, затем загружает сумму двух значений в операнд-адресат. |
Добавлено с Pentium
Инструкция | Смысл | Заметки |
---|---|---|
CPUID | Идентификация процессора | Возвращает данные, касающиеся идентификации процессора и его функций, и возвращает данные в регистры EAX, EBX, ECX и EDX. Функции инструкций, указанные в регистре EAX.[1] Это также было добавлено позже 80486 процессоры |
CMPXCHG8B | СОПРЯЖЕНИЕ И ОБСЛУЖИВАНИЕ 8 байтов | Сравните EDX: EAX с m64. Если равно, установите ZF и загрузите ECX: EBX в m64. В противном случае очистите ZF и загрузите m64 в EDX: EAX. |
RDMSR | Читать от Реестр для конкретной модели | Загрузить MSR указано ECX в EDX: EAX |
RDTSC | Счетчик отметок времени ReaD | Возвращает количество тактов процессора с тех пор, как процессор был "ОНЛАЙН" (с момента последнего включения системы). |
WRMSR | ЗАПИСЬ в регистр конкретной модели | Запишите значение в EDX: EAX в MSR указанный ECX |
RSM[4] | Возобновить из режима управления системой | Это было введено i386SL и позже и также находится в i486SL и позже. Резюме от Режим управления системой (SMM) |
Добавлено с Pentium MMX
Инструкция | Смысл | Заметки |
---|---|---|
RDPMC | Прочтите PMC [счетчик мониторинга производительности] | Указывается в регистре ECX в регистрах EDX: EAX |
Также были добавлены регистры MMX и инструкции поддержки MMX. Их можно использовать как для операций с целыми числами, так и для операций с плавающей запятой, см. Ниже.
Добавлено с AMD K6
Инструкция | Смысл | Заметки |
---|---|---|
SYSCALL | функционально эквивалентен SYSENTER | |
SYSRET | функционально эквивалентен SYSEXIT |
AMD изменила бит определения CPUID для этой функции с K6-II.
Добавлено с Pentium Pro
Инструкция | Смысл | Заметки |
---|---|---|
CMOVcc | Условный ход | (CMOVA, CMOVAE, CMOVB, CMOVBE, CMOVC, CMOVE, CMOVG, CMOVGE, CMOVL, CMOVLE, CMOVNA, CMOVNAE, CMOVNB, CMOVNBE, CMOVNC, CMOVNE, CMOVNG, CMOVNGE, CMOVNLOV, CMOVNLE, CMOVNO, CMOVNOV, CMOVNO , CMOVP, CMOVPE, CMOVPO, CMOVS, CMOVZ) |
UD2 | Неопределенная инструкция | Создает исключение недопустимого кода операции. Эта инструкция предназначена для тестирования программного обеспечения для явной генерации недопустимого кода операции. Код операции для этой инструкции зарезервирован для этой цели. |
Добавлено с Pentium II
Инструкция | Смысл | Заметки |
---|---|---|
SYSENTER | SYStem вызов ENTER | Эта инструкция, которую иногда называют инструкцией быстрого системного вызова, была предназначена для повышения производительности вызовов операционной системы. Обратите внимание, что на Pentium Pro CPUID Инструкция неверно сообщает об этих инструкциях как о наличии. |
SYSEXIT | SYStem вызов EXIT |
Добавлено с SSE
Инструкция | Код операции | Смысл | Заметки |
---|---|---|---|
NOP г / м16 | 0F 1F / 0 | Многобайтовая инструкция бездействия. | |
NOP г / м32 | |||
PREFETCHT0 | 0F 18/1 | Предварительная выборка данных с адреса | Предварительная выборка на всех уровнях кеша |
PREFETCHT1 | 0F 18/2 | Предварительная выборка данных с адреса | Предварительная выборка на всех уровнях кеша, ЗА ИСКЛЮЧЕНИЕМ[5][6] L1 |
PREFETCHT2 | 0F 18/3 | Предварительная выборка данных с адреса | Предварительная выборка во все уровни кеша, ЗА ИСКЛЮЧЕНИЕМ L1 и L2 |
PREFETCHNTA | 0F 18/0 | Предварительная выборка данных с адреса | Предварительная выборка в невременную структуру кеша, сводя к минимуму загрязнение кеша. |
SFENCE | 0F AE F8 | Магазин Забор | Подсказка процессора, чтобы убедиться, что все операции хранилища, которые имели место до вызова SFENCE, видны глобально |
Добавлено с SSE2
Инструкция | Код операции | Смысл | Заметки |
---|---|---|---|
CLFLUSH m8 | 0F AE / 7 | Очистка строки кэша | Делает недействительной строку кэша, содержащую линейный адрес, указанный в исходном операнде со всех уровней иерархии кэша процессора. |
LFENCE | 0F AE E8 | Загрузить забор | Сериализует операции загрузки. |
MFENCE | 0F AE F0 | Забор Памяти | Выполняет операцию сериализации для всех инструкций загрузки и сохранения, которые были выданы до инструкции MFENCE. |
МОВНТИ м32, р32 | 0F C3 / r | Переместить двойное слово вне времени | Переместите двойное слово из r32 в m32, минимизируя загрязнение иерархии кеша. |
ПАУЗА | F3 90 | Подсказка Spin Loop | Дает подсказку процессору, что следующий код является циклом вращения, для кэшируемости |
Добавлено с SSE3
Инструкция | Смысл | Заметки |
---|---|---|
МОНИТОР EAX, ECX, EDX | Настройка адреса монитора | Устанавливает линейный диапазон адресов для аппаратного контроля и активирует монитор. |
MWAIT EAX, ECX | Монитор Подождите | Подсказка процессора для остановки выполнения инструкций и перехода в оптимизированное состояние, зависящее от реализации, до возникновения класса событий. |
Добавлено с SSE4.2
Инструкция | Код операции | Смысл | Заметки |
---|---|---|---|
CRC32 r32, r / m8 | F2 0F 38 F0 / r | Накопить 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 |
Добавлено с x86-64
Инструкция | Смысл | Заметки |
---|---|---|
CDQE | Знак расширить EAX в RAX | |
CQO | Знак расширить RAX в RDX: RAX | |
CMPSQ | CoMPare String Quadword | |
CMPXCHG16B | СОПРЯЖЕНИЕ И ОБСЛУЖИВАНИЕ 16 Байт | |
IRETQ | 64-битный возврат из прерывания | |
JRCXZ | Перейти, если RCX равен нулю | |
LODSQ | LoaD String Quadword | |
MOVSXD | MOV с Sign Extend с 32-разрядной до 64-разрядной версии | |
POPFQ | POP RFLAGS Реестр | |
PUSHFQ | PUSH RFLAGS Реестр | |
RDTSCP | Счетчик отметок времени ReaD и идентификатор процессора | |
SCASQ | SCAn String Quadword | |
STOSQ | STOre String Quadword | |
СВОПЫ | Обменять базу GS с KernelGSBase MSR |
Добавлено с AMD-V
Инструкция | Смысл | Заметки | Код операции |
---|---|---|---|
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 |
СКИНИТ | Безопасный запуск и переход с аттестацией | Поддающийся проверке запуск надежного программного обеспечения на основе безопасного сравнения хэшей | 0x0F 0x01 0xDE |
СТГИ | Установить глобальный флаг прерывания | Устанавливает 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 |
Добавлено с Intel VT-x
Инструкция | Смысл | Заметки | Код операции |
---|---|---|---|
ИНВЕПТ | Недействительные переводы, полученные из EPT | Делает недействительными записи, производные от EPT, в TLB и кэшах структуры подкачки. | 0x66 0x0F 0x38 0x80 |
INVVPID | Недействительный перевод на основе VPID | Делает недействительными записи в TLB и кэшах структуры подкачки на основе VPID. | 0x66 0x0F 0x38 0x80 |
VMFUNC | Вызов функции ВМ | Вызов функции 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 | Вызов монитора ВМ | Вызывает функцию монитора ВМ из гостевой системы | 0x0F 0x01 0xC1 |
VMLAUNCH | Запустить виртуальную машину | Запустить виртуальную машину под управлением текущей VMCS | 0x0F 0x01 0xC2 |
VMRESUME | Возобновить виртуальную машину | Возобновить виртуальную машину под управлением текущей VMCS | 0x0F 0x01 0xC3 |
VMXOFF | Выйти из работы VMX | Останавливает аппаратно поддерживаемую среду виртуализации | 0x0F 0x01 0xC4 |
VMXON | Войдите в операцию VMX | Переход в среду виртуализации с аппаратной поддержкой | 0xF3 0x0F 0xC7 / 6 |
Добавлено с ПРО
LZCNT, POPCNT (POPulation CouNT) - расширенная обработка битов
Добавлено с ИМТ1
ANDN, BEXTR, BLSI, BLSMSK, BLSR, TZCNT
Добавлено с ИМТ2
BZHI, MULX, PDEP, PEXT, RORX, SARX, SHRX, SHLX
Добавлено с TBM
AMD представила TBM вместе с BMI1 в своем Копер[7] линейка процессоров; более поздние процессоры AMD Jaguar и Zen не поддерживают TBM.[8] Ни один из процессоров Intel (по состоянию на 2020 год) не поддерживает TBM.
Инструкция | Описание[9] | Эквивалентное выражение C[10] |
---|---|---|
BEXTR | Извлечение битового поля (с немедленным) | (src >> начало) & ((1 << len) - 1) |
BLCFILL | Заполните с самого нижнего бита | х & (х + 1) |
BLCI | Изолировать самый низкий бит | х | ~ (х + 1) |
BLCIC | Изолировать самый низкий бит и дополнить | ~ х & (х + 1) |
BLCMSK | Маска от самого низкого бита | х ^ (х + 1) |
BLCS | Установить самый низкий бит очистки | х | (х + 1) |
BLSFILL | Заполните с самого низкого установленного бита | х | (х - 1) |
BLSIC | Изолировать младший установленный бит и дополнить | ~ x | (х - 1) |
T1MSKC | Обратная маска от замыкающих | ~ x | (х + 1) |
ТЗМСК | Маска из конечных нулей | ~ х & (х - 1) |
Добавлено с Набор инструкций CLMUL
Инструкция | Код операции | Описание |
---|---|---|
PCLMULQDQ xmmreg, xmmrm, imm | 66 0f 3a 44 / r ib | Произвести умножение без переноса двух 64-битных многочленов над конечным полем GF(2k). |
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 | Умножьте старшие половины двух регистров. |
Добавлено с Intel ADX
Инструкция | Описание |
---|---|
ADCX | Добавляет два целых числа без знака плюс перенос, считывая перенос из флага переноса и при необходимости устанавливая его там. Не влияет на другие флаги, кроме переноса. |
ADOX | Добавляет два целых числа без знака плюс перенос, считывая перенос из флага переполнения и при необходимости устанавливая его там. Не влияет на другие флаги, кроме переполнения. |
x87 инструкции с плавающей запятой
Оригинал 8087 инструкции
Инструкция | Смысл | Заметки |
---|---|---|
F2XM1 | точнее, чем для Икс близко к нулю | |
FABS | Абсолютная величина | |
FADD | Добавить | |
FADDP | Добавить и поп | |
FBLD | Загрузить BCD | |
FBSTP | Хранить BCD и pop | |
FCHS | Изменить знак | |
FCLEX | Очистить исключения | |
FCOM | Сравнить | |
FCOMP | Сравните и поп | |
FCOMPP | Сравните и нажмите дважды | |
FDECSTP | Уменьшить указатель стека с плавающей запятой | |
FDISI | Отключить прерывания | Только 8087, иначе FNOP |
FDIV | Делить | Ошибка Pentium FDIV |
FDIVP | Разделить и поп | |
FDIVR | Разделить наоборот | |
FDIVRP | Разделить перевернутый и поп | |
FENI | Разрешить прерывания | Только 8087, иначе FNOP |
БЕСПЛАТНО | Бесплатная регистрация | |
FIADD | Целочисленное сложение | |
FICOM | Целочисленное сравнение | |
FICOMP | Целочисленное сравнение и поп | |
ФИДИВ | Целочисленное деление | |
ФИДИВР | Целочисленное деление перевернуто | |
FILD | Загрузить целое число | |
ФИМУЛ | Целочисленное умножение | |
FINCSTP | Увеличить указатель стека с плавающей запятой | |
FINIT | Инициализировать процессор с плавающей запятой | |
Кулак | Целое число магазина | |
FISTP | Целочисленное и поп | |
FISUB | Целочисленное вычитание | |
FISUBR | Обратное целочисленное вычитание | |
FLD | Нагрузка с плавающей запятой | |
FLD1 | Загрузить 1.0 в стек | |
FLDCW | Слово управления нагрузкой | |
FLDENV | Загрузить состояние среды | |
FLDENVW | Состояние среды загрузки, 16 бит | |
FLDL2E | Загрузить журнал2(е) в стек | |
FLDL2T | Загрузить журнал2(10) в стек | |
FLDLG2 | Загрузить журнал10(2) в стек | |
FLDLN2 | Загрузить пер (2) в стек | |
FLDPI | Загрузить π в стек | |
ФЛДЗ | Загрузить 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 | Частичный арктангенс | |
ФПРЕМ | Частичный остаток | |
FPTAN | Частичная касательная | |
FRNDINT | Округлить до целого числа | |
FRSTOR | Восстановить сохраненное состояние | |
FRSTORW | Восстановить сохраненное состояние | Возможно, на самом деле недоступен в 8087 |
FSAVE | Сохранить состояние FPU | |
FSAVEW | Сохранить состояние FPU, 16 бит | |
FSCALE | Масштабировать в 2 раза | |
FSQRT | Квадратный корень | |
FST | Магазин с плавающей запятой | |
FSTCW | Управляющее слово магазина | |
FSTENV | Хранить среду FPU | |
FSTENVW | Хранить среду FPU, 16 бит | |
FSTP | Магазин и поп | |
FSTSW | Слово состояния магазина | |
FSUB | Вычесть | |
ФСУБП | Вычесть и поп | |
ФСУБР | Обратное вычитание | |
ФСУБРП | Обратное вычитание и поп | |
FTST | Тест на ноль | |
FWAIT | Подождите, пока выполняется FPU | |
FXAM | Проверить флаги условий | |
FXCH | Биржевые регистры | |
FXTRACT | Извлечь экспоненту и мантиссу | |
FYL2X | у · журнал2 Икс | если у = журналб 2, то база-б логарифм вычисляется |
FYL2XP1 | у · журнал2 (Икс+1) | точнее, чем журнал2 z если x близко к нулю |
Добавлено в конкретных процессорах
Добавлено с 80287
Инструкция | Смысл | Заметки |
---|---|---|
FSETPM | Установить защищенный режим | Только 80287, иначе FNOP |
Добавлено с 80387
Инструкция | Смысл | Заметки |
---|---|---|
FCOS | Косинус | |
ФЛДЕНВД | Состояние загрузки среды, 32-бит | |
FSAVED | Сохранить состояние FPU, 32-бит | |
FPREM1 | Частичный остаток | Вычисляет остаток IEEE |
FRSTORD | Восстановить сохраненное состояние, 32-бит | |
ФСИН | Синус | |
ФСИНКОС | Синус и косинус | |
ФСТЕНВД | Среда Store FPU, 32-битная | |
FUCOM | Неупорядоченное сравнение | |
FUCOMP | Неупорядоченное сравнение и поп | |
FUCOMPP | Неупорядоченное сравнение и два раза |
Добавлено с Pentium Pro
- FCMOV варианты: FCMOVB, FCMOVBE, FCMOVE, FCMOVNB, FCMOVNBE, FCMOVNE, FCMOVNU, FCMOVU
- FCOMI варианты: FCOMI, FCOMIP, FUCOMI, FUCOMIP
Добавлено с SSE
FXRSTOR, FXSAVE
Они также поддерживаются более поздними версиями Pentium II, которые не содержат поддержки SSE.
Добавлено с SSE3
FISTTP (преобразование x87 в целое число с усечением независимо от слова состояния)
SIMD инструкции
MMX инструкции
Команды MMX работают с регистрами mm, которые имеют ширину 64 бита. Они используются совместно с регистрами FPU.
Оригинальные инструкции MMX
Добавлено с Pentium MMX
Инструкция | Код операции | Смысл | Заметки |
---|---|---|---|
EMMS | 0F 77 | Пустое состояние технологии MMX | Помечает все регистры x87 FPU для использования FPU |
МОВД мм, об / м 32 | 0F 6E / r | Переместить двойное слово | |
МОВД r / m32, мм | 0F 7E / r | Переместить двойное слово | |
MOVQ мм / м64, мм | 0F 7F / r | Переместить четверное слово | |
MOVQ мм, мм / м 64 | 0F 6F / r | Переместить четверное слово | |
MOVQ мм, об / м 64 | 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 | Добавить упакованные байтовые целые числа | |
PADDW мм, мм / м 64 | 0F FD / r | Добавить упакованные целые слова | |
PADDD мм, мм / м 64 | 0F FE / r | Добавить упакованные целые числа с двойным словом | |
PADDQ мм, мм / м 64 | 0F D4 / r | Добавить упакованные целые числа четверного слова | |
PADDSB мм, мм / м 64 | 0F EC / r | Добавить упакованные байтовые целые числа со знаком и насыщать | |
PADDSW мм, мм / м 64 | 0F ED / г | Добавить упакованные целые числа со знаком и заполнить | |
PADDUSB мм, мм / м 64 | 0F DC / r | Добавить упакованные байтовые целые числа без знака и насыщать | |
PADDUSW мм, мм / м 64 | 0F ДД / г | Добавить упакованные целые числа без знака и насыщать | |
PAND мм, мм / м 64 | 0F DB / r | Побитовое И | |
PANDN мм, мм / м 64 | 0F DF / r | Побитовое И НЕ | |
POR мм, мм / м 64 | 0F EB / r | Побитовое ИЛИ | |
PXOR мм, мм / м 64 | 0F EF / r | Побитовое исключающее ИЛИ | |
PCMPEQB мм, мм / м64 | 0F 74 / г | Сравните упакованные байты на предмет равенства | |
PCMPEQW мм, мм / м64 | 0F 75 / r | Сравните упакованные слова на предмет равенства | |
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 мм, мм / м 64 | 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 | Сдвиг влево двойных слов, сдвиг нулей | |
PSLLD мм, мм / м 64 | 0F F2 / r | Сдвиг влево двойных слов, сдвиг нулей | |
PSLLQ мм, imm8 | 0F 73/6 ib | Сдвиг влево четверное слово, сдвиг нулей | |
PSLLQ мм, мм / м 64 | 0F F3 / r | Сдвиг влево четверное слово, сдвиг нулей | |
PSRAD мм, imm8 | 0F 72/4 ib | Сдвиг вправо двойных слов, сдвиг в знаковых битах | |
ПСРАД мм, мм / м 64 | 0F E2 / r | Сдвиг вправо двойных слов, сдвиг в знаковых битах | |
PSRAW мм, imm8 | 0F 71/4 ib | Сдвиг правых слов, сдвиг знаковых битов | |
PSRAW мм, мм / м 64 | 0F E1 / r | Сдвиг правых слов, сдвиг знаковых битов | |
PSRLW мм, imm8 | 0F 71/2 ib | Сдвиг правых слов, сдвиг нулей | |
PSRLW мм, мм / м 64 | 0F D1 / r | Сдвиг правых слов, сдвиг нулей | |
ПСРЛД мм, imm8 | 0F 72/2 ib | Сдвиг двойных слов вправо, сдвиг нулей | |
ПСРЛД мм, мм / м 64 | 0F D2 / r | Сдвиг двойных слов вправо, сдвиг нулей | |
PSRLQ мм, imm8 | 0F 73/2 ib | Сдвиг правого четверного слова, сдвиг нулей | |
ПСРЛК мм, мм / м 64 | 0F D3 / r | Сдвиг правого четверного слова, сдвиг нулей | |
PSUBB мм, мм / м 64 | 0F F8 / r | Вычесть упакованные байтовые целые числа | |
PSUBW мм, мм / м 64 | 0F F9 / r | Вычесть целые числа упакованных слов | |
ПСУБД мм, мм / м 64 | 0F FA / r | Вычесть упакованные целые числа двойного слова | |
ПСУБСБ мм, мм / м 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 / г | Распаковывать и чередовать младшие слова | |
PUNPCKLDQ мм, мм / м32 | 0F 62 / r | Распаковывать и чередовать двойные слова младшего разряда |
Инструкции MMX добавлены в определенные процессоры
EMMI инструкции
Добавлено с 6x86MX от Cyrix, сейчас не рекомендуется
PAVEB, PADDSIW, PMAGW, PDISTIB, PSUBSIW, PMVZB, PMULHRW, PMVNZB, PMVLZB, PMVGEZB, PMULHRIW, PMACHRIW
Инструкции MMX добавлены с MMX + и SSE
Следующая инструкция MMX была добавлена с SSE. Они также доступны на Athlon под названием MMX +.
Инструкция | Код операции | Смысл |
---|---|---|
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, мм, imm8 | 0F C5 / r | Извлечь слово |
ПМОВМСКБ рег, мм | 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 | Минимум упакованных целых чисел со знаком со знаком |
PMAXSW мм1, мм2 / м64 | 0F EE / r | Максимум упакованных целых чисел со знаком со знаком |
PSADBW мм1, мм2 / м64 | 0F F6 / r | Вычислить сумму абсолютных разностей |
Инструкции MMX добавлены с SSE2
Следующие инструкции MMX были добавлены с SSE2:
Инструкция | Код операции | Смысл |
---|---|---|
PSUBQ мм1, мм2 / м64 | 0F FB / r | Вычесть четверное слово целое |
PMULUDQ мм1, мм2 / м64 | 0F F4 / r | Умножение беззнакового двойного слова на целое |
Инструкции MMX добавлены с SSSE3
Инструкция | Код операции | Смысл |
---|---|---|
PSIGNB мм1, мм2 / м64 | 0F 38 08 / г | Отрицать / обнулять / сохранять упакованные байтовые целые числа в зависимости от соответствующего знака |
PSIGNW мм1, мм2 / м64 | 0F 38 09 / г | Отрицать / обнулять / сохранять целые числа в сжатом виде в зависимости от соответствующего знака |
PSIGND мм1, мм2 / м64 | 0F 38 0A / г | Отрицать / обнулять / сохранять упакованные целые числа двойного слова в зависимости от соответствующего знака |
ПШУФБ мм1, мм2 / м64 | 0F 38 00 / г | Перемешать байты |
PMULHRSW мм1, мм2 / м64 | 0F 38 0B / r | Умножение 16-битных слов со знаком, масштабирование и округление двойных слов со знаком, упаковка старших 16 бит |
PMADDUBSW мм1, мм2 / м64 | 0F 38 04 / г | Умножение подписанных и беззнаковых байтов, добавление горизонтальной пары подписанных слов, упаковка насыщенных подписанных слов |
PHSUBW мм1, мм2 / м64 | 0F 38 05 / г | Вычесть и упаковать 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 / г | Сложите и упакуйте 16-разрядные целые числа со знаком по горизонтали, упакуйте насыщенные целые числа в мм1. |
PHADDW мм1, мм2 / м64 | 0F 38 01 / г | Сложить и упаковать 16-битные целые числа по горизонтали |
PHADDD мм1, мм2 / м64 | 0F 38 02 / г | Сложить и упаковать 32-битные целые числа по горизонтали |
PALIGNR мм1, мм2 / м64, imm8 | 0F 3A 0F / r ib | Объединить целевые и исходные операнды, извлечь результат, выровненный по байтам, смещенный вправо |
ПАБСБ мм1, мм2 / м64 | 0F 38 1C / r | Вычислить абсолютное значение байтов и сохранить результат без знака |
PABSW мм1, мм2 / м64 | 0F 38 1D / r | Вычислить абсолютное значение 16-битных целых чисел и сохранить результат без знака |
ПАБСД мм1, мм2 / м64 | 0F 38 1E / r | Вычислить абсолютное значение 32-битных целых чисел и сохранить результат без знака |
3DNow! инструкции
Добавлено с К6-2
FEMMS, PAVGUSB, PF2ID, PFACC, PFADD, PFCMPEQ, PFCMPGE, PFCMPGT, PFMAX, PFMIN, PFMUL, PFRCP, PFRCPIT1, PFRCPIT2, PFRSQIT1, PFRSQRT, PFSUB, PIETCHWFSW, PFRSQRT, PFSUB, PFRFWF
3DNow! + Инструкция
Добавлено с Athlon и К6-2 +
PF2IW, PFNACC, PFPNACC, PI2FW, PSWAPD
Добавлено с Geode GX
PFRSQRTV, PFRCPV
SSE инструкции
Добавлено с Pentium III
Инструкции SSE работают с регистрами xmm, ширина которых составляет 128 бит.
SSE состоит из следующих инструкций с плавающей запятой SSE SIMD:
Инструкция | Код операции | Смысл |
---|---|---|
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 / г | Перемещение невыровненных упакованных значений с плавающей запятой одинарной точности |
MOVSS xmm1, xmm2 / m32 | F3 0F 10 / г | Перемещение скалярных значений с плавающей запятой одинарной точности |
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, x мм | 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, xмм | 0F 17 / r | Перемещение значений с плавающей запятой одинарной точности с высокой степенью упаковки |
MOVAPS xmm1, xmm2 / m128 | 0F 28 / r | Перемещение выровненных упакованных значений с плавающей запятой одинарной точности |
MOVAPS xmm2 / m128, xmm1 | 0F 29 / r | Перемещение выровненных упакованных значений с плавающей запятой одинарной точности |
MOVNTPS m128, xmm1 | 0F 2B / r | Move Aligned Four Packed Single-FP Non Temporal |
MOVMSKPS reg, xmm | 0F 50 / г | Извлечь упакованную 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, xмм | 0F 2B / r | Сохранение упакованных значений с плавающей запятой одинарной точности с использованием вневременных подсказок |
CVTTPS2PI мм, xмм / м64 | 0F 2C / r | Преобразование с усечением упакованных значений FP одинарной точности в упакованные целые числа двойного слова |
CVTTSS2SI r32, мм / м32 | F3 0F 2C / r | Преобразование со скалярным значением FP одинарной точности с усечением в целое число двойного слова |
CVTTSS2SI r64, мм1 / м32 | F3 REX.W 0F 2C / r | Преобразование с усечением скалярного значения FP с одинарной точностью в целое число Qword |
CVTPS2PI мм, xмм / м64 | 0F 2D / r | Преобразование упакованных значений FP с одинарной точностью в упакованные целые числа двойного слова |
CVTSS2SI r32, мм / м32 | F3 0F 2D / r | Преобразование скалярного значения FP с одинарной точностью в целое число двойного слова |
CVTSS2SI r64, мм1 / м32 | F3 REX.W 0F 2D / r | Преобразование скалярного значения FP одинарной точности в целое число Qword |
UCOMISS xmm1, xmm2 / m32 | 0F 2E / r | Неупорядоченное сравнение скалярных значений с плавающей запятой одинарной точности и установка EFLAGS |
КОМИССЫ xmm1, xmm2 / m32 | 0F 2F / r | Сравните скалярные упорядоченные значения с плавающей запятой одинарной точности и установите EFLAGS |
SQRTPS xmm1, xmm2 / m128 | 0F 51 / r | Вычисление квадратного корня из упакованных значений с плавающей запятой одинарной точности |
SQRTSS xmm1, xmm2 / m32 | F3 0F 51 / г | Вычислить квадратный корень из скалярного значения с плавающей запятой одинарной точности |
RSQRTPS xmm1, xmm2 / m128 | 0F 52 / r | Вычисление обратного квадратного корня упакованного значения с плавающей запятой одинарной точности |
RSQRTSS xmm1, xmm2 / m32 | F3 0F 52 / г | Вычислить обратную величину квадратного корня скалярного значения с плавающей запятой одинарной точности |
RCPPS xmm1, xmm2 / m128 | 0F 53 / г | Вычисление взаимных значений упакованных значений с плавающей запятой одинарной точности |
RCPSS xmm1, xmm2 / m32 | F3 0F 53 / г | Вычисление обратных значений скалярных значений с плавающей запятой одинарной точности |
ADDPS xmm1, xmm2 / m128 | 0F 58 / r | Добавление упакованных значений с плавающей запятой одинарной точности |
ADDSS xmm1, xmm2 / m32 | F3 0F 58 / r | Добавление скалярных значений с плавающей запятой одинарной точности |
МУЛЬПЫ 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 x мм1, x мм2 / м 128 | 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 | Сравните скалярные значения с плавающей запятой одинарной точности |
ШУФПС xmm1, xmm2 / m128, imm8 | 0F C6 / r ib | Перемешать упакованные значения с плавающей запятой одинарной точности |
- Одинарные побитовые операции с плавающей запятой ANDPS, ANDNPS, ORPS и XORPS дают тот же результат, что и целые числа SSE2 (PAND, PANDN, POR, PXOR) и двойные (ANDPD, ANDNPD, ORPD, XORPD), но могут привести к дополнительной задержке для домена изменяется при применении значений неправильного типа.[11]
SSE2 инструкции
Добавлено с Pentium 4
SSE2 SIMD инструкции с плавающей запятой
Инструкции по перемещению данных SSE2
Инструкция | Код операции | Смысл |
---|---|---|
MOVAPD xmm1, xmm2 / m128 | 66 0F 28 / r | Перемещение выровненных упакованных значений с плавающей запятой двойной точности |
MOVAPD x мм2 / м 128, x мм1 | 66 0F 29 / r | Перемещение выровненных упакованных значений с плавающей запятой двойной точности |
MOVNTPD m128, xmm1 | 66 0F 2B / r | Сохранение упакованных значений с плавающей запятой двойной точности с помощью вневременных подсказок |
МОВХПД 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 / г | Перемещение невыровненных упакованных значений с плавающей запятой двойной точности |
MOVUPD xmm2 / m128, xmm1 | 66 0F 11 / r | Перемещение невыровненных упакованных значений с плавающей запятой двойной точности |
MOVMSKPD reg, xmm | 66 0F 50 / р | Экстракт упакованной маски знака с плавающей запятой двойной точности |
MOVSD * xmm1, xmm2 / m64 | F2 0F 10 / г | Перемещение или объединение скалярных значений с плавающей запятой двойной точности |
MOVSD xmm1 / m64, xmm2 | F2 0F 11 / r | Перемещение или объединение скалярных значений с плавающей запятой двойной точности |
Упакованные арифметические инструкции SSE2
Инструкция | Код операции | Смысл |
---|---|---|
ADDPD xmm1, xmm2 / m128 | 66 0F 58 / r | Добавление упакованных значений с плавающей запятой двойной точности |
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 x мм1, x мм2 / м 128 | 66 0F 5F / r | Максимум упакованных значений с плавающей запятой двойной точности |
MAXSD xmm1, xmm2 / m64 | F2 0F 5F / r | Возвращает максимальное скалярное значение с плавающей запятой двойной точности |
MINPD xmm1, xmm2 / m128 | 66 0F 5D / r | Минимум упакованных значений с плавающей запятой двойной точности |
МИНСД xmm1, xmm2 / m64 | F2 0F 5D / r | Вернуть минимальное скалярное значение с плавающей запятой двойной точности |
MULPD xmm1, xmm2 / m128 | 66 0F 59 / r | Мультиупакованные значения с плавающей запятой двойной точности |
MULSD xmm1, xmm2 / m64 | F2 0F 59 / r | Умножение скалярного значения с плавающей запятой двойной точности |
SQRTPD xmm1, xmm2 / m128 | 66 0F 51 / г | Квадратный корень из значений с плавающей запятой двойной точности |
SQRTSD xmm1, xmm2 / m64 | F2 0F 51 / г | Вычислить квадратный корень из скалярного значения с плавающей запятой двойной точности |
SUBPD xmm1, xmm2 / m128 | 66 0F 5C / r | Вычитание упакованных значений с плавающей запятой двойной точности |
SUBSD xmm1, xmm2 / m64 | F2 0F 5C / r | Вычесть скалярное значение с плавающей запятой двойной точности |
Логические инструкции SSE2
Инструкция | Код операции | Смысл |
---|---|---|
ANDPD xmm1, xmm2 / m128 | 66 0F 54 / р | Побитовое логическое И упакованных значений с плавающей запятой двойной точности |
ANDNPD xmm1, xmm2 / m128 | 66 0F 55 / р | Побитовая логика, а не упакованные значения с плавающей запятой двойной точности |
ORPD xmm1, xmm2 / m128 | 66 0F 56 / r | Побитовое логическое ИЛИ упакованных значений с плавающей запятой двойной точности |
XORPD xmm1, xmm2 / m128 | 66 0F 57 / r | Побитовое логическое исключающее ИЛИ упакованных значений с плавающей запятой двойной точности |
SSE2 сравнить инструкции
Инструкция | Код операции | Смысл |
---|---|---|
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 |
SSE2 инструкции по перемешиванию и распаковке
Инструкция | Код операции | Смысл |
---|---|---|
ШУФПД xmm1, xmm2 / m128, imm8 | 66 0F C6 / r ib | Упакованное чередование пар значений с плавающей запятой двойной точности |
УНПЦХПД xmm1, xmm2 / m128 | 66 0F 15 / r | Распаковка и чередование упакованных значений с плавающей запятой двойной точности |
UNPCKLPD xmm1, xmm2 / m128 | 66 0F 14 / r | Распаковка и чередование значений с плавающей запятой двойной точности с низкой упаковкой |
Инструкции по конвертации SSE2
Инструкция | Код операции | Смысл |
---|---|---|
CVTDQ2PD xmm1, xmm2 / m64 | F3 0F E6 / r | Преобразование упакованных целых чисел двойного слова в упакованные значения с плавающей запятой двойной точности |
CVTDQ2PS xmm1, xmm2 / m128 | 0F 5B / r | Преобразование упакованных целых чисел двойного слова в упакованные значения с плавающей запятой одинарной точности |
CVTPD2DQ xmm1, xmm2 / m128 | F2 0F E6 / r | Преобразование упакованных значений с плавающей запятой двойной точности в упакованные целые числа двойного слова |
CVTPD2PI мм, xмм / м 128 | 66 0F 2D / r | Преобразование упакованных значений FP двойной точности в упакованные целые числа двойного слова |
CVTPD2PS xmm1, xmm2 / m128 | 66 0F 5A / r | Преобразование упакованных значений с плавающей запятой двойной точности в упакованные значения с плавающей запятой одинарной точности |
CVTPI2PD xmm, мм / м64 | 66 0F 2A / r | Преобразование упакованных целых чисел двойного слова в упакованные значения FP двойной точности |
CVTPS2DQ xmm1, xmm2 / m128 | 66 0F 5B / r | Преобразование упакованных значений с плавающей запятой одинарной точности в упакованные целочисленные значения двойного слова со знаком |
CVTPS2PD xmm1, xmm2 / m64 | 0F 5A / r | Преобразование упакованных значений с плавающей запятой одинарной точности в упакованные значения с плавающей запятой двойной точности |
CVTSD2SI r32, мм1 / м64 | F2 0F 2D / r | Преобразование скалярного значения с плавающей запятой двойной точности в целое число двойного слова |
CVTSD2SI r64, мм1 / м64 | 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 мм, xмм / м 128 | 66 0F 2C / r | Преобразование упакованных значений FP двойной точности с усечением в упакованные целые числа двойного слова |
CVTTPS2DQ xmm1, xmm2 / m128 | F3 0F 5B / r | Преобразование с усечением упакованных значений с плавающей запятой одинарной точности в упакованные целочисленные значения двойного слова со знаком |
CVTTSD2SI r32, мм1 / м64 | F2 0F 2C / r | Преобразование скалярного значения с плавающей запятой двойной точности с усечением в целое число двойного слова со знаком |
CVTTSD2SI r64, мм1 / м64 | F2 REX.W 0F 2C / r | Преобразование с усечением скалярного значения с плавающей запятой двойной точности в знаковое целое число Qword |
- CMPSD и МОВСД иметь то же имя, что и строка мнемоника инструкций CMPSD (CMPS) и МОВСД (MOVS); однако первые относятся к скалярным двойная точность с плавающей точкой тогда как последние относятся к двойное слово струны.
Целочисленные инструкции SSE2 SIMD
SSE2 MMX-подобные инструкции расширены до регистров SSE
SSE2 позволяет выполнять инструкции MMX в регистрах SSE, обрабатывая за один раз вдвое больше данных.
Инструкция | Код операции | Смысл |
---|---|---|
МОВД хмм, п / м32 | 66 0F 6E / r | Переместить двойное слово |
МОВД r / m32, мм | 66 0F 7E / r | Переместить двойное слово |
MOVQ xmm1, xmm2 / m64 | F3 0F 7E / r | Переместить четверное слово |
MOVQ xmm2 / m64, xmm1 | 66 0F D6 / r | Переместить четверное слово |
MOVQ r / m64, x мм | 66 REX.W 0F 7E / r | Переместить четверное слово |
MOVQ xmm, r / m64 | 66 REX.W 0F 6E / r | Переместить четверное слово |
ПМОВМСКБ рег, xmm | 66 0F D7 / r | Перемещение байтовой маски, обнуление старших битов регистра |
PEXTRW reg, xmm, imm8 | 66 0F C5 / r ib | Извлеките указанное слово и переместите его в reg, установив биты 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 / г | Добавить упакованные целые числа со знаком со знаком с насыщенностью |
PADDUSB xmm1, xmm2 / m128 | 66 0F DC / r | Добавить упакованные байтовые целые числа без знака с насыщением |
PADDUSW xmm1, xmm2 / m128 | 66 0F ДД / г | Добавить упакованные целые числа без знака с насыщением |
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 / р | Сравните упакованные байты на предмет равенства. |
PCMPEQW xmm1, xmm2 / m128 | 66 0F 75 / р | Сравните упакованные слова на предмет равенства. |
PCMPEQD xmm1, xmm2 / m128 | 66 0F 76 / r | Сравните упакованные двойные слова на предмет равенства. |
PCMPGTB xmm1, xmm2 / m128 | 66 0F 64 / р | Сравните упакованные байтовые целые числа со знаком больше чем |
PCMPGTW xmm1, xmm2 / m128 | 66 0F 65 / р | Сравните упакованные целые числа со знаком слова больше чем |
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 | Сдвиг слов влево при переходе на 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 с |
ПСРЛД xмм1, xмм2 / м128 | 66 0F D2 / r | Сдвиг двойных слов вправо при сдвиге на 0 с |
ПСРЛД xmm1, imm8 | 66 0F 72/2 ib | Сдвиг двойных слов вправо при сдвиге на 0 с |
ПСРЛК хмм1, хмм2 / м128 | 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 / р | Чередовать младшие байты |
PUNPCKLWD xmm1, xmm2 / m128 | 66 0F 61 / г | Чередовать младшие слова |
PUNPCKLDQ xmm1, xmm2 / m128 | 66 0F 62 / r | Чередовать двойные слова младшего разряда |
PAVGB xmm1, xmm2 / m128 | 66 0F E0, / г | Средние упакованные байтовые целые числа без знака с округлением |
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 | Вычисляет абсолютные разности упакованных целых байтов без знака; затем 8 низких разностей и 8 высоких разностей суммируются по отдельности для получения двух целочисленных результатов без знака. |
Целочисленные инструкции SSE2 только для регистров SSE
Следующие инструкции можно использовать только для регистров SSE, поскольку по своей природе они не работают с регистрами MMX.
Инструкция | Код операции | Смысл |
---|---|---|
MASKMOVDQU xmm1, xmm2 | 66 0F F7 / r | Невременное сохранение выбранных байтов из регистра XMM в память |
MOVDQ2Q мм, x мм | 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 x мм, мм | 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 | Перемешайте упакованные низкие слова. |
ПШУФД xmm1, xmm2 / m128, imm8 | 66 0F 70 / r ib | Перемешайте упакованные двойные слова. |
PSLLDQ xmm1, imm8 | 66 0F 73/7 ib | Пакетный сдвиг влево логических двойных четверных слов. |
ПСРЛДК xmm1, imm8 | 66 0F 73/3 ib | Упакованный сдвиг вправо логических двойных четверных слов. |
PUNPCKHQDQ xmm1, xmm2 / m128 | 66 0F 6D / r | Распаковать и чередовать четверные слова высокого порядка, |
PUNPCKLQDQ xmm1, xmm2 / m128 | 66 0F 6C / r | Чередовать младшие четверные слова, |
SSE3 инструкции
Добавлен Pentium 4 с поддержкой SSE3
SSE3 SIMD инструкции с плавающей запятой
Инструкция | Код операции | Смысл | Заметки |
---|---|---|---|
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 | Перемещение и дублирование значений с плавающей запятой одинарной точности с нечетным индексом | |
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 | Горизонтальное вычитание упакованных значений с плавающей запятой двойной точности |
Целочисленные инструкции SSE3 SIMD
Инструкция | Код операции | Смысл | Заметки |
---|---|---|---|
LDDQU xmm1, mem | F2 0F F0 / r | Загрузить невыровненные данные и вернуть двойное четверное слово | Инструктивно эквивалентен MOVDQU. Для кодирования видео |
SSSE3 инструкции
Добавлено с Xeon 5100 серии и начальная Ядро 2
Следующие MMX-подобные инструкции, расширенные до регистров SSE, были добавлены с SSSE3.
Инструкция | Код операции | Смысл |
---|---|---|
PSIGNB xmm1, xmm2 / m128 | 66 0F 38 08 / р | Отрицать / обнулять / сохранять упакованные байтовые целые числа в зависимости от соответствующего знака |
PSIGNW xmm1, xmm2 / m128 | 66 0F 38 09 / р | Отрицать / обнулять / сохранять целые числа в сжатом виде в зависимости от соответствующего знака |
PSIGND xmm1, xmm2 / m128 | 66 0F 38 0A / r | Отменить / обнулить / сохранить упакованные целые числа двойного слова в зависимости от соответствующего |
ПШУФБ xmm1, xmm2 / m128 | 66 0F 38 00 / р | Перемешать байты |
PMULHRSW xmm1, xmm2 / m128 | 66 0F 38 0B / r | Умножение 16-битных слов со знаком, масштабирование и округление двойных слов со знаком, упаковка старших 16 бит |
PMADDUBSW xmm1, xmm2 / m128 | 66 0F 38 04 / р | Умножение подписанных и беззнаковых байтов, добавление горизонтальной пары подписанных слов, упаковка насыщенных подписанных слов |
PHSUBW xmm1, xmm2 / m128 | 66 0F 38 05 / р | Вычесть и упаковать 16-битные целые числа со знаком по горизонтали |
PHSUBSW x мм1, x мм2 / м 128 | 66 0F 38 07 / r | Вычесть и упаковать 16-битное целое число со знаком по горизонтали с насыщением |
PHSUBD xmm1, xmm2 / m128 | 66 0F 38 06 / р | Вычесть и упаковать 32-разрядные целые числа со знаком по горизонтали |
PHADDSW xmm1, xmm2 / m128 | 66 0F 38 03 / р | Сложить и упаковать 16-битные целые числа со знаком по горизонтали с насыщением |
PHADDW xmm1, xmm2 / m128 | 66 0F 38 01 / р | Сложить и упаковать 16-битные целые числа по горизонтали |
PHADDD xmm1, xmm2 / m128 | 66 0F 38 02 / р | Сложить и упаковать 32-битные целые числа по горизонтали |
PALIGNR xmm1, xmm2 / m128, imm8 | 66 0F 3A 0F / r ib | Объединить целевые и исходные операнды, извлечь результат, выровненный по байтам, смещенный вправо |
ПАБСБ xmm1, xmm2 / m128 | 66 0F 38 1C / r | Вычислить абсолютное значение байтов и сохранить результат без знака |
PABSW xmm1, xmm2 / m128 | 66 0F 38 1D / r | Вычислить абсолютное значение 16-битных целых чисел и сохранить результат без знака |
PABSD xmm1, xmm2 / m128 | 66 0F 38 1E / r | Вычислить абсолютное значение 32-битных целых чисел и сохранить результат без знака |
SSE4 инструкции
SSE4.1
Добавлено с Ядро 2 произведено в 45 нм
SSE4.1 SIMD-инструкции с плавающей запятой
Инструкция | Код операции | Смысл |
---|---|---|
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 / г | Выбрать упакованные значения с плавающей запятой одинарной точности из указанной маски |
BLENDPD xmm1, xmm2 / m128, imm8 | 66 0F 3A 0D / r ib | Выбрать упакованные значения DP-FP из указанной маски |
BLENDVPD xmm1, xmm2 / m128, | 66 0F 38 15 / г | Выберите упакованные значения 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 | Округление низкоупакованного значения с плавающей запятой двойной точности |
ВСТАВКИ xmm1, xmm2 / m32, imm8 | 66 0F 3A 21 / r ib | Вставить выбранное значение с плавающей запятой одинарной точности в указанный элемент назначения и обнулить элементы назначения |
ВЫДЕРЖКИ reg / m32, xmm1, imm8 | 66 0F 3A 17 / r ib | Извлечь одно значение с плавающей запятой одинарной точности по указанному смещению и сохранить результат (с расширением нулями, если применимо) |
SSE4.1 Целочисленные инструкции SIMD
Инструкция | Код операции | Смысл |
---|---|---|
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 / р | Умножьте упакованные целые числа со знаком двойного слова и сохраните младшие 32 бита. |
PMULDQ xmm1, xmm2 / m128 | 66 0F 38 28 / р | Умножьте упакованные целые числа двойного слова со знаком и сохраните результат четверного слова |
PBLENDVB xmm1, xmm2 / m128, | 66 0F 38 10 / р | Выбрать байтовые значения из указанной маски |
PBLENDW xmm1, xmm2 / m128, imm8 | 66 0F 3A 0E / r ib | Выбрать слова из указанной маски |
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 / р | Сравнить упакованные целые числа двойного слова со знаком |
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 / р | Сравнить упакованные целые числа двойного слова со знаком |
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-битных целых числа |
ПТЕСТ xmm1, xmm2 / m128 | 66 0F 38 17 / r | Установите ZF, если результатом И является все 0, установите CF, если результатом И НЕ является все 0 |
PCMPEQQ xmm1, xmm2 / m128 | 66 0F 38 29 / р | Сравните упакованные qword на равенство |
PACKUSDW xmm1, xmm2 / m128 | 66 0F 38 2B / r | Преобразование 2 × 4 упакованных целых чисел со знаком двойного слова в 8 упакованных целых чисел без знака с насыщением |
MOVNTDQA xmm1, m128 | 66 0F 38 2A / r | Перемещение двойного четверного слова с использованием невременной подсказки, если тип памяти WC |
SSE4a
Добавлено с Феном процессоры
- EXTRQ / INSERTQ
- МОВНЦД / МОВНЦС
SSE4.2
Добавлено с Nehalem процессоры
Инструкция | Код операции | Смысл |
---|---|---|
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 | Упакованное сравнение строковых данных с неявной длиной, генерируя индекс |
PCMPISTRM xmm1, xmm2 / m128, imm8 | 66 0F 3A 62 / r imm8 | Упакованное сравнение строковых данных с неявной длиной, генерация маски |
PCMPGTQ xmm1, xmm2 / m128 | 66 0F 38 37 / r | Сравните упакованные qword со знаком для большего, чем. |
SSE5 производные инструкции
SSE5 был предложенным расширением SSE AMD. В комплект поставки не входил полный набор инструкций Intel SSE4, что делало его конкурентом SSE4, а не преемником. AMD решила не реализовывать SSE5, как предлагалось изначально, однако были представлены производные расширения SSE.
XOP
Представлен с ядром процессора Bulldozer, снова удален из Дзен (микроархитектура) вперед.
Ревизия большей части набора инструкций SSE5
F16C
Преобразование с плавающей запятой половинной точности.
Инструкция | Смысл |
---|---|
VCVTPH2PS xmmreg, xmmrm64 | Преобразование четырех значений с плавающей запятой половинной точности в памяти или нижней половины регистра XMM в четыре значения с плавающей запятой одинарной точности в регистре XMM |
VCVTPH2PS ymmreg, xmmrm128 | Преобразование восьми значений с плавающей запятой половинной точности в памяти или регистре XMM (нижняя половина регистра YMM) в восемь значений с плавающей запятой одинарной точности в регистре YMM |
VCVTPS2PH xmmrm64, xmmreg, imm8 | Преобразование четырех значений с плавающей запятой одинарной точности в регистре XMM в значения с плавающей запятой половинной точности в памяти или в нижнюю половину регистра XMM |
VCVTPS2PH xmmrm128, ymmreg, imm8 | Преобразование восьми значений с плавающей запятой одинарной точности в регистре YMM в значения с плавающей запятой половинной точности в памяти или регистре XMM |
FMA3
Поддерживается в процессорах AMD, начиная с архитектуры Piledriver, и в процессорах Intel, начиная с процессоров Haswell и процессорах Broadwell, с 2014 года.
Слитное умножение-сложение (вектор с плавающей запятой умножение – накопление) с тремя операндами.
Инструкция | Смысл |
---|---|
VFMADD132PD | Плавное умножение упакованных значений с плавающей запятой двойной точности |
VFMADD213PD | Плавное умножение упакованных значений с плавающей запятой двойной точности |
VFMADD231PD | Плавное умножение упакованных значений с плавающей запятой двойной точности |
VFMADD132PS | Плавное умножение упакованных значений с плавающей запятой одинарной точности |
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 | Смешанное отрицательное умножение упакованных значений с плавающей запятой одинарной точности |
VFNMADD231PS | Смешанное отрицательное умножение упакованных значений с плавающей запятой одинарной точности |
VFNMADD132SD | Объединенное отрицательное умножение скалярных значений с плавающей запятой двойной точности |
VFNMADD213SD | Объединенное отрицательное умножение скалярных значений с плавающей запятой двойной точности |
VFNMADD231SD | Объединенное отрицательное умножение скалярных значений с плавающей запятой двойной точности |
VFNMADD132SS | Объединенное отрицательное умножение скалярных значений с плавающей запятой одинарной точности |
VFNMADD213SS | Объединенное отрицательное умножение скалярных значений с плавающей запятой одинарной точности |
VFNMADD231SS | Объединенное отрицательное умножение скалярных значений с плавающей запятой одинарной точности |
VFNMSUB132PD | Плавное отрицательное умножение-вычитание упакованных значений с плавающей запятой двойной точности |
VFNMSUB213PD | Плавное отрицательное умножение-вычитание упакованных значений с плавающей запятой двойной точности |
VFNMSUB231PD | Плавное отрицательное умножение-вычитание упакованных значений с плавающей запятой двойной точности |
VFNMSUB132PS | Объединенное отрицательное умножение и вычитание упакованных значений с плавающей запятой одинарной точности |
VFNMSUB213PS | Объединенное отрицательное умножение и вычитание упакованных значений с плавающей запятой одинарной точности |
VFNMSUB231PS | Объединенное отрицательное умножение и вычитание упакованных значений с плавающей запятой одинарной точности |
VFNMSUB132SD | Объединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой двойной точности |
VFNMSUB213SD | Объединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой двойной точности |
VFNMSUB231SD | Объединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой двойной точности |
VFNMSUB132SS | Объединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой одинарной точности |
VFNMSUB213SS | Объединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой одинарной точности |
VFNMSUB231SS | Объединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой одинарной точности |
FMA4
Поддерживается в процессорах AMD, начиная с архитектуры Bulldozer. По состоянию на 2017 год не поддерживается ни одним чипом Intel.
Слитное умножение-сложение с четырьмя операндами. FMA4 была реализована аппаратно до FMA3.
Инструкция | Код операции | Смысл | Заметки |
---|---|---|---|
VFMADDPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 69 / r / is4 | Плавное умножение упакованных значений с плавающей запятой двойной точности | |
VFMADDPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 68 / r / is4 | Плавное умножение упакованных значений с плавающей запятой одинарной точности | |
VFMADDSD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6B / r / is4 | Плавное умножение-сложение скалярных значений с плавающей запятой двойной точности | |
VFMADDSS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6A / r / is4 | Объединенное умножение-сложение скалярных значений с плавающей запятой одинарной точности | |
VFMADDSUBPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 5D / r / is4 | Плавное умножение и чередование чисел с плавающей запятой двойной точности | |
VFMADDSUBPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 5C / r / is4 | Плавное умножение и вычитание упакованных значений с плавающей запятой одинарной точности | |
VFMSUBADDPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 5F / r / is4 | Вычитание / сложение упакованных значений с плавающей запятой двойной точности с объединенным множителем и чередованием | |
VFMSUBADDPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 5E / r / is4 | Вычитание / сложение упакованных значений с плавающей запятой одинарной точности с несколькими переменными числами | |
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 | Объединенное умножение-вычитание скалярных значений с плавающей запятой одинарной точности | |
VFNMADDPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 79 / r / is4 | Плавное отрицательное умножение упакованных значений с плавающей запятой двойной точности | |
VFNMADDPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 78 / r / is4 | Смешанное отрицательное умножение упакованных значений с плавающей запятой одинарной точности | |
VFNMADDSD xmm0, xmm1, xmm2, 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 | Плавное отрицательное умножение-вычитание упакованных значений с плавающей запятой двойной точности | |
VFNMSUBPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7C / r / is4 | Объединенное отрицательное умножение и вычитание упакованных значений с плавающей запятой одинарной точности | |
VFNMSUBSD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7F / r / is4 | Объединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой двойной точности | |
VFNMSUBSS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7E / r / is4 | Объединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой одинарной точности |
AVX
AVX были впервые поддержаны Intel с Sandy Bridge и AMD с Бульдозер.
Векторные операции с 256-битными регистрами.
Инструкция | Описание |
---|---|
VBROADCASTSS | Скопируйте 32-битный, 64-битный или 128-битный операнд памяти во все элементы векторного регистра XMM или YMM. |
VBROADCASTSD | |
VBROADCASTF128 | |
VINSERTF128 | Заменяет нижнюю или верхнюю половину 256-битного регистра YMM на значение 128-битного исходного операнда. Другая половина пункта назначения не изменилась. |
VEXTRACTF128 | Извлекает нижнюю или верхнюю половину 256-битного регистра YMM и копирует значение в 128-битный целевой операнд. |
ВМАСКМОВПС | Условно считывает любое количество элементов из операнда векторной памяти SIMD в регистр назначения, оставляя остальные элементы вектора непрочитанными и устанавливая соответствующие элементы в регистре назначения на ноль. В качестве альтернативы, условно записывает любое количество элементов из операнда векторного регистра SIMD в векторный операнд памяти, оставляя оставшиеся элементы операнда памяти неизменными. В архитектуре процессора AMD Jaguar эта инструкция с операндом источника памяти занимает более 300 тактовых циклов, когда маска равна нулю, и в этом случае инструкция не должна делать ничего. Кажется, это недостаток дизайна.[12] |
ВМАСКМОВПД | |
ВПЕРМИЛПС | Перестановка в переулке. Перемешайте 32-битные или 64-битные векторные элементы одного входного операнда. Это внутренние 256-битные инструкции, что означает, что они работают со всеми 256 битами с двумя отдельными 128-битными перетасовками, поэтому они не могут перемещаться по 128-битным полосам.[13] |
ВПЕРМИЛПД | |
VPERM2F128 | Перемешайте четыре 128-битных векторных элемента двух 256-битных исходных операндов в 256-битный целевой операнд с непосредственной константой в качестве селектора. |
ВЗЕРОАЛЛ | Установите все регистры YMM в ноль и пометьте их как неиспользуемые. Используется при переключении между 128-битным использованием и 256-битным использованием. |
VZEROUPPER | Установите верхнюю половину всех регистров YMM в ноль. Используется при переключении между 128-битным использованием и 256-битным использованием. |
AVX2
Представлено в Intel Микроархитектура Haswell и AMD Экскаватор.
Расширение большинства векторных целочисленных инструкций 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 | |
ВПМАСКМОВД | Условно считывает любое количество элементов из операнда векторной памяти SIMD в регистр назначения, оставляя остальные элементы вектора непрочитанными и устанавливая соответствующие элементы в регистре назначения на ноль. В качестве альтернативы, условно записывает любое количество элементов из операнда векторного регистра SIMD в операнд векторной памяти, оставляя остальные элементы операнда памяти неизменными. |
VPMASKMOVQ | |
VPERMPS | Перемешайте восемь 32-битных векторных элементов одного 256-битного исходного операнда в 256-битный целевой операнд с регистром или операндом памяти в качестве селектора. |
VPERMD | |
ВПЕРМПД | Перемешайте четыре 64-битных векторных элемента одного 256-битного исходного операнда в 256-битный целевой операнд с регистром или операндом памяти в качестве селектора. |
VPERMQ | |
VPERM2I128 | Перемешайте (два из) четырех 128-битных векторных элементов два 256-битные исходные операнды в 256-битный целевой операнд с непосредственной константой в качестве селектора. |
VPBLENDD | Doubleword немедленная версия инструкций PBLEND от SSE4. |
VPSLLVD | Сдвиг влево логичный. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом. |
VPSLLVQ | |
ВПСРЛВД | Сдвиг вправо логичный. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом. |
VPSRLVQ | |
ВПСРАВД | Сдвиг вправо арифметически. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом. |
AVX-512
Представлено в Intel Ксеон Пхи х200
Векторные операции над 512-битными регистрами.
Основание AVX-512
Инструкция | Описание |
---|---|
VBLENDMPD | Смешивание векторов float64 с помощью opmask control |
VBLENDMPS | Смешивание векторов float32 с помощью opmask control |
VPBLENDMD | Смешайте векторы int32 с помощью элемента управления opmask |
VPBLENDMQ | Смешайте векторы int64 с помощью элемента управления opmask |
VPCMPD | Сравнить подписанные / беззнаковые двойные слова в маске |
VPCMPUD | |
VPCMPQ | Сравнить четверные слова со знаком / без знака в маску |
VPCMPUQ | |
VPTESTMD | Логическое И и установка маски для 32- или 64-битных целых чисел. |
VPTESTMQ | |
ВПТЕСТНМД | Логическая И-НЕ и маска для 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 | |
ВПМОВДБ | |
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 |
VGETEXPSS | |
ВГЕТМАНТПД | Извлечь вектор нормализованных мантисс из вектора float32 / float64 |
ВГЕТМАНТПС | |
ВГЕТМАНЦД | Извлечь float32 / float64 из нормализованных мантисса из скаляра float32 / float64 |
ВГЕТМАНЦЫ | |
VFIXUPIMMPD | Исправить специальные упакованные значения float32 / float64 |
VFIXUPIMMPS | |
VFIXUPIMMSD | Исправить специальное скалярное значение float32 / float64 |
VFIXUPIMMS | |
VRCP14PD | Вычислить приблизительные обратные значения упакованных значений float32 / float64 |
VRCP14PS | |
VRCP14SD | Вычислить приблизительные обратные значения скалярного значения float32 / float64 |
VRCP14SS | |
VRNDSCALEPS | Округление упакованных значений float32 / float64 для включения заданного количества дробных битов |
VRNDSCALEPD | |
VRNDSCALESS | Круглое скалярное значение float32 / float64 для включения заданного количества дробных битов |
VRNDSCALESD | |
VRSQRT14PD | Вычислить приблизительные значения, обратные квадратным корням упакованных значений float32 / float64 |
VRSQRT14PS | |
VRSQRT14SD | Вычислить приблизительную величину, обратную квадратному корню из скалярного значения float32 / float64 |
VRSQRT14SS | |
VSCALEFPS | Масштабирование упакованных значений float32 / float64 со значениями float32 / float64 |
VSCALEFPD | |
VSCALEFSS | Масштабировать скалярное значение float32 / float64 со значением float32 / float64 |
VSCALEFSD | |
ВАЛИГНД | Выравнивание векторов двойных или четверных слов |
VALIGNQ | |
VPABSQ | Упакованное четверное слово абсолютного значения |
VPMAXSQ | Максимум упакованного четверного слова со знаком / без знака |
VPMAXUQ | |
VPMINSQ | Минимум упакованного четверного слова со знаком / без знака |
VPMINUQ | |
VPROLD | Бит повернуть влево или вправо |
ВПРОЛВД | |
VPROLQ | |
VPROLVQ | |
ВПРОРД | |
ВПРОРВД | |
VPRORQ | |
VPRORVQ | |
VPSCATTERDD | Скаттер-упакованное двойное слово / четверное слово с индексами двойного слова и четверного слова со знаком |
VPSCATTERDQ | |
VPSCATTERQD | |
VPSCATTERQQ | |
VSCATTERDPS | Scatter упакованный float32 / float64 с индексами двойного слова и четверного слова со знаком |
VSCATTERDPD | |
VSCATTERQPS | |
VSCATTERQPD |
Криптографические инструкции
Инструкции Intel AES
6 новых инструкций.
Инструкция | Описание |
---|---|
AESENC | Выполните один раунд AES поток шифрования |
ЭЗЕНКЛАСТ | Выполните последний раунд потока шифрования AES |
AESDEC | Выполните один раунд потока дешифрования AES |
AESDECLAST | Выполните последний раунд потока дешифрования AES |
ЭСКЕЙГЕНАССИСТ | Помощь в генерации раундового ключа AES |
AESIMC | Помощь в столбцах обратного смешивания AES |
RDRAND и RDSEED
Инструкция | Описание |
---|---|
RDRAND | Прочитать случайное число |
RDSEED | Прочитать случайное начальное число |
Инструкции Intel SHA
7 новых инструкций.
Инструкция | Описание |
---|---|
SHA1RNDS4 | Выполните четыре раунда операции SHA1 |
SHA1NEXTE | Вычислить переменную состояния SHA1 E после четырех раундов |
SHA1MSG1 | Выполните промежуточное вычисление для следующих четырех слов сообщения SHA1 |
SHA1MSG2 | Выполните окончательный расчет для следующих четырех слов сообщения SHA1 |
SHA256RNDS2 | Выполните два раунда операции SHA256 |
SHA256MSG1 | Выполните промежуточное вычисление для следующих четырех слов сообщения SHA256 |
SHA256MSG2 | Выполните окончательный расчет для следующих четырех слов сообщения SHA256 |
Недокументированные инструкции
Недокументированные инструкции x86
Процессоры x86 содержат недокументированные инструкции которые реализованы на чипах, но не указаны в некоторых официальных документах. Их можно найти в различных источниках в Интернете, таких как Список прерываний Ральфа Брауна и в sandpile.org
Мнемонический | Код операции | Описание | Статус |
---|---|---|---|
AAM 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 | Однобайтовое пошаговое исключение / вызов ICE | Доступно, начиная с 80386, задокументировано (как INT1) начиная с Pentium Pro |
Неизвестная мнемоника | 0F 04 | Точная цель неизвестна, вызывает зависание процессора (HCF ). Единственный выход - перезагрузка процессора.[14] В некоторых реализациях эмулируется через BIOS как остановка последовательность.[15] В сообщение на форуме Vintage Computing Federation, эта инструкция обозначается как СОХРАНИТЬ. Он взаимодействует с режимом ICE. | Доступно только на 80286 |
ЗАГРУЗИТЬ | 0F 05 | Загружает все регистры из адреса памяти 0x000800H | Доступно только на 80286 |
ЗАГРУЗИТЬ | 0F 07 | Загружает все регистры из адреса памяти ES: EDI | Доступно только на 80386 |
UD1 | 0F B9 | Умышленно неопределенная инструкция, но в отличие от UD2 не опубликована | |
ALTINST | 0F 3F | Перейти и выполнить инструкции в недокументированном Альтернативный набор инструкций. | Доступно только на некоторых процессорах x86 производства VIA Technologies. |
Недокументированные инструкции x87
FFREEP выполняет FFREE ST (i) и выталкивает стек
Смотрите также
использованная литература
- ^ а б "Re: Идентификация процессора Intel и инструкция CPUID". Получено 2013-04-21.
- ^ Тот, Эрвин (1998-03-16). «BSWAP с 16-битными регистрами». Архивировано из оригинал на 1999-11-03.
Команда опускает верхнее слово регистра двойного слова, не затрагивая его старшие 16 бит.
- ^ Колдвин, Гинваэль (29 декабря 2009 г.). «Префикс BSWAP + 66h». Получено 2018-10-03.
внутреннее (нулевое) расширение значения меньшего (16-битного) регистра… применение bswap к 32-битному значению «00 00 AH AL»,… усеченное до младших 16 битов, которые равны «00 00». … Bochs… bswap reg16 действует так же, как bswap reg32… QEMU… игнорирует префикс 66h
- ^ «RSM - Возобновление из режима управления системой». Архивировано 12 марта 2012 года.CS1 maint: BOT: статус исходного URL-адреса неизвестен (ссылка на сайт)
- ^ Справочное руководство по оптимизации архитектур Intel 64 и IA-32, раздел 7.3.2
- ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, раздел 4.3, подраздел «PREFETCHh - предварительная выборка данных в кеши»
- ^ Холлингсворт, Брент. "Новые" Бульдозер "и" Пиледривер "инструкция" (pdf). Advanced Micro Devices, Inc. Получено 11 декабря 2014.
- ^ «Семейство 16h AMD A-Series, техническое описание» (PDF). amd.com. AMD. Октябрь 2013. Получено 2014-01-02.
- ^ «Руководство программиста по архитектуре AMD64, том 3: общие и системные инструкции» (PDF). amd.com. AMD. Октябрь 2013. Получено 2014-01-02.
- ^ "tbmintrin.h из GCC 4.8". Получено 2014-03-17.
- ^ https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf раздел 3.5.2.3
- ^ «Микроархитектура процессоров Intel, AMD и VIA: руководство по оптимизации для программистов сборки и производителей компиляторов» (PDF). Получено 17 октября, 2016.
- ^ «Шахматное программирование AVX2». Получено 17 октября, 2016.
- ^ "Re: Недокументированные коды операций (HINT_NOP)". Архивировано из оригинал на 2004-11-06. Получено 2010-11-07.
- ^ "Re: Также некоторые недокументированные коды операций 0Fh". Архивировано из оригинал на 2003-06-26. Получено 2010-11-07.
внешние ссылки
- Бесплатная документация для IA-32 и x86-64, предоставлено Intel
- Справочник по коду операции и инструкциям x86
- Справочник по инструкциям x86 и amd64
- Таблицы инструкций: списки задержек инструкций, пропускной способности и сбоев микроопераций для процессоров Intel, AMD и VIA
- Список инструкций Netwide Assembler (от Сетевой ассемблер )