Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 курс / Лекции / Лекция 26 - Расширения системы команд IA-32 – MMX и SSE..ppt
Скачиваний:
43
Добавлен:
18.02.2023
Размер:
458.24 Кб
Скачать

Виды MMX-команд

Команды сложения и вычитания

Команды сдвига

Команды умножения

Команды сравнения

Команды упаковки и распаковки

Команды передачи данных

Команды передачи данных

MOVD – пересылка 32-разрядного значения:

из памяти или 32-разрядного РОН в MMX-регистр (старшие разряды заполняются нулями),

из одного MMX-регистра в другой (старшие разряды заполняются нулями),из младших разрядов MMX-регистра в память или в 32-разряный РОН.

MOVQ – пересылка 64-разрядного значения:из памяти в MMX-регистр,

из одного MMX-регистра в другой,из MMX-регистра в память.

Это единственные MMX-команды, у которых выходной операнд может находится в памяти или РОН.

EMMS – очистка всех MMX-регистров

Команды сложения и

вычитания

PADDB, PADDW, PADDD – сложение по принципу циклической арифметики.

PADDSB, PADDSW – сложение по принципу арифметики со знаковым насыщением.

PADDUSB, PADDUSW – сложение по принципу арифметики с незнаковым насыщением.

PSUBB, PSUBW, PSUBD – вычитание по принципу циклической арифметики.

PSUBSB, PSUBSW – вычитание по принципу арифметики со знаковым насыщением.

PSUBUSB, PSUBUSW – вычитание по принципу арифметики с незнаковым насыщением.

У этих команд два операнда: 1 операнд – назначение (MMX-регистр), 2 операнд – источник (MMX-регистр или память).

Команды умножения

PMULHW – попарное умножение 16-разрядных слов со знаком. Результатом операции являются четыре 32-разрядных числа. Старшие 16 разрядов результата сохраняются в назначении, а младшие 16 разрядов теряются.

PMULLW – попарное умножение 16-разрядных слов со знаком. Результатом операции являются четыре 32-разрядных числа. Младшие 16 разрядов результата сохраняются в назначении, а старшие 16 разрядов теряются.

Полный результат получают выполняя следующие шаги:

1.Получить старшие 16 бит произведения, используя команду pmulhw.

2.Получить младшие 16 бит произведения, используя команду pmullw.

3.Объединить частичные результаты в одно двойное слово с помощью команд punpckhwd и punpcklwd.

Команды умножения

PMADDWD – попарное умножение 16-разрядных слов со знаком, находящихся в двух операндах. После получения в результате четырех 32-разрядных произведений первое произведение складывается со вторым, а третье с четвертым. Суммы записываются в 32-разрядные слова выходного операнда.

Команды сравнения

PCMPEQB, PCMPEQW, PCMPEQD – попарное сравнение элементов данных (целочисленных значений) входного и выходного операндов. Если элемент данных выходного операнда равен соответствующему элементу входного, то такой элемент заполняется единицами. В противном случае – нулями.

PCMPGTB, PCMPGTW, PCMPGTD – попарное сравнение элементов данных (целочисленных знаковых значений) входного и выходного операндов. Если элемент данных выходного операнда больше соответствующего элемента входного, то такой элемент заполняется единицами. В противном случае – нулями.

Логические команды

Логические команды выполняются над 64-разрядными данными.

PAND – вычисляет поразрядное логическое И,PANDN – выполняет поразрядную операцию НЕ над выходным операндом, а затем поразрядную операцию И над преобразованным выходным операндом и входным операндом,

POR – вычисляет поразрядное логическое ИЛИ,PXOR – вычисляет поразрядное исключающее ИЛИ.

Команды сдвига

PSLLW, PSLLD, PSLLQ – логический сдвиг влево элементов данных, находящихся в выходном операнде, на количество бит, содержащемся во входном операнде. Младшие разряды заполняются нулями.

PSRLW, PSRLD, PSRLQ – логический сдвиг вправо элементов данных, находящихся в выходном операнде, на количество бит, содержащемся во входном операнде. Старшие разряды заполняются нулями.

PSRAW, PSRAD, PSRAQ – арифметический сдвиг вправо элементов данных, находящихся в выходном операнде, на количество бит, содержащемся во входном операнде. Старшие разряды заполняются битом знака.

Команды упаковки

Команды упаковки предназначены для преобразования длинных элементов данных в более короткие. Если исходное значение не помещается в коротком элементе данных, то происходит «насыщение» - результатом считается граничное значение допустимого диапазона выходного типа данных.

PACKSSWB, PACKSSDW – преобразование длинных целочисленных данных со знаком в более короткие.

PACKUSWB, PACKUSDW – преобразование длинных целочисленных данных без знака в более короткие.

Команды распаковки

Команды распаковки предназначены для преобразования коротких элементов данных в более длинные.

PUNPCKHBW, PUNPCKHWD, PUNPCKHDQ – попарное объединение исходных элементов данных, находившихся в старших 32 разрядах обоих операндов. Полученные в результате более длинные элементы данных записываются в выходной операнд. Исходные значения младших разрядов операндов на результат не влияют.

PUNPCKLBW, PUNPCKLWD, PUNPCKLDQ – попарное объединение исходных элементов данных, находившихся в младших 32 разрядах обоих операндов. Полученные в результате более длинные элементы данных записываются в выходной операнд. Исходные значения старших разрядов операндов на результат не влияют.