Команды архитектуры x86
-
Команды общего
назначения
-
Системные команды
-
Команды
сопроцессора (x87 FPU)
-
Команды
управления состоянием сопроцессора и SIMD
-
Команды
технологии MMX
-
Команды
расширения SSE
-
Команды
расширения SSE2
-
Команды
расширения SSE3
-
Команды расширения
3DNow!
В
описаниях команд могут встречаться следующие обозначения:
Byte - 8-битное целое (байт)
Word - 16-битное целое (слово)
DWord - 32-битное целое (двойное слово)
QWord - 64-битное целое (учетверенное слово)
Float - вещественное число одинарной точности (32 бита)
Double - вещественное число двойной точности (64 бита)
Команды общего назначения
Команды передачи данных
|
MOV |
Присваивание |
|
CMOVxx |
Условное
присваивание |
|
XCHG |
Обмен значений |
|
BSWAP |
Перестановка
байтов |
|
XADD |
Обмен и сложение |
|
CMPXCHG |
Сравнение и обмен |
|
CMPXCHG8B |
Сравнение и обмен
8 байтов |
|
PUSH |
Поместить значение
в стек |
|
POP |
Взять значение из
стека |
|
PUSHA/PUSHAD |
Поместить значения
регистров общего назначения в стек |
|
POPA/POPAD |
Взять значения
регистров общего назначения из стека |
|
IN |
Прочитать значение
из порта ввода/вывода |
|
OUT |
Записать значение
в порт ввода/вывода |
|
CWD |
Преобразовать Word в DWord |
|
CDQ |
Преобразовать DWord в QWord |
|
CBW |
Преобразовать Byte в Word |
|
CWDE |
Преобразовать Word в DWord в регистре eax |
|
MOVSX |
Присвоить и
расширить с учетом знака |
|
MOVZX |
Присвоить и
расширить нулевым значением |
Двоичные арифметические команды
|
ADD |
Сложение |
|
ADC |
Сложение с
переносом |
|
SUB |
Вычитание |
|
SBB |
Вычитание с заемом |
|
IMUL |
Знаковое умножение |
|
MUL |
Беззнаковое умножение |
|
IDIV |
Знаковое деление |
|
DIV |
Беззнаковое деление |
|
INC |
Инкремент |
|
DEC |
Декремент |
|
NEG |
Смена знака |
|
CMP |
Сравнение |
Двоично-десятичные (BCD) арифметические команды
|
DAA |
Десятичная
коррекция после сложения |
|
DAC |
Десятичная
коррекция после вычитания |
|
AAA |
ASCII коррекция
после сложения |
|
AAS |
ASCII коррекция
после вычитания |
|
AAM |
ASCII коррекция
после умножения |
|
AAD |
ASCII коррекция
перед делением |
Логические команды
|
AND |
Побитовое
логическое И |
|
OR |
Побитовое
логическое ИЛИ |
|
XOR |
Побитовое
логическое Исключающее ИЛИ |
|
NOT |
Побитовое
логическое НЕ |
Команды побитового сдвига и вращения
|
SAR |
Арифметический
сдвиг вправо |
|
SHR |
Логический сдвиг
вправо |
|
SAL/SHL |
Арифметический/логический
сдвиг влево |
|
SHRD |
Двойной сдвиг вправо |
|
SHLD |
Двойной сдвиг
влево |
|
ROR |
Вращение вправо |
|
ROL |
Вращение влево |
|
RCR |
Вращение вправо через
флаг переноса |
|
RCL |
Вращение влево через
флаг переноса |
Команды работы с битами и байтами
|
BT |
Проверка бита |
|
BTS |
Проверка и
установка бита |
|
BTR |
Проверка и сброс
бита |
|
BTC |
Проверка и
инверсия бита |
|
BSF |
Проверка бита в
прямом направлении |
|
BSR |
Проверка бита в обратном
направлении |
|
SETxx |
Установить
значение байта в зависимости от флага |
|
TEST |
Логическое
сравнение |
Команды передачи управления
|
JMP |
Безусловный
переход |
|
Jxx |
Условный переход |
|
JCXZ/JECXZ |
Переход, если cx/ecx равен 0 |
|
|
Цикл со счетчиком
в ecx |
|
LOOPZ/LOOPE |
Цикл со счетчиком
в ecx и выходом при нуле / равенстве |
|
LOOPNZ/LOOPNE |
Цикл со счетчиком
в ecx и выходом при не нуле / неравенстве |
|
CALL |
Вызов подпрограммы |
|
RET |
Возврат из
подпрограммы |
|
IRET |
Возврат из
прерывания |
|
INT |
Вызов программного
прерывания |
|
INTO |
Вызов прерывания
по переполнению |
|
BOUND |
Переход при выходе
значения за заданные рамки |
|
ENTER |
Высокоуровневый
вход в процедуру |
|
LEAVE |
Высокоуровневый
выход из процедуры |
Команды работы со строками (последовательностями)
|
MOVS |
Перемещение строки |
|
MOVSB |
Перемещение строки
байтов |
|
MOVSW |
Перемещение строки
слов |
|
MOVSD |
Перемещение строки
двойных слов |
|
CMPS |
Сравнение строки |
|
CMPSB |
Сравнение строки
байтов |
|
CMPSW |
Сравнение строки
слов |
|
CMPSD |
Сравнение строки
двойных слов |
|
SCAS |
Проверка строки |
|
SCASB |
Проверка строки
байтов |
|
SCASW |
Проверка строки
слов |
|
SCASD |
Проверка строки
двойных слов |
|
LODS |
Чтение строки |
|
LODSB |
Чтение строки
байтов |
|
LODSW |
Чтение строки слов |
|
LODSD |
Чтение строки
двойных слов |
|
STOS |
Запись строки |
|
STOSB |
Запись строки
байтов |
|
STOSW |
Запись строки слов |
|
STOSD |
Запись строки
двойных слов |
|
REP |
Префикс
повторения: пока ecx не равен 0 |
|
REPE/REPZ |
Префикс
повторения: пока равно / ноль |
|
REPNE/REPNZ |
Префикс
повторения: пока не равно / не ноль |
|
INS |
Чтение из порта
строки |
|
INSB |
Чтение из порта
строки байтов |
|
INSW |
Чтение из порта
строки слов |
|
INSD |
Чтение из порта
строки двойных слов |
|
OUT |
Запись в порт
строки |
|
OUTB |
Запись в порт
строки байтов |
|
OUTW |
Запись в порт
строки слов |
|
OUTD |
Запись в порт
строки двойных слов |
Команды управления флагами
|
STC |
Установить флаг
переноса |
|
CLC |
Очистить флаг
переноса |
|
CMC |
Инвертировать флаг
переноса |
|
CLD |
Очистить флаг
направления |
|
STD |
Установить флаг
направления |
|
LAHF |
Загрузить флаги в ah |
|
SAHF |
Записать ah в флаги |
|
PUSHF/PUSHFD |
Поместить EFLAGS в
стек |
|
POPF/POPFD |
Взять EFLAGS из
стека |
|
STI |
Установить флаг
прерывания |
|
CLI |
Очистить флаг
прерывания |
Команды работы с сегментными регистрами
|
LDS |
Загрузить дальний
указатель используя ds |
|
LES |
Загрузить дальний
указатель используя es |
|
LFS |
Загрузить дальний
указатель используя fs |
|
LGS |
Загрузить дальний
указатель используя gs |
|
LSS |
Загрузить дальний
указатель используя ss |
Дополнительные команды
|
LEA |
Загрузить
эффективный адрес |
|
NOP |
Нет операции |
|
UD2 |
Неопределенная
инструкция |
|
XLAT/XLATB |
Табличная
трансляция |
|
CPUID |
Идентификация
процессора |
Условия
в различных условных командах (CMOVxx, SETxx, Jxx)
|
Обозначение в
командах |
Флаги |
Условие |
|
a / nbe |
CF=0 и ZF=0 |
"выше" или "не ниже или равно" |
|
ae / nb / nc |
CF=0 |
"выше или равно" или "не ниже" или "нет переноса" |
|
b / nae / c |
CF=1 |
"ниже" или "не выше или равно" или "есть перенос" |
|
be / na |
CF=1 или ZF=1 |
"ниже или равно" или "не выше" |
|
e / z |
ZF=1 |
"равно" или "ноль" |
|
ne / nz |
ZF=0 |
"не равно" или "не ноль" |
|
g / nle |
ZF=0 и SF=OF |
"больше" или "не меньше или равно" |
|
ge / nl |
SF=OF |
"больше или равно" или "не меньше" |
|
l / nge |
SF≠OF |
"меньше" или "не больше или равно" |
|
le / ng |
ZF=0 или SF≠OF |
"меньше или равно" или "не больше" |
|
no |
OF=0 |
"нет переполнения" |
|
o |
OF=1 |
"есть переполнение" |
|
np / po |
PF=0 |
"нет четности" или "нечетное" |
|
p / pe |
PF=1 |
"есть четность" или "четное" |
|
ns |
SF=0 |
"нет знака" |
|
s |
SF=1 |
"есть знак" |
Системные команды
|
LGDT |
Загрузить регистр
глобальной таблицы дескрипторов (GDT) |
|
SGDT |
Сохранить регистр
глобальной таблицы дескрипторов (GDT) |
|
LLDT |
Загрузить регистр
локальной таблицы дескрипторов (GDT) |
|
SLDT |
Сохранить регистр локальной
таблицы дескрипторов (GDT) |
|
LTR |
Загрузить регистр
задачи |
|
STR |
Сохранить регистр
задачи |
|
LIDT |
Загрузить регистр
таблицы дескрипторов прерываний (IDT) |
|
SIDT |
Сохранить регистр
таблицы дескрипторов прерываний (IDT) |
|
MOV |
Загрузка и
сохранение управляющих регистров, отладочных регистров |
|
LMSW |
Загрузить слово
состояния машины |
|
SMSW |
Сохранить слово
состояния машины |
|
CLTS |
Очистить флаг
переключения задачи |
|
ARPL |
Согласовать
запрошенный уровень привилегий |
|
LAR |
Загрузить права
доступа |
|
LSL |
Загрузить границу
сегмента |
|
VERR |
Проверить сегмент
на возможность чтения |
|
VERW |
Проверить сегмент
на возможность записи |
|
INVD |
Очистить кэш без
обратной записи |
|
WBINVD |
Очистить кэш с
обратной записью |
|
INVLPG |
Очистить элемент
TLB |
|
LOCK |
Префикс:
заблокировать шину |
|
HLT |
Остановить
процессор |
|
RSM |
Возвратиться из
режима системного управления |
|
RDMSR |
Прочитать регистр,
специфичный для модели |
|
WRMSR |
Записать в
регистр, специфичный для модели |
|
RDPMC |
Прочитать счетчик
производительности |
|
RDTSC |
Прочитать счетчик
меток реального времени |
|
SYSENTER |
Быстрый переход к
точке входа в коде на уровне привилегий 0 |
|
SYSEXIT |
Быстрый возврат из
кода на уровне привилегий 0 к коду на уровне 3 |
Команды сопроцессора (x87
FPU)
Команды передачи данных
|
FLD |
Загрузить
вещественное число |
|
FST |
Записать вещественное
число |
|
FSTP |
Записать и
вытолкнуть вещественное число |
|
FILD |
Загрузить целое
число |
|
FIST |
Записать целое
число |
|
FISTP |
Записать и
вытолкнуть целое число |
|
FBLD |
Загрузить число
BCD |
|
FBSTP |
Записать и
вытолкнуть число BCD |
|
FXCH |
Поменять регистры
местами |
|
FCMOVE |
Вещественное
условное присваивание, если равно |
|
FCMOVNE |
Вещественное
условное присваивание, если не равно |
|
FCMOVB |
Вещественное
условное присваивание, если меньше |
|
FCMOVBE |
Вещественное
условное присваивание, если меньше или равно |
|
FCMOVNB |
Вещественное условное
присваивание, если не меньше |
|
FCMOVNBE |
Вещественное
условное присваивание, если не меньше или равно |
|
FCMOVU |
Вещественное
условное присваивание, если несравнимы |
|
FCMOVNU |
Вещественное
условное присваивание, если не несравнимы |
Базовые арифметические команды
|
FADD |
Сложение с
вещественным числом |
|
FADDP |
Сложение с
вещественным числом с выталкиванием |
|
FIADD |
Сложение с целым
числом |
|
FSUB |
Вычитание
вещественного числа |
|
FSUBP |
Вычитание
вещественного числа с выталкиванием |
|
FISUB |
Вычитание целого
числа |
|
FSUBR |
Обратное вычитание
вещественного числа |
|
FSUBRP |
Обратное вычитание
вещественного числа с выталкиванием |
|
FISUBR |
Обратное вычитание
целого числа |
|
FMUL |
Умножение
вещественного числа |
|
FMULP |
Умножение
вещественного числа с выталкиванием |
|
FIMUL |
Умножение целого
числа |
|
FDIV |
Деление
вещественного числа |
|
FDIVP |
Деление
вещественного числа с выталкиванием |
|
FIDIV |
Деление целого
числа |
|
FDIVR |
Обратное деление
вещественного числа |
|
FDIVRP |
Обратное деление
вещественного числа с выталкиванием |
|
FIDIVR |
Обратное деление
целого числа |
|
FPREM |
Вычисление остатка
от деления |
|
FPREM1 |
Вычисление остатка
от деления (по стандарту IEEE) |
|
FABS |
Модуль числа |
|
FCHS |
Смена знака числа |
|
FRNDINT |
Округление до
целого |
|
FSCALE |
Умножение на
степень двойки |
|
FSQRT |
Квадратный корень |
|
FXTRACT |
Разложение вещественного
числа на мантиссу и экспоненту |
Команды сравнения
|
FCOM |
Вещественное
сравнение |
|
FCOMP |
Вещественное
сравнение с выталкиванием |
|
FCOMPP |
Вещественное
сравнение с двойным выталкиванием |
|
FUCOM |
Неупорядоченное
вещественное сравнение |
|
FUCOMP |
Неупорядоченное
вещественное сравнение с выталкиванием |
|
FUCOMPP |
Неупорядоченное
вещественное сравнение с двойным выталкиванием |
|
FICOM |
Сравнение с целым
числом |
|
FICOMP |
Сравнение с целым
числом с выталкиванием |
|
FCOMI |
Вещественное
сравнение с установкой EFLAGS |
|
FUCOMI |
Неупорядоченное
вещественное сравнение с установкой EFLAGS |
|
FCOMIP |
Вещественное
сравнение с установкой EFLAGS и выталкиванием |
|
FUCOMIP |
Неупорядоченное
вещественное сравнение с установкой EFLAGS и выталкиванием |
|
FTST |
Проверка
вещественного числа (сравнение с 0) |
|
FXAM |
Определить класс
вещественного числа |
Команды трансцендентных операций
|
FSIN |
Синус |
|
FCOS |
Косинус |
|
FSINCOS |
Синус и косинус |
|
FPTAN |
Частичный тангенс |
|
FPATAN |
Частичный
арктангенс |
|
F2XM1 |
2x-1 |
|
FYL2X |
y*log2x |
|
FYL2XP1 |
y*log2(x+1) |
Загрузка констант
|
FLD1 |
Загрузить число +1.0 |
|
FLDZ |
Загрузить число +0.0 |
|
FLDPI |
Загрузить число π |
|
FLDL2E |
Загрузить число
log2e |
|
FLDLN2 |
Загрузить число
loge2 |
|
FLDL2T |
Загрузить число
log210 |
|
FLDLG2 |
Загрузить число
log102 |
Команды управления сопроцессором
|
FINCSTP |
Увеличить
указатель вершины стека сопроцессора |
|
FDECSTP |
Уменьшить
указатель вершины стека сопроцессора |
|
FFREE |
Освободить
вещественный регистр |
|
FINIT |
Инициализировать
сопроцессор после проверки на ошибку |
|
FNINIT |
Инициализировать
сопроцессор без проверки на ошибку |
|
FCLEX |
Очистить флаги
исключений сопроцессора после проверки на ошибку |
|
FNCLEX |
Очистить флаги
исключений сопроцессора без проверки на ошибку |
|
FSTCW |
Сохранить регистр
управления сопроцессора после проверки на ошибку |
|
FNTSCW |
Сохранить регистр
управления сопроцессора без проверки на ошибку |
|
FLDCW |
Загрузить регистр
управления сопроцессора |
|
FSTENV |
Сохранить
окружение сопроцессора после проверки на ошибку |
|
FNSTENV |
Сохранить
окружение сопроцессора без проверки на ошибку |
|
FLDENV |
Загрузить
окружение сопроцессора |
|
FSAVE |
Сохранить состояние
сопроцессора после проверки на ошибку |
|
FNSAVE |
Сохранить
состояние сопроцессора без проверки на ошибку |
|
FRSTOR |
Восстановить
состояние сопроцессора |
|
FSTSW |
Сохранить регистр
состояния сопроцессора после проверки на ошибку |
|
FNSTSW |
Сохранить регистр
состояния сопроцессора без проверки на ошибку |
|
WAIT/FWAIT |
Ждать завершения
работы сопроцессора |
|
FNOP |
Нет операции
сопроцессора |
Команды управления состоянием сопроцессора и SIMD
|
FXSAVE |
Сохранить
состояние сопроцессора и блока SIMD |
|
FXRSTOR |
Восстановить состояние
сопроцессора и блока SIMD |
Команды
блока MMX
|
Команда |
Описание |
|
EMMS |
Подготовка сопроцессора к исполнению команд |
|
MASKMOVQ |
Запись байт в память из регистра MMX по маске (выборочная) |
|
MOVD |
Перемещение двойного слова |
|
MOVNTQ |
Запись 64 бит в память из регистра MMX (без использования кэш-памяти) |
|
MOVQ |
Переместить учетверенное слово (64 бит) |
|
PACKSSWD |
Упаковка со знаковым насыщением слов в байты |
|
PACKSSDW |
Упаковка со знаковым насыщением двойных слов в слова |
|
PACKUSWB |
Упаковка с беззнаковым насыщением слов в байты |
|
PADDB |
Сложение упакованных байт |
|
PADDW |
Сложение упакованных слов |
|
PADDD |
Сложение упакованных двойных слов |
|
PADDSB |
Сложение упакованных байт со знаковым насыщением |
|
PADDSW |
Сложение упакованных слов со знаковым насыщением |
|
PADDUSB |
Сложение упакованных байт с беззнаковым насыщением |
|
PADDUSW |
Сложение упакованных слов с беззнаковым насыщением |
|
PAND |
Упакованное логическое И |
|
PANDN |
Упакованное логическое И-НЕ |
|
PAVGB |
Упакованное среднее (байт) |
|
PAVGW |
Упакованное среднее (слов) |
|
PCMPEQB |
Сравнение на равенство упакованных байт |
|
PCMPEQW |
Сравнение на равенство упакованных слов |
|
PCMPEQD |
Сравнение на равенство упакованных двойных слов |
|
PCMPGTB |
Сравнение по условию "больше чем" упакованных байт |
|
PCMPGTW |
Сравнение по условию "больше чем" упакованных слов |
|
PCMPGTD |
Сравнение по условию "больше чем" упакованных двойных слов |
|
PEXTRW |
Извлечение 16-битного слова из регистра MMX по маске |
|
PINSRW |
Вставка 16-битного слова в регистр MMX |
|
PMADDWD |
Упакованное знаковое умножение слов операндов с последующим сложением промежуточных результатов в двойном слове |
|
PMAXSW |
Возврат максимальных упакованных знаковых слов |
|
PMAXUB |
Возврат максимальных упакованных беззнаковых байт |
|
PMINSW |
Возврат минимальных упакованных знаковых слов |
|
PMINUB |
Возврат минимальных упакованных беззнаковых байт |
|
PMOVMSKB |
Перемещение байтовой знаковой маски в целочисленный регистр |
|
PMULHUW |
Упакованное беззнаковое умножение слов с возвратом старшего слова результата |
|
PMULHW |
Упакованное знаковое умножение слов с возвратом старшего слова результата |
|
PMULLW |
Упакованное знаковое умножение слов с возвратом младшего слова результата |
|
POR |
Упакованное логическое ИЛИ |
|
PSADBW |
Суммарная разница значений пар беззнаковых упакованных байт |
|
PSHUFW |
Перераспределение упакованных слов |
|
PSLLW |
Логический сдвиг влево упакованных слов |
|
PSLLD |
Логический сдвиг влево упакованных двойных слов |
|
PSLLQ |
Логический сдвиг влево упакованных учетверенных слов |
|
PSRAW |
Арифметический сдвиг вправо упакованных слов |
|
PSRAD |
Арифметический сдвиг вправо упакованных двойных слов |
|
PSRLW |
Логический сдвиг вправо упакованных слов |
|
PSRLD |
Логический сдвиг вправо упакованных двойных слов |
|
PSRLQ |
Логический сдвиг вправо упакованных учетверенных слов |
|
PSUBB |
Вычитание упакованных байт |
|
PSUBW |
Вычитание упакованных слов |
|
PSUBD |
Вычитание упакованных двойных слов |
|
PSUBSB |
Вычитание упакованных байт со знаковым насыщением |
|
PSUBSW |
Вычитание упакованных слов со знаковым насыщением |
|
PSUBUSB |
Вычитание упакованных байт с беззнаковым насыщением |
|
PSUBUSW |
Вычитание упакованных слов с беззнаковым насыщением |
|
PUNPCKHBW |
Распаковка старших упакованных байт в слова |
|
PUNPCKHWD |
Распаковка старших упакованных слов в двойные слова |
|
PUNPCKHDQ |
Распаковка старших упакованных двойных слов в учетверенные слова |
|
PUNPCKLBW |
Распаковка младших упакованных байт в слова |
|
PUNPCKLWD |
Распаковка младших упакованных слов в двойные слова |
|
PUNPCKLDQ |
Распаковка младших упакованных двойных слов в учетверенные слова |
|
PXOR |
Упакованное логическое исключающее ИЛИ |
Команды
блока XMM
Команды
SSE
|
Команда |
Описание |
|
ADDPS |
Векторное сложение Float |
|
ADDSS |
Скалярное сложение Float |
|
ANDNPS |
Поразрядное логическое И-НЕ над Float |
|
ANDPS |
Поразрядное логическое И над Float |
|
CMPPS |
Векторное сравнение Float |
|
CMPSS |
Скалярное сравнение Float |
|
COMISS |
Скалярное упорядоченное сравнение с установкой EFLAGS |
|
CVTPI2PS |
Преобразование двух упакованных DWord в два упакованных Float |
|
CVTPS2PI |
Преобразование двух упакованных Float в два упакованных DWord |
|
CVTSI2SS |
Скалярное преобразование знакового DWord в Float |
|
CVTSS2SI |
Скалярное преобразование Float в знаковое DWord |
|
CVTTPS2PI |
Преобразование усечением двух Float в два знаковых DWord |
|
CVTTSS2SI |
Скалярное преобразование усечением Float в знаковое DWord |
|
DIVPS |
Векторное деление Float |
|
DIVSS |
Скалярное деление Float |
|
FXRSTOR |
Восстановление без проверки наличия незамаскированных исключений с плавающей точкой состояния сопроцессора, целочисленного и потокового MMX-расширений из памяти |
|
FXSAVE |
Сохранение состояния сопроцессора, целочисленного и потокового MMX-расширений в памяти |
|
LDMXCSR |
Загрузка регистра состояния/управления MXCSR из памяти |
|
MAXPS |
Вычисление максимальных упакованных значений Float |
|
MAXSS |
Скалярное вычисление максимального значения Float |
|
MINPS |
Вычисление минимальных упакованных значений Float |
|
MINSS |
Скалярное вычисление минимального значения Float |
|
MOVAPS |
Перемещение выровненных 128 бит |
|
MOVHLPS |
Перемещение верхних упакованных значений Float в нижние |
|
MOVHPS |
Перемещение верхних упакованных значений Float |
|
MOVLHPS |
Перемещение нижних упакованных значений Float в верхние |
|
MOVLPS |
Перемещение невыровненных нижних упакованных значений Float |
|
MOVMSKPS |
Перемещение знаковой маски в целочисленный регистр |
|
MOVNTPS |
Запись в память 128 бит из регистра XMM, минуя кэш |
|
MOVSS |
Скалярное перемещение Float |
|
MOVUPS |
Перемещение невыровненных упакованных Float |
|
MULPS |
Векторное умножение Float |
|
MULSS |
Скалярное умножение Float |
|
ORPS |
Поразрядное логическое ИЛИ над Float |
|
RCPPS |
Векторное вычисление обратных значений Float |
|
RCPSS |
Скалярное вычисление обратного значения Float |
|
RSQRTPS |
Векторное вычисление обратного значения квадратного корня Float |
|
RSQRTSS |
Скалярное вычисление обратного значения квадратного корня Float |
|
SHUFPS |
Перераспределение упакованных значений Float |
|
SQRTPS |
Векторное вычисление квадратного корня Float |
|
SQRTSS |
Скалярное вычисление квадратного корня Float |
|
STMXCSR |
Сохранение регистра управления/состояния MXCSR в памяти |
|
SUBPS |
Векторное вычитание Float |
|
SUBSS |
Скалярное вычитание Float |
|
UCOMISS |
Неупорядоченное скалярное сравнение с установкой флагов в EFLAGS |
|
UNPCKHPS |
Перенос верхних упакованных значений Float с чередованием |
|
UNPCKLPS |
Перенос нижних упакованных значений Float с чередованием |
|
XORPS |
Поразрядное логическое исключающее ИЛИ над Float |
Команды SSE2
|
Команда |
Описание |
|
ADDPD |
Векторное сложение Double |
|
ADDSD |
Скалярное сложение Double |
|
ANDPD |
Поразрядное логическое И над Double |
|
ANDNPD |
Поразрядное логическое И-НЕ над Double |
|
CLFLUSH |
Сброс в память строки кэша, содержащей адрес |
|
CMPPD |
Векторное сравнение Double |
|
CMPSD |
Скалярное сравнение Double |
|
COMISD |
Скалярное сравнение упорядоченных значений и установка EFLAGS |
|
CVTDQ2PD |
Преобразование двух упакованных DWord в два Double |
|
CVTDQ2PS |
Преобразование четырех упакованных знаковых DWord в четыре упакованных Float |
|
CVTPD2DQ |
Преобразование двух упакованных Double в два упакованных DWord |
|
CVTPD2PI |
Преобразование двух упакованных Double в два упакованных DWord |
|
CVTPD2PS |
Преобразование двух упакованных Float в два упакованных Double |
|
CVTSD2SI |
Преобразование скалярного Double в DWord |
|
CVTSD2SS |
Преобразование скалярного Double в Float |
|
CVTSI2SD |
Преобразование скалярного DWord в Double |
|
CVTSS2SD |
Преобразование скалярного Float в Double |
|
CVTTPD2PI |
Преобразование усечением двух упакованных Double в два DWord |
|
CVTTPD2DQ |
Преобразование усечением двух упакованных Double в два DWord |
|
CVTTPS2DQ |
Преобразование усечением четырех упакованных Float в четыре знаковых DWord |
|
CVTTSD2SI |
Преобразование усечением скалярного Double в Float |
|
DIVPD |
Векторное деление Double |
|
DIVSD |
Скалярное деление Double |
|
LFENCE |
Упорядочить операции загрузки |
|
MASKMOVDQU |
Выборочная запись байт из источника в память |
|
MAXPD |
Вычисление максимальных упакованных значений Double |
|
MAXSD |
Скалярное вычисление максимального значения Double |
|
MFENCE |
Упорядочить операции загрузки и сохранения |
|
MINPD |
Вычисление минимальных упакованных значений Double |
|
MINSP |
Скалярное вычисление минимального значения Double |
|
MOVAPD |
Перемещение упакованных выровненных Double |
|
MOVD |
Перемещение DWord |
|
MOVDQA |
Перемещение выровненных 128 бит |
|
MOVDQU |
Перемещение невыровненных 128 бит |
|
MOVDQ2Q |
Перемещение младшего QWord |
|
MOVHPD |
Перемещение старшего упакованного Double |
|
MOVLPD |
Перемещение младшего упакованного Double |
|
MOVMSKPD |
Извлечение 2-битной знаковой маски упакованных Double |
|
MOVNTDQ |
Сохранение двух QWord в память без использования кэша |
|
MOVNTI |
Сохранение DWord из регистра общего назначения в память без использования кэша |
|
MOVNTPD |
Сохранение двух Double в память без использования кэша |
|
MOVQ |
Перемещение QWord |
|
MOVQ2DQ |
Перемещение QWord из MMX-регистра в младшее QWord XMM-регистра |
|
MOVSD |
Перемещение скалярного Double |
|
MOVUPD |
Перемещение невыровненных упакованных Double |
|
MULPD |
Векторное умножение Double |
|
MULSD |
Скалярное умножение Double |
|
ORPD |
Поразрядное логическое ИЛИ над Double |
|
PACKSSWB |
Упаковка со знаковым насыщением слов в байты |
|
PACKSSDW |
Упаковка со знаковым насыщением двойных слов в слова |
|
PACKUSWB |
Упаковка с беззнаковым насыщением слов в байты |
|
PADDB |
Сложение упакованных байт |
|
PADDW |
Сложение упакованных слов (Word) |
|
PADDD |
Сложение упакованных двойных слов (DWord) |
|
PADDQ |
Сложение учетверенных слов (QWord) |
|
PADDSB |
Сложение упакованных байт со знаковым насыщением |
|
PADDSW |
Сложение упакованных слов со знаковым насыщением |
|
PADDUSB |
Сложение упакованных байт с беззнаковым насыщением |
|
PADDUSW |
Сложение упакованных слов с беззнаковым насыщением |
|
PAND |
Упакованное логическое И |
|
PANDN |
Упакованное логическое И-НЕ |
|
PAUSE |
Улучшить выполнение цикла ожидания-занятости |
|
PAVGB |
Упакованное среднее байт |
|
PAVGW |
Упакованное среднее слов |
|
PCMPEQB |
Сравнение на равенство упакованных байт |
|
PCMPEQW |
Сравнение на равенство упакованных слов |
|
PCMPEQD |
Сравнение на равенство упакованных двойных слов |
|
PCMPGTB |
Сравнение по условию "больше чем" упакованных байт |
|
PCMPGTW |
Сравнение по условию "больше чем" упакованных слов |
|
PCMPGTD |
Сравнение по условию "больше чем" упакованных двойных слов |
|
PEXTRW |
Извлечение 16-битного слова из XMM-регистра |
|
PINSRW |
Вставка 16-битного слова в регистр XMM |
|
PMADDWD |
Упакованное знаковое умножение слов с последующим сложением промежуточных результатов в DWord |
|
PMAXSW |
Возврат максимальных упакованных знаковых слов |
|
PMAXUB |
Возврат максимальных упакованных беззнаковых байт |
|
PMINSW |
Возврат минмальных упакованных знаковых слов |
|
PMINUB |
Возврат минимальных упакованных беззнаковых байт |
|
PMOVMSKB |
Перемещение байтовой знаковой маски в целочисленный регистр |
|
PMULHUW |
Упакованное беззнаковое умножение слов с возвратом старших слов результата |
|
PMULHW |
Упакованное знаковое умножение слов с возвратом старших слов результата |
|
PMULLW |
Упакованное знаковое умножение слов с возвратом младших слов результата |
|
PMULUDQ |
Умножение DWord и сохранение результата в XMM-регистре. |
|
POR |
Упакованное логическое ИЛИ |
|
PSADBW |
Суммарная разница значений пар беззнаковых упакованных байт |
|
PSHUFD |
Перераспределение упакованных двойных слов |
|
PSHUFHW |
Перераспределение упакованных слов в старших DWord |
|
PSHUFLW |
Перераспределение упакованных слов в младших DWord |
|
PSLLDQ |
Побайтный сдвиг влево |
|
PSLLW |
Логический сдвиг слов влево |
|
PSLLD |
Логический сдвиг двойных слов влево |
|
PSLLQ |
Логический сдвиг учетверенных слов влево |
|
PSRAW |
Арифметический сдвиг слов влево |
|
PSRAD |
Арифметический сдвиг двойных слов влево |
|
PSRLDQ |
Побайтный сдвиг вправо |
|
PSRLW |
Логический сдвиг слов вправо |
|
PSRLD |
Логический сдвиг двойных слов вправо |
|
PSRLQ |
Логический сдвиг учетверенных слов вправо |
|
PSUBB |
Вычитание упакованных байт |
|
PSUBW |
Вычитание упакованных слов |
|
PSUBD |
Вычитание упакованных двойных слов |
|
PSUBQ |
Вычитание учетверенных слов |
|
PSUBSB |
Вычитание упакованных слов со знаковым насыщением |
|
PSUBSW |
Вычитание упакованных двойных слов со знаковым насыщением |
|
PSUBUSB |
Вычитание упакованных байт с беззнаковым насыщением |
|
PSUBUSW |
Вычитание упакованных слов с беззнаковым насыщением |
|
PUNPCKHBW |
Распаковка старших упакованных байт в слова |
|
PUNPCKHWD |
Распаковка старших упакованных слов в двойные слова |
|
PUNPCKHDQ |
Распаковка старших упакованных двойных слов в учетверенные слова |
|
PUNPCKHQDQ |
Распаковка старших упакованных учетверенных слов в двойные учетверенные слова |
|
PUNPCKLBW |
Распаковка младших упакованных байт в слова |
|
PUNPCKLWD |
Распаковка младших упакованных слов в двойные слова |
|
PUNPCKLDQ |
Распаковка младших упакованных двойных слов в учетверенные слова |
|
PUNPCKLQDQ |
Распаковка младших упакованных учетверенных слов в двойные учетверенные слова |
|
PXOR |
Упакованное логическое исключающее ИЛИ |
|
SHUFPD |
Перестановка упакованных значений Double |
|
SQRTPD |
Векторное вычисление квадратного корня Double |
|
SQRTSD |
Скалярное вычисление квадратного корня Double |
|
SUBPD |
Векторное вычитание Double |
|
SUBSD |
Скалярное вычитание Double |
|
UCOMISD |
Неупорядоченное скалярное сравнение Double с установкой флагов в EFLAGS |
|
UNPCKHPD |
Перенос верхних упакованных значений Double с чередованием |
|
UNPCKLPD |
Перенос нижних упакованных значений Double с чередованием |
|
XORDP |
Поразрядное логическое исключающее ИЛИ над Double |
Команды SSE3
|
Команда |
Описание |
|
FISTTP |
сохранение целочисленного значения с выталкиванием из
стека x87 с округлением в сторону нуля |
|
MOVSLDUP |
загрузка 4-х упакованных float с
дублированием 1-го и 3-го элементов |
|
MOVHLDUP |
загрузка 4-х упакованных float с
дублированием 2-го и 4-го элементов |
|
MOVDDUP |
загрузка 64-битного числа в 128-битное с дублированием |
|
LDDQU |
загрузка невыровненных 128 бит |
|
ADDSUBPS |
сложение 2-х и 4-х упакованных float
и вычитание 1-х и 3-х |
|
ADDSUBPD |
сложение 1-х упакованных double
и вычитание вторых |
|
HADDPS |
горизонтальное сложение упакованных float |
|
HSUBPS |
горизонтальное вычитание упакованных float |
|
HADDPD |
горизонтальное сложение упакованных double |
|
HSUBPD |
горизонтальное вычитание упакованных double |
|
MONITOR |
устанавливает диапазон адресов, по которому будет
отслеживаться записи по протоколу write-back |
|
MWAIT |
вводит процессор в режим низкого энергопотребления при
ожидании записей по протоколу write-back по
заданному диапазону адресов |
Команды
расширения 3DNow!
Команды
3DNow!
|
Команда |
Описание |
|
FEMMS |
Подготовка сопроцессора к выполнению команд |
|
PAVGUSB |
Вычисление округленного среднего значения восьми пар упакованных беззнаковых байт операндов |
|
PF2ID |
Преобразование упакованного вещественного в упакованное целое |
|
PFACC |
Вещественное накопление |
|
PFADD |
Сложение упакованных Float |
|
PFCMPEQ |
Сравнение на равенство упакованных Float |
|
PFCMPGE |
Сравнение на "больше или равно" упакованных Float |
|
PFCMPGT |
Сравнение на "больше" упакованных Float |
|
PFMAX |
Максимум упакованных Float |
|
PFMIN |
Минимум упакованных Float |
|
PFMUL |
Умножение упакованных Float |
|
PFRCP |
Приближенное значение обратной величины упакованных Float |
|
PFRCPIT1 |
Первый итеративный шаг вычисления обратной величины упакованных Float |
|
PFRCPIT2 |
Второй итеративный шаг вычисления обратной величины упакованных Float |
|
PFRSQRT1 |
Первый итеративный шаг вычисления квадратного корня упакованных Float |
|
PFRSQRT |
Приближенное значение квадратного корня упакованных Float |
|
PFSUB |
Упакованное вычитание двух пар элементов Float |
|
PFSUBR |
Упакованное обратное вычитание двух пар элементов Float |
|
PI2FD |
Преобразование упакованных DWord в упакованные Float |
|
PMULHRW |
Умножение с округлением упакованных знаковых слов с сохранением старших 16 бит результата |
|
PREFETCH |
Предвыборка данных из памяти в кэш данных L1 |
|
PREFETCHW |
Предвыборка данных из памяти в кэш данных L1 |
Команды
3DNow! Ext.
|
Команда |
Описание |
|
PI2WI |
Преобразование с усечением и расширением знака упакованных Float в упакованные слова |
|
PFNACC |
Отрицательное накопление упакованных Float |
|
PFPNACC |
Смешанное отрицательное и положительное накопление упакованных Float |
|
PI2FW |
Преобразование упакованных слов в упакованные Float |
|
PSWAPD |
Перестановка младшего и старшего DWord |
Также в расширение входят команды: MASKMOVQ, MOVNTQ, PAVGB, PAVGW, PEXTRW, PINSRW, PMAXSW, PMAXUB, PMINSW, PMINUB, PMOVMSKB, PMULHUW, PREFETCHNTA, PREFETCHT0, PREFETCHT1, PREFETCHT2, PSADBW, PSHUFW, SFENCE. Они полностью совпадают с аналогичными командами MMX.
Команды архитектуры x86-64
Архитектура x86-64 поддерживает весь приведенный выше набор команд архитектуры x86 (включая расширения MMX, SSE, SSE2, 3DNow!, исключая SSE3), расширяя некоторые инструкции для использования 64-битных операндов. Дополнительно вводятся две новые инструкции:
|
Команда |
Описание |
|
MOVSXD |
Пересылка DWord в QWord со знаковым расширением |
|
SWAPGS |
Быстрая загрузка адреса системных структур данных |