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

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

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

команды упаковки и распаковки - student2.ru

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

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

команды упаковки и распаковки - student2.ru

Рис. 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-разрядная ячейка памяти.

команды упаковки и распаковки - student2.ru

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

.data ;сегмент данных mem dw 0 df 01020304ffffhmem1 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-разрядной ячейкой памяти.

команды упаковки и распаковки - student2.ru

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

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

команды упаковки и распаковки - student2.ru

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

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

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

команды упаковки и распаковки - student2.ru

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

.data ;сегмент данных mem dw 0304h df 0ffffeeee0102hmem1 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-разрядной ячейкой памяти.

команды упаковки и распаковки - student2.ru

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

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

команды упаковки и распаковки - student2.ru

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

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

Задача
Сумма векторов команды упаковки и распаковки - student2.ru
Произведение векторов команды упаковки и распаковки - student2.ru
Разность и сумма векторов команды упаковки и распаковки - student2.ru
Умножение вектора на число команды упаковки и распаковки - student2.ru

здесь

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

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

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

Порядок выполнения работы

  1. Изучить процедуры вычислений выражений над массивами вариантов 1-4 с помощью команд MMX, описанных в процедурах MMX_1 – MMX_4 соответственно.
  2. Разработать программу для решения задачи в соответствии с вариантом задания без использования команд MMX.
  3. Используя команду RDTSC определить время исполнения вычислительного процесса с применением команд ММX и без. Найти среднее время для 1000 повторений кода программы.
  4. Исследовать зависимость времени каждого варианта от размерности массивов. Результаты вывести в виде таблицы и графика.

Наши рекомендации