Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЗ-2-MMX_.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
295.94 Кб
Скачать

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

Команды этих групп предназначены для изменения размерности элементов операндов с учетом их значений. Команды упаковки позволяют уменьшить размерность элементов в два раза. При этом если значение сжимаемого элемента больше максимального допустимого значения, которое может содержаться в элементе меньшего размера, то результат формируется по принципу знакового насыщения.

packssdw приемник, источник — команда упаковки со знаковым насыщением двух двойных слов в приемники двух двойных слов в источники четыре слова в приемник. Схема выполнения команды показана на рис. 2.6. Результат помещается в приемник, который является одним из ММХ-регистров. Источник — либо ММХ-регистр, либо 64-разрядная ячейка памяти.

Рис. 2.6. Схема работы команды packssdw

packsswb приемник, источник — команда упаковки со знаковым насыщением четырех слов в приемники четырех слов в ИСТОЧНИК В четыре слова в приемник. Схема выполнения команды показана на рис. 2.7. Результат помещается в приемник, который является одним из ММХ-регистров. Источник— либо ММХ-регистр, либо 64-разрядная ячейка памяти.

Рис. 2.7. Схема работы команды packsswb

.data ;сегмент данных

mem dw 0fe00h

df 00457ffe00f0h

.code

... ... ...

packsswb rmmx0, mem ;rmmx0=45 7f 7f 80 00 00 00 00

... ... ...

Пример показывает, как выполняется принцип знакового насыщения результата до значений 7fh и 80hбайт. Подобная ситуация возникает каждый раз, когда значение в исходном слове превышает максимально возможное значение.

Следующая группа ММХ-команд позволяет выполнить обратную операцию — расширить размер элементов операнда в два раза. При этом недостающая половина вновь формируемого элемента извлекается из второго операнда.

punpckhbw приемник, источник— команда распаковки байтов из старшей половины приемник в слова с использованием в качестве старшей половины этих слов байтов из источник. Формирование результата происходит путем поочередной выборки байтов из приемник и источник (рис. 2.8). Результат помещается в приемник, который является одним из ММХ-регистров. Источник— либо ММХ-регистр, либо 64-разрядная ячейка памяти.

Рис. 2.8. Схема работы команды punpckhbw

.data ;сегмент данных

mem dw 0

df 01020304ffffh

mem1 dw 0

df 0f0f0f0feeeeh

.code movq rmmx0, mem ;rmmx0=01 02 03 04 ff ff 00 00

;mem1 =0f 0f 0f 0f ее ее 00 00

punpckhbw rmmx0, mem1 ;rmmx0=0f01 0f02 0f03 0f04

punpckhwd приемник, источник— команда распаковки слов из старшей половины приемник в двойные слова с использованием в качестве старшей половины этих двойных слов из источник. Формирование результата происходит путем поочередной выборки слов из приемник и источник (рис. 2.9). Результат формируется в приемник, который является одним из ММХ-регистров, в то же время источник может быть либо ММХ-регистром, либо 64-разрядной ячейкой памяти.

Рис. 2.9. Схема работы команды punpckhwd

punpckhdq приемник, источник— команда распаковки двойных слов из старшей половины приемник в учетверенные слова с использованием в качестве старшей половины этих учетверенных слов двойных слов из источник. Формирование результата происходит путем поочередной выборки двойных слов из приемник и источник (рис. 2.10). Результат помещается в приемник, который является одним из ММХ-регистров. Источник— либо ММХ-регистр, либо 64-разрядная ячейка памяти.

Рис. 2.10. Схема работы команды punpckhdq

Вы, наверное, обратили внимание, что предыдущие три команды работают со старшими половинами операндов. Следующие три команды, наоборот, работают с младшими половинами операндов.

punpcklbw приемник, источник — команда распаковки байтов из младшей половины приемник в слова с использованием в качестве младшей половины этих слов байтов из источник. Формирование результата осуществляется путем поочередной выборки байт из приемник и источник (рис. 2.11). Результат помещается в приемник, который является одним из ММХ-регистров. Источник — ММХ-регистр, либо 64-разрядная ячейка памяти.

Рис. 2.11. Схема работы команды punpcklbw

.data ;сегмент данных

mem dw 0304h

df 0ffffeeee0102h

mem1 dw 0f0fh

df 0c0c0c0c0f0fh

.code

... ... ...

movq rmmx0, mem ;rmmx0=ff ff ее ее 01 02 03 04

;mem1 =0c 0с 0с 0c 0f 0f 0f 0f

punpcklbw rmmx0, mem1 ;rmmx0=0f01 0f02 0f03 0f04

... ... ...

punpcklwd приемник, источник— команда распаковки слов из младшей половины приемник в двойные слова с использованием в качестве младшей половины этих двойных слов слов из источник. Формирование результата осуществляется путем поочередной выборки слов из приемники источник(рис. 2.12). Результат помещается в приемник, который является одним из ММХ-регистров, в то же время источник может быть либо ММХ-регистром, либо 64-разрядной ячейкой памяти.

Рис. 2.12. Схема работы команды punpcklwd

punpckldq приемник, источник— команда распаковки двойных слов из младшей половины приемник в учетверенные слова с использованием в качестве младшей половины этих учетверенных слов двойных слов из источник. Формирование результата осуществляется путем поочередной выборки двойных слов из приемника источник(рис. 2.13). Результат помещается в приемник, который является одним из ММХ-регистров. Источник— либо ММХ-регистр, либо 64-разрядная ячейка памяти.

Рис. 2.13. Схема работы команды punpckldq

Варианты заданий

Задача

1

Сумма векторов

2

Произведение векторов

3

Разность и сумма векторов

4

Умножение вектора на число

здесь

a,b,c,d - массивы байт;

е – массив cлов;

x- число, размером в байт.

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