Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
Целочисленное MMX расширение
Обработка данных MMX-расширения может выполняться с использованием:
· циклической арифметики (wraparound arithmetic),
· арифметики с насыщением (saturation arithmetic).
Большинство команд технологии ММХ обрабатывают данные по правилам циклической арифметики, а некоторые команды задействуют арифметику с насыщением. Если команда задействует циклическую арифметику (другое название — арифметика с циклическим переносом) и результат операции выходит за двоичную разрядную сетку используемого типа данных, то «лишние» старшие биты результата отбрасываются.
Если команда использует арифметику с насыщением и результат операции превышает максимальное представимое значение, то в выходной операнд записывается это максимальное значение (происходит «насыщение»). Аналогично, если результат операции оказывается меньше нижней границы допустимого диапазона, то в выходной операнд записывается минимальное возможное значение.
В арифметике с насыщением ММХ-команды сложения, вычитания и упаковки данных могут обрабатывать числа со знаком или без знака. Данные со знаком и без знака имеют различный допустимый диапазон. Следовательно, если используется арифметика с насыщением, то при выходе результата операции за пределы допустимого диапазона в выходной операнд записываются различные значения, в зависимости от типа данных.
Синтаксис ММХ-команд. Большинство команд в мнемонике имеют суффикс, который определяет тип данных и используемую арифметику:
· US (Unsigned Saturation) — арифметика с насыщением, данные без знака или, по-другому, беззнаковое насыщение. Если команда использует арифметику с насыщением и результат операции превышает максимальное представимое значение, то в выходной операнд записывается это максимальное значение (происходит «насыщение»). Аналогично, если результат операции оказался меньше нижней границы допустимого диапазона, то в выходной операнд записывается минимально возможное значение.
· S или SS (Signed Saturation) — арифметика с насыщением для данных со знаком (или знаковое насыщение).
· Если в суффиксе нет ни символа S ни символов SS, то применяется циклическая арифметика (wraparound). Если в этом случае результат операции выходит за двоичную разрядную сетку используемого типа данных, то «лишние» старшие биты результата отбрасываются.
· b, w, d, q — эти буквы в конце имени указывают тип данных. Если в суффиксе есть две из этих букв, то первая соответствует входному операнду, вторая — выходному.
Синтаксис MMX команд:
· Мнемоника приемник, источник
· Мнемоника приемник, источник, маска
· Мнемоника приемник
После обзора команды будут рассмотрены подробно.
Категория
| Подкатегория
| Команды
| Инициализация
|
| EMMS
| Передача данных
| Пересылки
| MOVD, MOVQ
| Упаковка данных
|
| PACKSSWB, PACKSSDW – числа со знаком
PACKUSWB – числа без знака
| Распаковка данных
|
| PUNPCKHBW, PUNPCKHWD, PUNPCKHDQ – старшая половина
PUNPCKLBW, PUNPCKLWD, PUNPCKLDQ – младшая половина
| Арифметика
| Сложение
Вычитание
Умножение
| PADD, PADDS, PADDUS
PSUB, PSUBS, PSUBUS
PMULHW, PMULLW, PMADDWD
| Логика
|
| PAND, PANDN, POR, PXOR
| Сдвиги
|
| PSLLW, PSLLD, PSLLQ – логические влево
PSRLW, PSRLD, PSRLQ – логические вправо
PSRAW, PSRAD – арифметические (вправо)
| Сравнения
|
| PCMPEQB, PCMPEQW, PCMPEQD – на равенство
PCMPGTB, PCMPGTW, PCMPGTD – на значение
| Дополнительные
| Вычисления
| PAVGB, PAVDW - среднее значеие
PSADBW – сумма разностей
| Извлечения
| PEXTRW – извлечь слово
PINSRW – вставить слово
PMAXUB, PMAXSW – извлечь максимальное
PMINUB, PMINSW – извлечь минимальное
| Маска из знаков байтов
| PMOVMSKB
|
Инициализация.
Команда
| Описание
| EMMS
| Empty MMx State
Очистка стека регистров MMX. Установка всех единиц в слове тегов.
| Передача данных. Данные передаются между:
· регистрами MMX,
· регистром MMX и регистром основного процессора,
· регистром MMX и памятью.
Если размер приемника меньше размера источника, то лишние разряды обнуляются.
Команда
| Описание
| MOVD приемник, источник
| MOVe Double word – переместить двойное слово (32 разряда).
| MOVQ приемник, источник
| MOVe Quarter word – переместить учетверенное слово (64 разряда).
| Упаковка данных. ММХ-команды упаковки преобразуют длинные элементы данных A6- и 32-разрядные слова) в более короткие. Если исходное значение «не помещается» в коротком элементе данных, то происходит «насыщение» — результатом считается граничное значение допустимого диапазона выходного типа данных.
Мнемоника
| Описание
| PACKSSWB
| PACK with Signed Saturation Words to Bytes
Упаковка со знаковым насыщением слов приемника (регистра MMX) источника (память или регистр MMX) в байты, расположенные в приемнике (регистре MMX). Пример:
Слова приемника MM0 упаковываются в байты младшей части применика MM0.
Слова источника MM1 упаковываются в байты старшей части применика MM0.
| PACKUSWB
| PACK with Unigned Saturation Words to Bytes
Упаковка с беззнаковым насыщением знаковых слов приемника (регистра MMX) источника (память или регистр MMX) в байты без знака, расположенные в приемнике (регистре MMX).
Отрицательные числа преобразуются в нули.
| PACKSSDW
| PACK with Signed Saturation Double words to Words
Упаковка со знаковым насыщением двойных слов приемника (регистра MMX) и источника (память или регистр MMX) в слова, расположенные в приемнике (регистре MMX). Пример:
Двойные слова приемника MM1 упаковываются в байты младшей части применика MM1.
Двойные слова источника MM2 упаковываются в байты старшей части применика MM1.
| Распаковка данных. MMX-команды распаковки попарно объединяют элементы данных из обоих операндов в более длинные элементы выходного операнда. Этими командами можно пользоваться для увеличения числа значащих разрядов при вычислениях.
Мнемоника
| Описание
| PUNPCKHBW
| P UNPaCK High packed Byfes to Words
Распаковывает старшие части приемника и источника в приемник. Происходит чередование в регистре назначения байт старшей половины источника с байтами старшей половины приемника.
Байты старшей половины приемника MM0 распаковываются в нечетные байты приемника MM1.
Байты старшей половины источника MM1 распаковываются в четные байты приемника MM0.
| PUNPCKLBW
| P UNPaCK Low packed Byfes to Words
Распаковывает младшие части приемника и источника в приемник. Происходит чередование в регистре назначения байт младшей половины источника с байтами младшей половины приемника. Пример:
| PUNPCKHWD
| P UNPaCK High packed Words to Double words
Распаковывает старшие части приемника и источника в приемник. Происходит чередование в регистре назначения слов старшей половины источника со словами старшей половины приемника.
| PUNPCKLWD
| P UNPaCK Low packed Words to Double words
Распаковывает младшие части приемника и источника в приемник. Происходит чередование в регистре назначения слов младшей половины источника со словами младшей половины приемника. Пример:
| PUNPCKHDQ
| P UNPaCK High packed Double words to Quad words.
Распаковывает старшие части приемника и источника в приемник. Происходит чередование в регистре назначения слов старшей половины источника со словами старшей половины приемника.
.
| PUNPCKLDQ
| P UNPaCK Low packed Double words to Quad words.
Распаковывает младшие части приемника и источника в приемник. Происходит чередование в регистре назначения двойных слов младшей половины источника с двойными словами младшей половины приемника. Пример:
| Cложение и вычитание. ММХ-команды сложения и вычитания работают с упакованными байтами и словами со знаком и без знака, а также с упакованными двойными словами со знаком. Они могут использовать как циклическую арифметику, так и арифметику с насыщением.
Входной операнд – регистр MMX или память.
Выходной операнд – регистр MMX.
Мнемоника
| Описание
| PADDB
| Packed ADDition Bytes
Сложение упакованных байт. без насыщения (с циклическим переполнением)
| PADDW
| Packed ADDition Words
Сложение упакованных слов. без насыщения (с циклическим переполнением).
| PADDD
| Packed ADDition Double words
Сложение упакованных двойных слов без насыщения (с циклическим переполнением).
| PADDSB
| Packed ADDition with sighed Saturation Bytes
Сложение упакованных байт со знаковым насыщением.
| PADDSW
| Packed ADDition with sighed Saturation Words
Сложение упакованных слов со знаковым насыщением.
| PADDUSB
| Packed ADDition with Unsighed Saturation Bytes
Сложение упакованных байт с беззнаковым насыщением.
| PADDUSW
| Packed ADDition with Unsighed Saturation Words
Сложение упакованных слов с беззнаковым насыщением. Пример;
Серым цветом выделено слово результата, в котором произошло насыщение.
| PSUBB
| Packed SUBtraction Bytes
Вычитание упакованных байт без насыщения (с циклическим антипереполнением).
| PSUBW
| Packed SUBtraction Words
Вычитание упакованных слов без насыщения (с циклическим антипереполнением).
| SUBD
| Packed SUBtraction Double words
Вычитание упакованных двойных слов без насыщения (с циклическим антипереполнением).
| PSUBSB
| Packed SUBtraction with signed Saturanion Bytes
Вычитание упакованных знаковых байт с насыщением.
| PSUBSW
| Packed SUBtraction with signed Saturanion Words
Вычитание упакованных знаковых слов с насыщением.
| PSUBUSB
| Packed SUBtraction with Unsigned Saturanion Bytes
Вычитание упакованных беззнаковых байт с насыщением.
| PSUBUSW
| Packed SUBtraction with Unsigned Saturanion Bytes
Вычитание упакованных беззнаковых слов с насыщением.
| Умножение. ММХ-команды умножения попарно перемножают 16-разрядные слова операндов, что дает четыре 32-разрядных произведения. Все команды формируют результат по принципу циклической арифметики:
Мнемоника
| Описание
| PMULHW
| Packed Multiplay and return High Words
Попарное умножение 4 знаковых слов источника (регистр MMX или память) на 4 знаковых слова приемника (регистр MMX).
Результатом операции являются 4 32-разрядных произведения, при этом старшие разряды произведений сохраняются в 16-разрядных словах приемника, а младшие разряды произведений теряются. Пример:
| PMULLW
| Packed Multiplay and return Low Words
Попарное умножение 4 знаковых слов источника (регистр MMX или память) на 4 знаковых слова приемника (регистр MMX).
Результатом операции являются 4 32-разрядных произведения, при этом младшие разряды произведений сохраняются в 16-разрядных словах приемника, а старшие разряды произведений теряются.
| PMADDWD
| Packed Multiplay and ADD Word to Double word
Попарное умножение 4 знаковых слов источника (регистр MMX или память) на 4 знаковых слова приемника (регистр MMX). Два двойных слова результатов умножения младших слов суммируются и записываются в младшее двойное слово операнда назначения. Два двойных слова результатов умножения старших слов суммируются и записываются в старшее двойное слово операнда назначения. Пример:
| Логика. Логические ММХ-команды выполняют поразрядные логические операции над всеми 64 битами своих операндов. Они реализуют логические операции И, ИЛИ, И-НЕ, исключающего ИЛИ:
Мнемоника
| Описание
| PAND
| Packed logical AND
Логическое "И".
| PANDN
| Packed logical AND and Not
Логическое "И-НЕ".
| POR
| Packed logical OR
Исключающее "ИЛИ".
| PXOR
| Packed logical eXclusive OR
Исключающее "ИЛИ".
| Сдвиги. ММХ-команды сдвига выполняют сдвиг каждого элемента данных (16-, 32- или 64-разрядного слова) в приемнике на величину, задаваемую источником. Среди команд сдвига выделяют команды арифметического и логического сдвига. При выполнении команд арифметического сдвига освобождающиеся разряды элементов заполняются знаком числа (старший бит) и могут принимать значение как 0, так и 1, в то время как при выполнении команд логического сдвига освободившиеся разряды заполняются нулями.
Мнемоника
| Описание
| PSLLW
| Packed Shift Left Logical Words
Логический сдвиг влево упакованных слов приемника на количество бит, указанных в источнике, с заполнением младших бит нулями.
| PSLLD
| Packed Shift Left Logical Double words
Логический сдвиг влево упакованных двойных слов приемника на количество бит, указанных в источнике, с заполнением младших бит нулями.
| PSLLQ
| Packed Shift Left Logical Quarter words
Логический сдвиг влево упакованного учетвернного слова приемника на количество бит, указанных в источнике, с заполнением младших бит нулями.
| PSRLW
| Packed Shift Right Logical Words
Логический сдвиг вправо упакованных слов приемника на количество бит, указанных в источнике, с заполнением старших бит нулями.
| PSRLD
| Packed Shift Right Logical Double words
Логический сдвиг вправо упакованных двойных слов приемника на количество бит, указанных в источнике, с заполнением старших бит нулями.
| PSRLQ
| Packed Shift Right Logical Quarter words
Логический сдвиг вправо упакованного учетверенного слова приемника на количество бит, указанных в источнике, с заполнением старших бит нулями.
| PSRAW
| Packed Shift Right Arithmetic Words
Арифметический сдвиг вправо упакованных знаковых слов приемника на количество бит, указанных в источнике, с заполнением освобождаюшихся бит битами знаковых разрядов.
| PSRAD
| Packed Shift Right Arithmetic Double words
Арифметический сдвиг вправо упакованных двойных знаковых слов премника на количество бит, указанных в источнике, с заполнением освобождаюшихся бит битами знаковых разрядов.
| Сравнения. ММХ-команды сравнения попарно сравнивают элементы данных (байты, 16- или 32-разрядные слова) входного и выходного операндов. В зависимости от результата сравнения соответствующий элемент данных выходного операнда заполняется нулями либо единицами. Эти команды, как и все остальные ММХ-команды, не устанавливают флагов (признаков). В свою очередь, они делятся на две группы: команды обычного сравнения (равно или не равно) и команды сравнения по величине (больше или меньше). Операции сравнения проводятся для упакованных байтов, слов и двойных слов.
Мнемоника
| Описание
| PCMPEQB
| Packed CoMParE for Equal Byte
Попарное сравнение (на равенство) упакованных байт. Все биты элемента результата будут единичными (true) при совпадении соответствующих элементов операндов и нулевыми (false) - при несовпадении.
| PCMPEQW
| Packed CoMParE for Equal Word
Попарное сравнение (на равенство) упакованных слов. Все биты элемента результата будут единичными (true) при совпадении соответствующих элементов операндов и нулевыми (false) - при несовпадении.
| PCMPEQD
| Packed CoMParE for Equal Double word
Попарное сравнение (на равенство) упакованных двойных слов. Все биты элемента результата будут единичными (true) при совпадении соответствующих элементов операндов и нулевыми (false) - при несовпадении.
| PCMPGTB
| Packed CoMParE for Greater Than Byte
Попарное сравнение (по величине) упакованных знаковых байт. Все биты элемента результата будут единичными (true), если соответствующий элемент приемника больше элемента источника, и нулевыми (false) в противном случае.
| PCMPGTW
| Packed CoMParE for Greater Than Word
Попарное сравнение (по величине) упакованных знаковых слов. Все биты элемента результата будут единичными (true), если соответствующий элемент приемника больше элемента источника, и нулевыми (false) в противном случае.
| PCMPGTD
| Packed CoMParE for Greater Than Double word
Попарное сравнение (по величине) упакованных знаковых двойных слов. Все биты элемента результата будут единичными (true), если соответствующий элемент приемника больше элемента источника, и нулевыми (false) в противном случае.
| Дополнительные команды. Сейчас мы рассмотрим еще одну группу команд, которые трудно отнести к какому-либо определенному типу, но которые являются весьма полезными при разработке программ.
Мнемоника
| Описание
| PAVGB
| Packed AveraGe Bytes
Попарно вычисляет средние значения упакованных чисел, представленных байтами. Значения операндов интерпретируются как беззнаковые целые числа. В качестве источника могут выступать ММХ-регистр или 64-разрядная ячейка памяти, приемником служит один из ММХ-регистров.
| PAVGW
| Packed AveraGe Words
Попарно вычисляет средние значение упакованных чисел, представленных словами. Значения операндов интерпретируются как беззнаковые целые числа. В качестве источника могут выступать ММХ-регистр или 64-разрядная ячейка памяти, приемником служит один из ММХ-регистров.
| PEXTRW
| Packed EXTRact Word
Извлекает одно из 4 упакованных слов входного операнда. Команда имеет три аргумента: источние, приемник и маска. Младшие два бита маски задают в источнике номер упакованного слова, подлежащего извлечению. Извлеченное слово сохраняется в младшем слове приемника. Приемником этой команды может выступать один из 32-разрядных регистров общего назначения. Старшее слово приемника обнуляется.
| PINSRW
| Packed INSeRt Word
Вставляет слово в одно из 4 упакованных слов приемника. Приемником является один из ММХ-регистров, а источником может выступать один из 32-разрядных регистров общего назначения, младшее слово которого будет вставлено в приемник. Номер позиции, куда помещается операнд, определяется младшими двумя битами маски и может принимать значения от 0 до 3;
| PMAXUB
| Packed MAXimum Unsigned integer Byte
Извлекает максимальное значение из каждой пары упакованных элементов в приемнике и источнике. Операция выполняется над беззнаковыми байтами. В качестве приемника может выступать ММХ-регистр, а в качестве источника — ММХ-регистр или 64-разрядная ячейка памяти.
| PMAXSW
| Packed MAXimum Signed integer Word
Извлекает максимальное значение из каждой пары упакованных элементов в приемнике и источнике. Операция выполняется над знековыми словами. В качестве приемника может выступать ММХ-регистр, а в качестве источника — ММХ-регистр или 64-разрядная ячейка памяти.
| PMINUB
| Packed MINimum Unsigned integer Byte
Извлекает минимальное значение из каждой пары упакованных элементов в приемнике и источнике. Операция выполняется над беззнаковыми байтами. В качестве приемника может выступать ММХ-регистр, а в качестве источника — ММХ-регистр или 64-разрядная ячейка памяти.
| PMINSW
| Packed MINmum Signed integer Word
Извлекает минимальное значение из каждой пары упакованных элементов в приемнике и источнике. Операция выполняется над знековыми словами. В качестве приемника может выступать ММХ-регистр, а в качестве источника — ММХ-регистр или 64-разрядная ячейка памяти.
| PMOVMSKB
| Packed MOVe MaSK Byte to integer
Формирует байтовую маску, содержащий знаковые биты 8 байтов, содержащихся в источнике, в качестве которого может выступать один из ММХ-регистров. Примником является 32-разрядный регистр общего назначения, младший байт которого будет содержать результат. Эта команда очень удобна для формирования условных ветвлений в программах.
| PSADBV
| Packed Sum of Absolute Differences
Вычисляет сумму абсолютных значений разностей значений беззнаковых байтов источника и приемника. Источником могут выступать ММХ-регистр или 64-разрядная ячейка памяти, а приемником — один из ММХ-регистров.
|
|