Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11878
Последний выпуск: 19.06.2015

Команды MMX ( начиная с Pentium MMX, K6 )

Команды технологии MMX работают с 64-разрядными целочисленными данными, а также с данными, упакованными в группы (векторы) общей длиной 64 бита. Такие данные могут находиться в памяти или в восьми MMX-регистрах. Эти регистры называются MM0, MM1, :, MM7. Команды технологии MMX работают со следующими типами данных:

  • упакованные байты (восемь байтов в одном 64-разрядном регистре)
  • упакованные слова (четыре 16-разрядных слова в 64-разрядном регистре)
  • упакованные двойные слова (два 32-разрядных слова в 64-разрядном регистре)
  • 64-разрядные слова.

По-английски эти типы данных называются, соответственно, packed byte, packed word, packed doubleword и quadword.

MMX-команды имеют следующий синтаксис:

	instruction [dest, src] 

Здесь instruction - имя команды, dest обозначает выходной операнд, src - входной операнд.

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

  • US(unsigned saturation) - арифметика с насыщением, данные без знака.
  • S или SS(signed saturation) - арифметика с насыщением, данные со знаком. Если в суффиксе нет ни S, ни SS, используется циклическая арифметика (wraparound).
  • B, W, D, Q указывают тип данных. Если в суффиксе есть две из этих букв, первая соответствует входному операнду, а вторая - выходному.

MMX-команды исполняются в том же режиме процессора, что и команды с плавающей запятой. Поэтому при исполнении всех MMX-команд (кроме EMMS) "портится" слово состояния регистров с плавающей запятой. Доступны следующие MMX-команды (обозначения: mm - MMX-регистр; m32, m64 - память объема 32 и 64 бит соответственно; imm - непосредственный операнд; ir32 - целочисленный регистр):

EMMSкоманда обеспечивает переход процессора от исполнения MMX-команд к исполнению обычных команд с плавающей запятой: она устанавливает значение 1 во всех разрядах слова состояния.
PADDB mm, mm/m64; PADDW mm, mm/m64; PADDD mm, mm/m64команды складывают элементы данных (байты, слова или двойные слова) входного и выходного операнда. Если сумма выходит за границу допустимого диапазона, то по правилам циклической арифметики избыток отсчитывается от другой границы диапазона. "Переноса" единицы из одного элемента данных в другой не происходит.
PADDSB mm, mm/m64; PADDSW mm, mm/m64команды складывают элементы данных (байты или слова) входного и выходного операнда. Если сумма выходит за граничное значение допустимого диапазона, то результатом считается это граничное значение.
PADDUSB mm, mm/m64; PADDUSW mm, mm/m64команды складывают элементы данных (байты или слова) входного и выходного операнда. Если сумма выходит за граничное значение допустимого диапазона, то результатом считается это граничное значение.
PSUBB mm, mm/m64; PSUBW mm, mm/m64; PSUBD mm, mm/m64команды вычитают элементы данных (байты, слова или двойные слова) входного операнда из элементов данных выходного операнда. Если результат выходит за границу допустимого диапазона, то по правилам циклической арифметики соответствующее число единиц отсчитывается от другой границы диапазона. "Переноса" единицы из одного элемента данных в другой не происходит.
PSUBSB mm, mm/m64; PSUBSW mm, mm/m64команды вычитают элементы данных (байты или слова) входного операнда из элементов данных выходного операнда. Если разность выходит за граничное значение допустимого диапазона, то результатом считается это граничное значение.
PSUBUSB mm, mm/m64; PSUBUSW mm, mm/m64команды вычитают элементы данных входного операнда из элементов данных выходного операнда. Если разность выходит за граничное значение допустимого диапазона, то результатом считается это граничное значение.
PSLLW mm, mm/m64/imm; PSLLD mm, mm/m64/imm; PSLLQ mm, mm/m64/immкоманды выполняют сдвиг элементов данных (16-, 32- или 64-разрядных слов) в выходном операнде на число бит, задаваемое входным операндом. Освободившиеся младшие разряды заполняются нулями.
PSRAW mm, mm/m64/imm; PSRAD mm, mm/m64/immкоманды выполняют сдвиг элементов данных (16- или 32-разрядных слов) в выходном операнде на число бит, задаваемое входным операндом. Если сдвигается положительное число, то освободившиеся старшие разряды заполняются нулями, а если отрицательное, то единицами.
PSRLW mm, mm/m64/imm; PSRLD mm, mm/m64/imm; PSRLQ mm, mm/m64/immкоманды выполняют сдвиг элементов данных (16-, 32- или 64-разрядных слов) в выходном операнде на число бит, задаваемое входным операндом. Освободившиеся старшие разряды заполняются нулями.
PAND mm, mm/m64команда вычисляет поразрядное логическое И своих операндов.
PANDN mm, mm/m64команда вычисляет обращение (поразрядное НЕ) выходного операнда, а затем поразрядное логическое И между входным операндом и обращенным значением выходного.
POR mm, mm/m64команда вычисляет поразрядное логическое ИЛИ своих операндов.
PXOR mm, mm/m64команда вычисляет поразрядное логическое исключающее ИЛИ своих операндов.
PMADDWD mm, mm/m64команда попарно перемножает 16-разрядные слова со знаком входного и выходного операндов. Это дает четыре 32-разрядных произведения. Затем первое произведение складывается со вторым, а третье с четвертым. Суммы записываются в 32-разрядные слова выходного операнда. Если все слова на входе равны 8000h, результатом будет 80000000h (это единственный случай, когда перемножение отрицательных чисел дает отрицательный результат).
PMULHW mm, mm/m64команда попарно перемножает 16-разрядные слова со знаком входного и выходного операндов, что дает четыре 32-разрядных произведения. Старшие разряды произведений записываются в 16-разрядные слова выходного операнда. Младшие разряды произведений теряются.
PMULLW mm, mm/m64команда попарно перемножает 16-разрядные слова со знаком входного и выходного операндов, что дает четыре 32-разрядных произведения. Младшие разряды произведений записываются в 16-разрядные слова выходного операнда. Старшие разряды произведений теряются.
PCMPEQB mm, mm/m64; PCMPEQW mm, mm/m64; PCMPEQD mm, mm/m64команды попарно сравнивают элементы данных (байты, 16- или 32-разрядные слова) входного и выходного операндов. Если элемент данных выходного операнда равен соответствующему элементу входного, такой элемент выходного операнда заполняется единицами. Если равенства нет, он заполняется нулями.
PCMPGTB mm, mm/m64; PCMPGTW mm, mm/m64; PCMPGTD mm, mm/m64команды попарно сравнивают элементы данных (байты, 16- или 32-разрядные слова со знаком) входного и выходного операндов. Если элемент данных выходного операнда больше соответствующего элемента входного, такой элемент выходного операнда заполняется единицами; если же он не больше входного, то он заполняется нулями.
PACKSSWB mm, mm/m64; PACKSSDW mm, mm/m64команды преобразуют длинные элементы данных (16- и 32-разрядные слова со знаком) в более короткие (байты или 16-разрядные слова со знаком). Если исходное значение было за пределами допустимого диапазона для выходного типа данных, то результатом упаковки считается ближайшее граничное значение диапазона.
PACKUSWB mm, mm/m64команда преобразует 16-разрядные слова со знаком из обоих операндов в байты без знака и записывает их в выходной операнд. Если исходное слово со знаком было больше FFh, результатом преобразования считается FFh. Если исходное слово со знаком отрицательно, результатом преобразования считается 00h.
PUNPCKHBW mm, mm/m64; PUNPCKHWD mm, mm/m64; PUNPCKHDQ mm, mm/m64команды попарно объединяют исходные элементы данных (байты, 16- или 32-разрядные слова), находившиеся в старших 32 разрядах обоих операндов. Полученные в результате более длинные элементы данных записываются в выходной операнд. Исходные значения младших разрядов операндов на результат не влияют.
PUNPCKLBW mm, mm/m64; PUNPCKLWD mm, mm/m64; PUNPCKLDQ mm, mm/m64команды попарно объединяют исходные элементы данных (байты, 16- или 32-разрядные слова), находившиеся в младших 32 разрядах обоих операндов. Полученные в результате более длинные элементы данных записываются в выходной операнд. Исходные значения старших разрядов операндов на результат не влияют.
MOVD mm, mm/m32/ir32команда копирует 32 бита из младших разрядов MMX-регистра, либо из памяти, либо из целочисленного регистра в младшие 32 разряда MMX-регистра (старшие разряды заполняются нулями).
MOVD m32/ir32, mmкоманда копирует 32 бита из младших разрядов MMX-регистра в память либо в целочисленный регистр.
MOVQ mm, mm/m64команда пересылки данных в MMX-регистр.
MOVQ mm/m64, mmкоманда пересылки данных из MMX-регистра.

Назад | Дальше

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
Аноним
+2 / -0
Мне нравитсяМне не нравится
12 октября 2004, 19:05:00
Оказывается все так просто. Спасибо.
2.
Аноним
+4 / -0
Мне нравитсяМне не нравится
14 июля 2004, 14:30:58
Спасибо, очень помогли.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог