Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LK_MashZavYP_Akchurin_2011.pdf
Скачиваний:
241
Добавлен:
10.06.2015
Размер:
9 Мб
Скачать
☆

3.8.5. Целочисленное MMX расширение

Обработка данных MMX-расширения может выполняться с использованием:

циклической арифметики (wraparound arithmetic),

арифметики с насыщением (saturation arithmetic).

Большинство команд технологии ММХ обрабатывают данные по правилам циклической арифметики, а некоторые команды задействуют арифметику с насыщением. Если команда задействует циклическую арифметику (другое название

— арифметика с циклическим переносом) и результат операции выходит за двоичную разрядную сетку используемого типа данных, то «лишние» старшие биты результата отбрасываются.

Если команда использует арифметику с насыщением и результат операции превышает максимальное представимое значение, то в выходной операнд записывается это максимальное значение (происходит «насыщение»). Аналогично, если результат операции оказывается меньше нижней границы допустимого диапазона, то в выходной операнд записывается минимальное возможное значение.

В арифметике с насыщением ММХ-команды сложения, вычитания и упаковки данных могут обрабатывать числа со знаком или без знака. Данные со знаком и без знака имеют различный допустимый диапазон. Следовательно, если используется арифметика с насыщением, то при выходе результата операции за пределы допустимого диапазона в выходной операнд записываются различные значения, в зависимости от типа данных.

Синтаксис ММХ-команд. Большинство команд в мнемонике имеют суффикс, который определяет тип данных и используемую арифметику:

US (Unsigned Saturation) — арифметика с насыщением, данные без знака или, по-другому, беззнаковое насыщение. Если команда использует арифметику с насыщением и результат операции превышает максимальное представимое значение, то в выходной операнд записывается это максимальное значение (происходит «насыщение»). Аналогично, если результат операции оказался меньше нижней границы допустимого диапазона, то в выходной операнд записывается минимально возможное значение.

S или SS (Signed Saturation) — арифметика с насыщением для данных со знаком (или знаковое насыщение).

Если в суффиксе нет ни символа S ни символов SS, то применяется циклическая арифметика (wraparound). Если в этом случае результат операции

187

выходит за двоичную разрядную сетку используемого типа данных, то «лишние» старшие биты результата отбрасываются.

b, w, d, q — эти буквы в конце имени указывают тип данных. Если в суффиксе есть две из этих букв, то первая соответствует входному операнду, вторая — выходному.

Синтаксис MMX команд:

Мнемоника приемник, источник

Мнемоника приемник, источник, маска

Мнемоника приемник

После обзора команды будут рассмотрены подробно.

Категория

Подкатегория

Команды

Инициализация

 

EMMS

Передача данных

Пересылки

MOVD, MOVQ

Упаковка данных

 

PACKSSWB, PACKSSDW – числа со зна

 

 

PACKUSWB – числа без знака

Распаковка данных

 

PUNPCKHBW, PUNPCKHWD, PUNPCKH

 

 

PUNPCKLBW, PUNPCKLWD, PUNPCKL

Арифметика

Сложение

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

Инициализация.

188

 

 

 

Команда

 

Описание

 

 

 

 

 

Empty MMx State

EMMS

 

Очистка стека регистров MMX. Установка всех единиц в

 

 

слове тегов.

 

 

 

Передача данных. Данные передаются между:

регистрами MMX,

регистром MMX и регистром основного процессора,

регистром MMX и памятью.

Если размер приемника меньше размера источника, то лишние разряды обнуляются.

 

 

 

Команда

 

Описание

 

 

 

MOVD приемник, ис-

 

MOVe Double word – переместить двойное слово (32

точник

 

разряда).

 

 

 

MOVQ приемник, ис-

 

MOVe Quarter word – переместить учетверенное слово

точник

 

(64 разряда).

 

 

 

Упаковка данных. ММХ-команды упаковки преобразуют длинные элементы данных A6- и 32-разрядные слова) в более короткие. Если исходное значение «не помещается» в коротком элементе данных, то происходит «насыщение» — результатом считается граничное значение допустимого диапазона выходного типа данных.

 

 

 

Мнемо-

 

Описание

ника

 

 

 

 

 

PACKSS

 

PACK with Signed Saturation Words to Bytes

WB

 

Упаковка со знаковым насыщением слов приемника (регистра MMX)

 

 

источника (память или регистр MMX) в байты, расположенные в при-

 

 

емнике (регистре MMX). Пример:

 

 

 

 

 

 

189

 

 

 

 

 

Слова приемника MM0 упаковываются в байты младшей части при-

 

 

меника MM0.

 

 

Слова источника MM1 упаковываются в байты старшей части приме-

 

 

ника MM0.

 

 

 

PACKUS

 

PACK with Unigned Saturation Words to Bytes

WB

 

Упаковка с беззнаковым насыщением знаковых слов приемника (ре-

 

 

гистра MMX) источника (память или регистр MMX) в байты без знака,

 

 

расположенные в приемнике (регистре MMX).

 

 

Отрицательные числа преобразуются в нули.

 

 

 

PACKSS

 

PACK with Signed Saturation Double words to Words

DW

 

Упаковка со знаковым насыщением двойных слов приемника (реги-

 

 

стра MMX) и источника (память или регистр MMX) в слова, располо-

 

 

женные в приемнике (регистре MMX). Пример:

 

 

 

 

 

 

190

Двойные слова приемника MM1 упаковываются в байты младшей части применика MM1.

Двойные слова источника MM2 упаковываются в байты старшей части применика MM1.

Распаковка данных. MMX-команды распаковки попарно объединяют элементы данных из обоих операндов в более длинные элементы выходного операнда. Этими командами можно пользоваться для увеличения числа значащих разрядов при вычислениях.

 

 

 

Мнемо-

 

Описание

ника

 

 

 

 

 

PUNPCK

 

P UNPaCK High packed Byfes to Words

HBW

 

Распаковывает старшие части приемника и источника в приемник.

 

 

Происходит чередование в регистре назначения байт старшей поло-

 

 

вины источника с байтами старшей половины приемника.

 

 

 

191

PUNPCK

LBW

Байты старшей половины приемника MM0 распаковываются в нечетные байты приемника MM1.

Байты старшей половины источника MM1 распаковываются в четные байты приемника MM0.

P UNPaCK Low packed Byfes to Words

Распаковывает младшие части приемника и источника в приемник. Происходит чередование в регистре назначения байт младшей половины источника с байтами младшей половины приемника. Пример:

PUNPCK P UNPaCK High packed Words to Double words

192

HWD

PUNPCK

LWD

PUNPCK

HDQ

Распаковывает старшие части приемника и источника в приемник.

Происходит чередование в регистре назначения слов старшей половины источника со словами старшей половины приемника.

P UNPaCK Low packed Words to Double words

Распаковывает младшие части приемника и источника в приемник. Происходит чередование в регистре назначения слов младшей половины источника со словами младшей половины приемника. Пример:

P UNPaCK High packed Double words to Quad words.

Распаковывает старшие части приемника и источника в приемник. Происходит чередование в регистре назначения слов старшей половины источника со словами старшей половины приемника.

193

PUNPCK

LDQ

.

P UNPaCK Low packed Double words to Quad words.

Распаковывает младшие части приемника и источника в приемник. Происходит чередование в регистре назначения двойных слов младшей половины источника с двойными словами младшей половины приемника. Пример:

Cложение и вычитание. ММХ-команды сложения и вычитания работают с упакованными байтами и словами со знаком и без знака, а также с упакованными двойными словами со знаком. Они могут использовать как циклическую арифметику, так и арифметику с насыщением.

Входной операнд – регистр MMX или память.

194

Выходной операнд – регистр MMX.

Мнемоника Описание

PADDB

 

Packed ADDition Bytes

 

 

Сложение упакованных байт. без насыщения (с циклическим пере-

 

 

полнением)

 

 

 

PADDW

 

Packed ADDition Words

 

 

Сложение упакованных слов. без насыщения (с циклическим пере-

 

 

полнением).

PADDD

PADDSB

PADDSW

Packed ADDition Double words

Сложение упакованных двойных слов без насыщения (с циклическим переполнением).

Packed ADDition with sighed Saturation Bytes

Сложение упакованных байт со знаковым насыщением.

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

 

 

 

 

 

 

 

195

 

SUBD

PSUBSB

PSUBSW

Вычитание упакованных слов без насыщения (с циклическим анти-

переполнением).

Packed SUBtraction Double words

Вычитание упакованных двойных слов без насыщения (с циклическим антипереполнением).

Packed SUBtraction with signed Saturanion Bytes

Вычитание упакованных знаковых байт с насыщением.

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-разрядных

 

 

словах приемника, а младшие разряды произведений теряются.

 

 

Пример:

 

 

 

 

 

 

196

 

 

 

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

 

 

 

197

Исключающее "ИЛИ".

Сдвиги. ММХ-команды сдвига выполняют сдвиг каждого элемента данных (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

198

 

 

 

 

 

 

 

Арифметический сдвиг вправо упакованных знаковых слов прием-

 

 

ника на количество бит, указанных в источнике, с заполнением

 

 

освобождаюшихся бит битами знаковых разрядов.

 

 

 

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), если

 

 

соответствующий элемент приемника больше элемента источни-

 

 

 

 

 

 

199

 

 

 

 

 

ка, и нулевыми (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

PEXTRW

Packed AveraGe Words

Попарно вычисляет средние значение упакованных чисел, представленных словами. Значения операндов интерпретируются как беззнаковые целые числа. В качестве источника могут выступать ММХ-регистр или 64-разрядная ячейка памяти, приемником служит один из ММХ-регистров.

Packed EXTRact Word

Извлекает одно из 4 упакованных слов входного операнда. Команда имеет три аргумента: источние, приемник и маска. Младшие два бита маски задают в источнике номер упакованного слова, подлежащего извлечению. Извлеченное слово сохраняется в младшем слове приемника. Приемником этой команды может выступать один из 32-разрядных регистров общего назначения. Старшее слово приемника обнуляется.

200

 

 

 

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-разрядный ре-

 

 

гистр общего назначения, младший байт которого будет содержать

 

 

 

201

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]