Команды архитектур x86 и x86-64

Команды архитектуры 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

LOOP

Цикл со счетчиком в 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 или SFOF

"меньше или равно" или "не больше"

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

Быстрая загрузка адреса системных структур данных