Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Программирование -> Assembler -> Оптимизация программ на ассемблере.


Команды 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-регистра.

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


 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.