MMX(TM) Technology Intro. Map

 Чтобы начать работу, нажмите кнопку "Новая тема" справа вверху.
А можно сразу заняться любой интересующей Вас темой. Для этого щелчком мыши выберите тему в окне справа.

Занятия
Введение

MMX-команды

Применение MMX-команд

MMX-программа и ОС

Этот учебный курс составили...

© 1996, 1997 Intel Corporation


Introduction to MMX(TM) Technology. Lesson 2: Introduction

Введение

Темы
  • Цели
  • Что надо знать для изучения технологии MMX
  • Для чего нужна технология MMX
  • Особенности технологии MMX
  • Одна команда — много данных
  • Типы данных
  • Синтаксис команд
  • Pезультат вне допустимого диапазона
  • Данные со знаком и без знака

Команды технологии MMX

Темы
  • Классификация команд
  • Команда EMMS
  • Команды сложения и вычитания
  • Команды сдвига
  • Логические команды
  • Команды умножения
  • Команды сравнения
  • Команды упаковки и распаковки
  • Команды передачи данных

Применение MMX-команд

Темы
  • Примеры программирования
  • Скалярное произведение векторов
  • Условный выбор фрагмента изображения
  • Распаковка с "размножением" знакового бита
  • Абсолютные величины разностей

ОС и программа с MMX-командами

Темы
  • Совместимость и архитектура
  • MMX-регистры
  • Исключения, генерируемые MMX-командами
  • Переключение задач

Developed by:
Maggie Auerbach
Adina Hagege
Esti Lederer
Content Experts:
Haim Barad
Benni Eitan
Koby Gottlieb
Mike Hawash
Naty Hoffman
Oded Lempel
Alex Peleg
Russian translation, HTML version:
Alexei Kourbatov


MMX(TM) Technology Intro. Contents

Введение в технологию MMX™
План обучения Закончить работу? Да / Нет


Topic 1

Введение в технологию MMX™

Этот учебный курс знакомит Вас с технологией MMX™ — расширением архитектуры процессоров Intel, предназначенным для повышения быстродействия и качества работы мультимедиа-программ. С помощью нашего курса Вы
  • поймете, каким образом технология MMX увеличивает производительность программы;
  • узнаете о новых типах данных, регистрах и командах технологии MMX;
  • освоите синтаксис MMX-команд;
  • сможете составлять реальные программы с MMX-командами.


Topic 1

Начинаем работу
Тема 1. Цели


Topic 2

 Для изучения технологии MMX надо иметь представление об архитектуре прошлых поколений процессоров Intel. Желательно также знакомство с языком ассемблера.

Дополнительную информацию Вы можете получить из следующих источников:

  • Intel Architecture MMX Technology. Programmer's Reference Manual (Технология MMX в архитектуре Intel. Руководство программиста).
  • Optimizing Applications for Pentium® Processor Tutorial (обучающая программа "Оптимизация программ для процессора Pentium").
  • Pentium® Processor User's Manual. Volume 3: Architecture and Programming Manual (Процессор Pentium. Руководство пользователя. Том 3: Руководство по архитектуре и программированию).


Topic .

Prerequisites: Intel Architecture, assembly language


Topic 2

Начинаем работу
Тема 2. Что надо знать для изучения технологии MMX™


Topic .

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


Topic 3

Технология MMX полностью совместима с предыдущими процессорами архитектуры Intel. Все ранее существовавшие программы будут работать без изменений и на процессорах с технологией MMX.


Topic 3

Введение
Тема 3. Для чего нужна технология MMX™


Topic 4

 В основе технологии MMX лежит расширение набора команд процессора с учетом потребностей современных мультимедиа-программ.

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

Следующие темы дадут Вам начальные сведения о командах и типах данных технологии MMX.


Topic 4

Data types, registers, instructions


Topic 4

Введение
Тема 4. Особенности технологии MMX™


Topic 5

 В технологии MMX использована модель обработки данных SIMD (single instruction, multiple data, т.е. одна команда - много данных). Это повышает производительность программ, поскольку одна команда обрабатывает несколько элементов данных одновременно. MMX-команды обеспечивают параллельную обработку нескольких байтов, слов или двойных слов.

Справа Вы видите пример, моделирующий работу двух графических программ. Обе программы выводят на экран одну и ту же последовательность кадров. Первая программа написана без MMX-команд; она обрабатывает лишь одну точку цветного изображения (8 бит) за одну команду. Во второй программе применена технология MMX; ее команды способны обрабатывать 8 точек (64 бит) одновременно!


Topic 5

Увеличенный фрагмент изображения:
Scalar code
Так работает
"скалярная" программа... 		MMX technology code
...а вот так -
программа с MMX-командами


Topic 5

Введение
Тема 5. Одна команда - много данных


Topic 6

 Команды технологии MMX работают со следующими типами данных:
  • упакованные байты (восемь байтов в одном 64-разрядном регистре)
  • упакованные слова (четыре 16-разрядных слова в 64-разрядном регисте)
  • упакованные двойные слова (два 32-разрядных слова в 64-разрядном регистре)
  • 64-разрядные слова.
По-английски эти типы данных называются, соответственно, packed byte, packed word, packed doubleword и quadword.


Topic 6

Data types


Topic 6

Введение
Тема 6. Типы данных


Topic 7

 MMX-команды имеют следующий синтаксис:
instruction [dest,src]
Здесь instruction - имя команды,
dest обозначает выходной операнд, src - входной операнд.
Большинство команд имеют суффикс, который определяет тип данных и используемую арифметику:
  • US (unsigned saturation) - арифметика с насыщением, данные без знака.
  • S или SS (signed saturation) - арифметика с насыщением, данные со знаком. Если в суффиксе нет ни S, ни SS, используется циклическая арифметика (wraparound).
  • B, W, D, Q указывают тип данных. Если в суффиксе есть две из этих букв, первая соответствует входному операнду, а вторая - выходному.
Например, MMX-команда paddusw MM4,mem1 выполняет сложение слов без знака. Первые слагаемые находятся в MMX-регистре MM4, вторые - в памяти по адресу mem1. Суммы записываются в регистр MM4. Игра в правой части экрана поможет Вам проверить, освоили ли Вы синтаксис MMX-команд.


Topic 7

Проверьте себя!

Отметьте мышкой арифметику и тип(ы) данных команды, которую Вы видите в верхнем окошке, и нажмите кнопку Ответ.
Команда:
Арифметика | Тип данных
wraparound | byte
signed saturation | word
unsigned saturation | doubleword
 | quadword


Topic 7

Введение
Тема 7. Синтаксис команд


Topic 8

 Большинство команд технологии MMX обрабатывают данные в циклической арифметике, а некоторые команды используют арифметику с насыщением.
Циклическая арифметика. Eсли результат операции выходит за пределы допустимого диапазона, то "лишние" старшие биты результата отбрасываются. Например, сложение байтов 01h и FFh дает 00h.
Арифметика с насыщением. Если результат оказался вне допустимого диапазона, то он считается равным граничному значению диапазона. Например, при сложении байтов без знака сумма 01h и FFh считается равной FFh.

Предлагаем Вам поупражняться в арифметике MMX-команд, нажимая на кнопки Сложение и Вычитание в правой части экрана.


Topic 8

Арифметика MMX-команд

Тип данных:
байт без знака (0..255)
байт со знаком (-128..127)
Арифметика:
Циклическая
С насыщением

В циклической арифметике
В арифметике с насыщением


Topic 8

Введение
Тема 8. Результат вне допустимого диапазона


Topic .

 В арифметике с насыщением MMX-команды сложения, вычитания и упаковки данных могут обрабатывать числа со знаком или без знака.

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

Более конкретный пример показан на рисунке: при сложении слов со знаком 7F38h (32568) и 1707h (5895) слово-результат считается равным 7FFFh (32767). Математическая сумма оказалась больше предела 7FFFh, и произошло "насыщение". Если те же самые два значения сложить как слова без знака, то получится 963Fh (38463). В данном случае "насыщения" не происходит, так как результат меньше максимально возможного FFFFh.


Topic 9

Signed vs. unsigned
Вы хорошо усвоили эту тему?
Проверьте себя!


Тема 9

Введение
Тема 9. Данные со знаком и без знака


Topic 10

 MMX-команды делятся на следующие группы:
  • Команда EMMS
  • Команды сложения и вычитания
  • Команды сдвига
  • Логические команды
  • Команды умножения
  • Команды сравнения
  • Команды упаковки и распаковки
  • Команды предачи данных
Теперь настало время познакомиться с каждой группой команд более подробно.


Topic 10

Команды технологии MMX
Тема 10. Классификация команд


Topic 11

 MMX-команды исполняются в том же режиме процессора, что и команды с плавающей запятой. Поэтому при исполнении всех MMX-команд (кроме EMMS) "портится" слово состояния регистров с плавающей запятой. Команда EMMS обеспечивает переход процессора от исполнения MMX-команд к исполнению обычных команд с плавающей запятой: она устанавливает значение 1 во всех разрядах слова состояния. Заканчивайте командой EMMS любой фрагмент программы, в котором есть MMX-команды. Если этого не делать, то
  • операции с плавающей запятой будут давать неверные результаты;
  • иногда в результате операций с плавающей запятой будут генерироваться исключения типа Stack overflow.
Справа вверху Вы видите фрагмент программы, в котором непосредственно за командой movq следует вызов процедуры, использующей операции с плавающей запятой. В результате возникает исключение Stack overflow. Внизу показан тот же фрагмент программы, в который вставлена команда EMMS. Здесь переполнения стека не возникает.


Topic 11

Команды технологии MMX
Тема 11. Команда EMMS


Topic 12

    Команды сложения и вычитания
    Команда | b | w | d | q
padd |  |  |  |
padds |  |  |  |
paddus |  |  |  |
psub |  |  |  |
psubs |  |  |  |
psubus |  |  |  |
- поддерживаемый тип данных.


Topic 12

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

Для получения информации о конкретной команде щелкните мышкой на названии команды:
  • padd
  • padds
  • paddus
  • psub
  • psubs
  • psubus

Команды padd (циклическая арифметика)
Команды padd складывают элементы данных (байты, слова или двойные слова) входного и выходного операнда. Если сумма выходит за границу допустимого диапазона, то по правилам циклической арифметики избыток отсчитывается от другой границы диапазона. "Переноса" единицы из одного элемента данных в другой не происходит.
Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.
Поддерживаются команды:
paddb, paddw, paddd.

back Возврат к началу темы

Команды padds (арифметика с насыщением, данные со знаком)
Команды padds складывают элементы данных (байты или слова) входного и выходного операнда. Если сумма выходит за граничное значение допустимого диапазона, то результатом считается это граничное значение.
Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.
Поддерживаются команды:
paddsb, paddsw.

back Возврат к началу темы

Команды paddus (арифметика с насыщением, данные без знака)
Команды paddus складывают элементы данных (байты или слова) входного и выходного операнда. Если сумма выходит за граничное значение допустимого диапазона, то результатом считается это граничное значение.
Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.
Поддерживаются команды:
paddusb, paddusw.

back Возврат к началу темы

Команды psub (циклическая арифметика)
Команды psub вычитают элементы данных (байты, слова или двойные слова) входного операнда из элементов данных выходного операнда. Если результат выходит за границу допустимого диапазона, то по правилам циклической арифметики соответствующее число единиц отсчитывается от другой границы диапазона. "Переноса" единицы из одного элемента данных в другой не происходит.
Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.
Поддерживаются команды:
psubb, psubw, psubd.

back Возврат к началу темы

Команды psubs (арифметика с насыщением, данные со знаком)
Команды psubs вычитают элементы данных (байты или слова) входного операнда из элементов данных выходного операнда. Если разность выходит за граничное значение допустимого диапазона, то результатом считается это граничное значение.
Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.
Поддерживаются команды:
psubsb, psubsw.

back Возврат к началу темы

Команды psubus (арифметика с насыщением, данные без знака)
Команды psubus вычитают элементы данных входного операнда из элементов данных выходного операнда. Если разность выходит за граничное значение допустимого диапазона, то результатом считается это граничное значение.
Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.
Поддерживаются команды:
psubusb, psubusw.


Topic 12

 Welcome to Introduction to MMX(TM) Technology Tutorial! To start learning, please open the page MMXSTART.HTM in the same directory using frame-enabled browser.


Topic 12

Команды технологии MMX
Тема 12. Команды сложения и вычитания


Topic 13

    Команды сдвига
    Команда | b | w | d | q
psll |  |  |  |
psra |  |  |  |
psrl |  |  |  |
- поддерживаемый тип данных.


Topic 13

 MMX-команды сдвига выполняют сдвиг каждого элемента данных (16-, 32- или 64-разрядного слова) в выходном операнде на величину, задаваемую входным операндом.

Для получения информации о конкретной команде щелкните мышкой на названии команды:

  • psll
  • psra
  • psrl

Команды psll (логический сдвиг налево)
Команды psll выполняют сдвиг элементов данных (16-, 32- или 64-разрядных слов) в выходном операнде на число бит, задаваемое входным операндом. Освободившиеся младшие разряды заполняются нулями.
Входной операнд может быть непосредственным операндом либо находиться в MMX-регистре или в памяти.
Выходной операнд должен находиться в MMX-регистре.
Поддерживаются команды:
psllw, pslld, psllq.

back Возврат к началу темы

Команды psra (арифметический сдвиг направо)
Команды psra выполняют сдвиг элементов данных (16- или 32-разрядных слов) в выходном операнде на число бит, задаваемое входным операндом. Если сдвигается положительное число, то освободившиеся старшие разряды заполняются нулями, а если отрицательное, то единицами.
Входной операнд может быть непосредственным операндом либо находиться в MMX-регистре или в памяти.
Выходной операнд должен находиться в MMX-регистре.
Поддерживаются команды:
psraw, psrad.

back Возврат к началу темы

Команды psrl (логический сдвиг направо)
Команды psrl выполняют сдвиг элементов данных (16-, 32- или 64-разрядных слов) в выходном операнде на число бит, задаваемое входным операндом. Освободившиеся старшие разряды заполняются нулями.
Входной операнд может быть непосредственным операндом либо находиться в MMX-регистре или в памяти.
Выходной операнд должен находиться в MMX-регистре.
Поддерживаются команды:
psrlw, psrld, psrlq.


Topic 13

 Welcome to Introduction to MMX(TM) Technology Tutorial! To start learning, please open the page MMXSTART.HTM in the same directory using frame-enabled browser.


Topic 13

Команды технологии MMX
Тема 13. Команды сдвига


Topic 14

    Логические команды
    Команда | 64 бита
pand |
pandn |
por |
pxor |
- поддерживаемый тип данных.


Topic 14

 Логические MMX-команды выполняют поразрядные логические операции над всеми 64 битами своих операндов.

Для получения информации о конкретной команде щелкните мышкой на названии команды:

  • pand
  • pandn
  • por
  • pxor

Команда pand (логическoe И)
Команда pand вычисляет поразрядное логическое И своих операндов.
Входной операнд может находиться в MMX-регистре или в памяти.
Выходной операнд должен находиться в MMX-регистре.

back Возврат к началу темы

Команда pandn (логическoe НЕ-И)
Команда pandn вычисляет обращение (поразрядное НЕ) выходного операнда, а затем поразрядное логическое И между входным операндом и обращенным значением выходного.
Входной операнд может находиться в MMX-регистре или в памяти.
Выходной операнд должен находиться в MMX-регистре.

back Возврат к началу темы

Команда por (логическoe ИЛИ)
Команда por вычисляет поразрядное логическое ИЛИ своих операндов.
Входной операнд может находиться в MMX-регистре или в памяти.
Выходной операнд должен находиться в MMX-регистре.

back Возврат к началу темы

Команда pxor (исключающее ИЛИ)
Команда pxor вычисляет поразрядное логическое исключающее ИЛИ своих операндов.
Входной операнд может находиться в MMX-регистре или в памяти.
Выходной операнд должен находиться в MMX-регистре.


Topic 14

 Welcome to Introduction to MMX(TM) Technology Tutorial! To start learning, please open the page MMXSTART.HTM in the same directory using frame-enabled browser.


Topic 14

Команды технологии MMX
Тема 14. Логические команды


Topic 15

    Команды умножения
    Команда | b | w | d | q
pmadd |  |  |  |
pmulh |  |  |  |
pmull |  |  |  |
- поддерживаемый тип данных.
Стрелка показывает от входного типа данных к выходному.


Topic 15

 MMX-команды умножения попарно перемножают 16-разрядные слова операндов, что дает четыре 32-разрядных произведения.
Команда pmaddwd складывает первое произведение со вторым, а третье с четвертым. Суммы записываются в 32-разрядные слова выходного операнда.
Команда pmulhw записывает в 16-разрядные слова выходного операнда старшие разряды каждого из четырех произведений, а pmullw - младшие разряды произведений.
Для получения информации о конкретной команде щелкните мышкой на названии команды:
  • pmaddwd
  • pmulhw
  • pmullw

Команда pmaddwd (циклическая арифметика)
Команда pmaddwd попарно перемножает 16-разрядные слова со знаком входного и выходного операндов. Это дает четыре 32-разрядных произведения. Затем первое произведение складывается со вторым, а третье с четвертым. Суммы записываются в 32-разрядные слова выходного операнда. Если все слова на входе равны 8000h, результатом будет 80000000h (это единственный случай, когда перемножение отрицательных чисел дает отрицательный результат).
Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.
back Возврат к началу темы

Команда pmulhw (циклическая арифметика)
Команда pmulhw попарно перемножает 16-разрядные слова со знаком входного и выходного операндов, что дает четыре 32-разрядных произведения. Старшие разряды произведений записываются в 16-разрядные слова выходного операнда. Младшие разряды произведений теряются.
Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.

back Возврат к началу темы

Команда pmullw (циклическая арифметика)
Команда pmullw попарно перемножает 16-разрядные слова со знаком входного и выходного операндов, что дает четыре 32-разрядных произведения. Младшие разряды произведений записываются в 16-разрядные слова выходного операнда. Старшие разряды произведений теряются.
Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.


Topic 15

 Welcome to Introduction to MMX(TM) Technology Tutorial! To start learning, please open the page MMXSTART.HTM in the same directory using frame-enabled browser.


Topic 15

Команды технологии MMX
Тема 15. Команды умножения


Topic 16

    Команды сравнения

    Команда | b | w | d | q
pcmpeq |  |  |  |
pcmpgt |  |  |  |
- поддерживаемый тип данных.


Topic 16

 MMX-команды сравнения попарно сравнивают элементы данных (байты, 16- или 32-разрядные слова) входного и выходного операндов. В зависимости от результата сравнения соответствующий элемент данных выходного операнда заполняется нулями либо единицами.
Эти команды, как и все остальные MMX-команды, не устанавливают флагов (признаков).

Для получения информации о конкретной команде щелкните мышкой на названии команды:

  • pcmpeq
  • pcmpgt

Команды pcmpeq
Команды pcmpeq попарно сравнивают элементы данных (байты, 16- или 32-разрядные слова) входного и выходного операндов. Если элемент данных выходного операнда равен соответствующему элементу входного, такой элемент выходного операнда заполняется единицами. Если равенства нет, он заполняется нулями.
Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.
Поддерживаются команды:
pcmpeqb, pcmpeqw, pcmpeqd.

back Возврат к началу темы

Команды pcmpgt
Команды pcmpgt попарно сравнивают элементы данных (байты, 16- или 32-разрядные слова со знаком) входного и выходного операндов. Если элемент данных выходного операнда больше соответствующего элемента входного, такой элемент выходного операнда заполняется единицами; eсли же он не больше входного, то он заполняется нулями.
Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.
Поддерживаются команды:
pcmpgtb, pcmpgtw, pcmpgtd.


Topic 16

 Welcome to Introduction to MMX(TM) Technology Tutorial! To start learning, please open the page MMXSTART.HTM in the same directory using frame-enabled browser.


Topic 16

Команды технологии MMX
Тема 16. Команды сравнения


Topic 17

    Команды упаковки и распаковки
    Команда | b | w | d | q
packss |  |  |  |
packus |  |  |  |
punpckh |
punpckl |
Стрелка показывает от входного типа данных к выходному.


Topic 17

 MMX-команды упаковки преобразуют длинные элементы данных (16- и 32-разрядные слова) в более короткие. Если исходное значение "не помещается" в коротком элементе данных, то происходит "насыщение" - результатом считается граничное значение допустимого диапазона выходного типа данных.
Команды распаковки попарно объединяют элементы данных из обоих операндов в более длинные элементы выходного операнда. Этими командами можно пользоваться для повышения числа значащих разрядов при вычислениях.
Для получения информации о конкретной команде щелкните мышкой на названии команды:
  • packss
  • packus
  • punpckh
  • punpckl

Команды packss
Команды packss преобразуют длинные элементы данных (16- и 32-разрядные слова со знаком) в более короткие (байты или 16-разрядные слова со знаком). Если исходное значение было за пределами допустимого диапазона для выходного типа данных, то результатом упаковки считается ближайшее граничное значение диапазона.
Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.
Поддерживаются команды:
packsswb, packssdw.

back Возврат к началу темы

Команда packuswb
Команда packuswb преобразует 16-разрядные слова со знаком из обоих операндов в байты без знака и записывает их в выходной операнд.

Если исходное слово со знаком было больше FFh, результатом преобразования считается FFh. Если исходное слово со знаком отрицательно, результатом преобразования считается 00h.

Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.

back Возврат к началу темы

Команды punpckh
Команды punpckh попарно объединяют исходные элементы данных (байты, 16- или 32-разрядные слова), находившиеся в старших 32 разрядах обоих операндов. Полученные в результате более длинные элементы данных записываются в выходной операнд. Исходные значения младших разрядов операндов на результат не влияют.

Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.
Поддерживаются команды:
punpckhbw, punpckhwd, punpckhdq.

back Возврат к началу темы

Команды punpckl
Команды punpckl попарно объединяют исходные элементы данных (байты, 16- или 32-разрядные слова), находившиеся в младших 32 разрядах обоих операндов. Полученные в результате более длинные элементы данных записываются в выходной операнд. Исходные значения старших разрядов операндов на результат не влияют.

Входной операнд может находиться в MMX-регистре или в памяти;
выходной операнд должен находиться в MMX-регистре.
Поддерживаются команды:
punpcklbw, punpcklwd, punpckldq.


Topic 17

 Welcome to Introduction to MMX(TM) Technology Tutorial! To start learning, please open the page MMXSTART.HTM in the same directory using frame-enabled browser.


Topic 17

Команды технологии MMX
Тема 17. Команды упаковки и распаковки


Topic 18

    Команды предачи данных
    Команда | 32 бита | 64 бита
movd |  |
movq |  |
- поддерживаемый тип данных.


Topic 18

 MMX-команды передачи данных movd и movq выполняют копирование:
  • из одного MMX-регистра в другой,
  • из MMX-регистра в память и обратно,
  • из MMX-регистра в целочисленный регистр и обратно (только команда movd).
Среди всех MMX-команд только movd и movq могут иметь выходной операнд в памяти; movd - единственная команда, у которой операнд может быть в целочисленном регистре.

Команда movd
Команда movd копирует 32 бита:

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

back Возврат к началу темы

Команда movq
Команда movq копирует 64 бита:

  • из одного MMX-регистра в другой;
  • из памяти в MMX-регистр;
  • из MMX-регистра в память.


Topic 18

 Welcome to Introduction to MMX(TM) Technology Tutorial! To start learning, please open the page MMXSTART.HTM in the same directory using frame-enabled browser.


Topic 18

Команды технологии MMX
Тема 18. Команды передачи данных


Topic 19

 Следующее занятие (темы 20-23) - это разбор примеров, показывающих, каким образом можно значительно повысить быстродействие программы с помощью MMX-команд. Вот задачи, которые мы разберем:
  • Скалярное произведение векторов
  • Условный выбор фрагмента изображения
  • Распаковка с "размножением" знакового бита
  • Абсолютные величины разностей
Прежде чем вставлять эти примеры в Вашу программу, внимательно прочитайте предупреждение.


Topic 19

За работу!


Topic 19

Применение MMX-команд
Тема 19. Примеры программирования


Topic 20

 С помощью MMX-команд можно быстро вычислять скалярное произведение векторов. Пусть векторы состоят из 16-разрядных слов и находятся в памяти по адресам a_vector и b_vector. Программа будет выполнять следующие шаги:
1. | Скопировать 4 слова первого вектора в MMX-регистр командой movq.
2. | Скопировать 4 слова второго вектора в MMX-регистр.
3. | Попарно перемножить слова и сложить первое произведение со вторым, а третье с четвертым, пользуясь командой pmaddwd.
4. | Добавить результаты шага 3 к ранее накопленным суммам командой paddd
Эти шаги следует повторить для всех слов исходных векторов (см. русунок).

Команды 1-4 реализуют шаги 1-4 (см. рис.)
Команды 5-8 организуют цикл по всем элементам векторов.
Команды 9-11 складывают частичные суммы, накопленные в цикле в старших и младших разрядах регистра MM7.
Команда 12 пересылает результат в память.


Topic 20

Вычисление скалярного произведения

Computing vector dot product

Текст программы


Topic 20

Применение MMX-команд
Тема 20. Скалярное произведение векторов


Topic 21

 MMX-команды помогают разрабатывать более эффективные программы компьютерной графики и обработки видеоизображений, во многих случаях позволяя избежать условных переходов. Например, для выделения графического объекта и наложения его на неоднородный фон можно воспользоваться следующими командами:
1. | Сформировать маску сравнением цвета точек верхней картинки с синим цветом командой pcmpeqb.
2. | Командой pand присвоить значение 0 всем точкам сцены, на которые будет наложен объект "Герой".
3. | Командой pandn присвоить значение 0 всем синим точкам исходной картинки с "героем".
4. | Выполнить наложение точек объекта на фон командой por.

Этот фрагмент программы обрабатывает восемь точек в каждом изображении. Для наложения всего объекта на фон данный фрагмент надо выполнить в цикле для всех точек изображения.

1. Команда pcmpeqb формирует маску: точки, соответствующие "герою" заполняются нулями, а окружающие точки - единицами.

2. Команда pand присваивает значение 0 всем точкам фона, на которые попадет "герой".

3. Команда pandn присваивает значение 0 всем синим точкам картинки с "героем".

4. Команда por выпоняет наложение "героя" на фон.


Topic 21

Hero Объект "Герой"

Scene Фон

Результат наложения:

Result

Текст программы и состояние регистров


Topic 21

Формирование маски


Topic 21

Заполнение нулями точек фона, на которые будет наложен объект


Topic 21

Заполнение нулями точек, окружающих "героя"


Topic 21

Наложение объекта на фон


Topic 21

Применение MMX-команд
Тема 21. Условный выбор фрагмента изображения


Topic 21

 Часто бывает нужно преобразовать короткие данные в более длинные. Если это слова без знака, можно воспользоваться одной из команд группы punpck, позаботившись, чтобы в старшие разряды результатов сразу попали нули.
Если же надо повысить разрядность слов со знаком, можно действовать следующим образом:
1. | Распаковать слова из младших 32 разрядов командой punpcklwd, так, чтобы знаковый бит попал в самый старший разряд двойного слова-результата (см. рисунок).
2. | Распаковать слова из старших 32 разрядов командой punpckhwd (в другой регистр).
3. | Выполнить арифметический сдвиг полученных двойных слов направо командой psrad. При этом знаковый бит в каждом слове размножится, и 32-разрядные слова со знаком будут иметь те же численные значения, что и исходные 16-разрядные слова со знаком.


Topic 22

Составьте программу сами!


Topic 22

Применение MMX-команд
Тема 22. Распаковка с "размножением" знакового бита


Topic 23

 Абсолютные величины разностей чисел используются как мера различия в алгоритмах сжатия и распознавания. MMX-команды помогут Вам быстро вычислять эти величины. Идея программы проста:
1. | Скопировать элементы исходных векторов из памяти в MMX-регистры командой movq.
2. | Вычесть элементы второго вектора из элементов первого в арифметике с насыщением, рассматривая их как числа без знака. Если разность отрицательна, соответствующий элемент выходного операнда станет равным нулю; если разность положительна, она попадет в выходной операнд.
3. | Таким же образом вычесть элементы первого вектора из элементов второго. Там, где в предыдущем случае получились нули, теперь будут неотрицательные разности.
4. | Вычислить поразрядное логическое ИЛИ от результатов шагов 2 и 3. При этом из каждой пары элементов данных на входе ИЛИ в выходной операнд попадет тот, который не равен нулю. Это и требовалось.


Topic 23

    Computing absolute differences

    Составьте программу сами!

Исходные векторы состоят из байтов и находятся в памяти по адресам a_block и b_block.


Topic 23

Применение MMX-команд
Тема 23. Абсолютные величины разностей


Topic .

 Технология MMX расширяет функциональные возможности процессоров архитектуры Intel при полной совместимости с программами для прошлых поколений процессоров. Все программное обеспечение, созданное для ранее выпущенных процессоров, без всяких изменений может выполняться на процессорах с технологией MMX (см. рисунок).

MMX-команды "общаются" с операционной системой точно так же, как и команды с плавающей запятой. Механизм сохранения и восстановления состояния вычислений с плавающей запятой применим и для сохранения (восстановления) состояния программы, использующей технологию MMX. Фактически технология MMX не означает "нового" режима работы процессоров архитектуры Intel: MMX-команды исполняются в том же режиме процессора, что и команды с плавающей запятой.


Topic 24

ОС и программа с MMX-командами
Тема 24. Совместимость и архитектура


Topic 25

Команды с плавающей запятой работают со стеком регистров. Все вычисления происходят в регистре st(0), на который показывает указатель начала стека TOS (top of stack). На рисунке Вы видите умножение st(0) на A. Обратите внимание: при выполнении команды в слове состояния могут измениться лишь два бита, соответствующие регистру st(0).


Topic 25

 Щелкнув мышкой на имени команды, Вы увидите, как работают с регистрами команды умножения:
fmul A (умножение с плавающей запятой)
pmulhw MM3,MM4 (MMX-команда)


Topic 25

 MMX-команды используют восемь 64-разрядных регистров. К регистрам обеспечивается прямой доступ по именам: MM0,..., MM7. Никакие другие команды не могут обращаться к этим регистрам. "Физически" регистры технологии MMX размещены в мантиссах регистров с плавающей запятой (биты 0-63). Таким образом, при записи любого значения в MMX-регистр это значение попадает в один из регистров с плавающей запятой.
При выполнении MMX-команд
  • все биты порядка и знаковый бит в соответствующем регистре с плавающей запятой заполняются единицами (это биты 64-79)
  • все слово состояния регистров с плавающей запятой заполняется нулями.


Topic 25

Большинство MMX-команд могут работать с двумя регистрами. На рисунке команда pmulhw умножает слова регистрa ММ3 на слова регистра MM4 и записывает результаты в MM3. Биты 64-79 в соответствующем регистре с плавающей запятой заполняются единицами (в "плавающей" арифметике это состояние QNan). Обратите внимание: все слово состояния регистров с плавающей запятой заполняется нулями.


Topic 25

 Welcome to Introduction to MMX(TM) Technology Tutorial! To start learning, please open the page MMXSTART.HTM in the same directory using frame-enabled browser.


Topic 25

ОС и программа с MMX-командами
Тема 25. MMX-регистры


Topic 26

 MMX-команды никогда не генерируют арифметических исключений. Ho в результате выполнения этих команд могут генерироваться прерывания арифметики с плавающей запятой, если до выполнения MMX-команды уже было сгенерировано исключение "плавающей" арифметики.

MMX команды могут генерировать исключения по доступу к памяти.


Topic 26

ОС и программа с MMX-командами
Тема 26. Исключения, генерируемые MMX-командами


Topic 27

 На процессорах архитектуры Intel сохранение состояния задачи с MMX-командами происходит точно так же, как сохранение состояния задачи, использующей арифметику с плавающей запятой. Поэтому механизм переключения задач в существующих многозадачных операционных системах полностью применим и для задач с MMX-командами.
Кооперативные ОС (например, Windows* 3.1) производят переключение задач только если активная задача сама передает управление системе. Программисту надо заботиться о сохранении состояния задачи, использующей MMX-команды или арифметику с плавающей запятой, перед передачей управления ОС.
Многозадачные ОС с вытеснением (например, Windows 95, Windows NT*) производят переключение задач, не дожидаясь, пока активная задача передаст управление операционной системе. Такие ОС сами сохраняют и восстанавливают состояние задачи с MMX-командами. Работа ОС с вытеснением показана на рисунке справа. Чтобы посмотреть демонстрацию до конца, нажимайте кнопку Продолжить.

* Все товарные знаки являются собственностью соответствующих владельцев.


Topic 27

Preemptive OS simulation

Происходит переключение от задачи A к задаче B. ОС сохраняет состояние целочисленной арифметики задачи A и восстанавливает целочисленное состояние задачи B
Сохранение и восстановление состояния вычислений с плавающей запятой будет позднее, когда задача B начнет выполнение MMX-команд.


Topic 27

  Preemptive OS simulation
Задача B начинает выполнять MMX-команды. Для этого ОС сохраняет состояние вычислений с плавающей запятой задачи A и восстанавливает состояние задачи B. Теперь задача B может выполнять как команды с плавающей запятой, так и MMX-команды.


Topic 27

  Preemptive OS simulation
Происходит переключение от задачи B к задаче A. ОС сохраняет состояние целочисленной арифметики задачи B и восстанавливает целочисленное состояние задачи A. Сохранения и восстановления состояния вычислений с плавающей запятой не происходит.


Topic 27

Preemptive OS simulation

Снова выполняется переключение от задачи A к задаче B. ОС сохраняет состояние целочисленной арифметики задачи A и восстанавливает целочисленное состояние задачи B. Обратите внимание: восстанавливать состояние вычислений с плавающей запятой не потребовалось; можно сразу выполнять очередную MMX-команду.


Topic 27

ОС и программа с MMX-командами
Тема 27. Передача управления от задачи к задаче


Topic 23

 Щелчком мыши выберите команду, которая должна быть на том месте, где сейчас мигает подсказка. Hажмите кнопку Ответ.

Варианты ответа:
psubsb MM0,MM1
psubusb MM0,MM1
por MM0,MM1
pand MM0,MM1
pxor MM0,MM1
movq MM1,b_block
movq MM0,b_block
psubusb MM1,MM0
psubusb MM1,a_block
psubusb MM1,b_block


Topic 9

Поздравляем Вас!

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

next Продолжим работу


Topic 23

Поздравляем!

Вы успешно составили первые в Вашей жизни программы с MMX-командами! Вам осталось изучить последние четыре темы курса Введение в технологию MMX. Они посвящены взаимодействию операционной системы и MMX-программы.

next Продолжим работу


Disclaimer

Предупреждение

При соблюдении условий и ограничений, изложенных далее, корпорация Intel на основании своих патентных и авторских прав предоставляет Вам неисключительную лицензию на использование фрагментов программ, приведенных в качестве примеров в занятии "Использование MMX-команд" компьютерного курса обучения "Введение в технологию MMX", без права передачи лицензии другим лицам. Эта лицензия позволяет Вам использовать, воспроизводить и распространять данные фрагменты программ исключительно в виде объектного кода в составе Ваших компьютерных программ, с единственной целью использования Вашими программами команд технологии MMX из данных фрагментов; лицензия касается исключительно вычислительных систем с набором команд архитектуры Intel. Настоящая лицензия не содержит иной передачи каких бы то ни было прав на пользование объектами интеллектуальной собственности.

Данный документ и вся информация, предложения, образцы и иные материалы, передаваемые вместе с ним или в связи с ним (в том числе и фрагменты программ, приведенные в качестве примеров) предоставляются КАК ЕСТЬ, без всяких явных или неявных гарантий любого характера; Intel особо исключает любые неявные гарантии пригодности к продаже, ненарушения прав третьих сторон или пригодности для использования в каких-либо конкретных целях.

Любое использование и распространение данного документа и данных материалов должно происходить в соответствии с действующим законодательством США, в том числе с правилами и положениями Администрации по экспорту U.S. Office of Export Administration, а также законодательными актами других правительственных учреждений США.

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


Tutorial Glossary

 Типы данных
MMX-команды используют новые типы данных: упакованные байты (packed byte, суффикс команды b), упакованные слова (packed word, суффикс w), упакованные двойные слова (packed doubleword, суффикс d) и 64-разрядные слова (quadword, суффикс q).

Одни и те же 64 бита могут трактоваться одной MMX-командой как 8 байт, другой командой - как 4 слова, и т.д. Тип данных определяется суффиксом команды.

back Возврат к изучаемой теме

Допустимый диапазон данных
тип данных | минимальное значение | максимальное значение
Байт со знаком | 80h (-128) | 7Fh (127)
Байт без знака | 00h | FFh (256)
Слово со знаком | 8000h (-32768) | 7FFFh (32767)
Слово без знака | 0000h | FFFFh (65535)
Двойное слово со знаком | 80000000h (-2147483648) | 7FFFFFFFh (2147483647)
Двойное слово без знака | 00000000h | FFFFFFFFh (4294967295)

back Возврат к изучаемой теме

Операнд
Большинство MMX-команд имеет два операнда: выходной и входной. Обычно входная информация берется из обоих операндов; результат записывается в выходной операнд.

Пример: pand MM2,MM4
Здесь регистр MM2 - выходной операнд, регистр MM4 - входной. Эта команда вычисляет поразрядное логическое И между значениями в регистрах MM2 и MM4 и записывает результат в регистр MM2.

back Возврат к изучаемой теме

Арифметика с насыщением
(saturation arithmetic)
Если команда использует арифметику с насыщением и результат операции превышает максимальное представимое значение, то в выходной операнд записывается это максимальное значение (происходит "насыщение").
Аналогично, если результат операции оказался меньше нижней границы допустимого диапазона, то в выходной операнд записывается минимально возможное значение.
Например, если результат меньше 8000h, то 16-разрядное слово со знаком считается равным 8000h; если получилось больше 7FFFh, то слово со знаком считается равным 7FFFh.
back Возврат к изучаемой теме

Циклическая арифметика (wraparound arithmetic)
Если команда использует циклическую арифметику и результат операции выходит за двоичную разрядную сетку используемого типа данных, то "лишние" старшие биты результата отбрасываются. Иначе говоря, если результат превышает максимально возможное значение на n единиц, то результатом считается
минимальное значение + n - 1.
Примеры:
7FFFh + 0002h = 8001h
(32767 + 2 = -32767 или 32769)
FFFFh + 0002h = 0001h
(65535 + 2 = 1 или -1 + 2 = 1)

back Возврат к изучаемой теме

Команда EMMS
Команда EMMS присваивает значение 1 всем разрядам слова состояния регистров с плавающей запятой, что соответствует состоянию Empty. Это обеспечивает переход процессора из режима исполнения MMX-команд в режим исполнения обычных команд с плавающей запятой.

Не забывайте ставить команду EMMS в конце процедур, использующих MMX-команды!

back Возврат к изучаемой теме

Команды сложения и вычитания
MMX-команды сложения и вычитания работают с упакованными байтами, словами и двойными словами. Обрабатываются данные как со знаком, так и без знака.
Команды сложения | Команды вычитания
paddb/w/d | psubb/w/d
paddsb/w | psubsb/w
paddusb/w | psubusb/w

back Возврат к изучаемой теме

Команды сдвига
MMX-команды сдвига выполняют арифметический и логический сдвиг разрядов в элементах данных выходного операнда. При логическом сдвиге освободившиеся разряды заполняются нулями. При арифметическом сдвиге крайний из сдвигаемых битов "размножается" и заполняет все освободившиеся разряды.
Команды сдвига
psllw/d/q
psraw/d
psrlw/d/q

back Возврат к изучаемой теме

Логические команды
Эта группа MMX-команд выполняет поразрядные логические операции над 64 битами данных.
Логические команды
pand | por
pandn | pxor

back Возврат к изучаемой теме

Команды умножения
MMX-команды умножения вычисляют произведения 16-разрядных слов своих операндов. Команда pmulhw записывает в каждое слово выходного операнда старшие 16 разрядов этих произведений, а команда pmullw - младшие 16 разрядов. Команда pmaddwd попарно складывает произведения и записывает полученные суммы в 32-разрядные двойные слова выходного операнда.
Команды умножения
pmulhw
pmullw
pmaddwd

back Возврат к изучаемой теме

Команды сравнения
Эти MMX-команды сравнивают элементы данных в операндах и генерируют маску в выходном операнде. MMX-команды сравнения не устанавливают флагов (признаков).
Команды сравнения
pcmpeqb/w/d
pcmpgtb/w/d

back Возврат к изучаемой теме

Команды упаковки и распаковки
MMX-команды упаковки "укорачивают" элементы данных в своих операндах и записывают полученные короткие данные в выходной операнд. MMX-команды распаковки составляют из элементов данных в своих операндах новые элементы данных удвоенной длины и записывают их в выходной операнд.
Команды упаковки | Команды распаковки
packsswb/dw | punpckhbw/wd/dq
packuswd | punpcklbw/wd/dq

back Возврат к изучаемой теме

Команды передачи данных
MMX-команды передачи данных выполняют копирование данных из одного MMX-регистра в другой, а также пересылку между MMX-регистрами, целочисленными регистрами и памятью.
Команды передачи данных
movd
movq

back Возврат к изучаемой теме

Скалярное произведение векторов
Эта операция часто используется в приложениях линейной алгебры и цифровой обработки сигналов.

Скалярное произведение a·b векторов ak и bk (k = 1,..., n) вычисляется так:
a·b = a1b1 + a2b2 + ... + anbn

back Возврат к изучаемой теме

Абсолютные величины разностей
Абсолютные величины разностей чисел используются в алгоритмах распознавания и сжатия в качестве метрики - меры "расстояния" между числами.

back Возврат к изучаемой теме

Условный выбор фрагмента изображения
Выделение фрагмента изображения по какому-либо условию - обычная операция в графических программах, например, при наложении объекта или текста на картинку-фон. Такая операция требует многих ветвлений в программе; их можно избежать, если воспользоваться MMX-командами.

back Возврат к изучаемой теме

Распаковка с "размножением" знака
Распаковка с "размножением" знакового бита часто требуется при преобразовании коротких типов данных к длинным.

back Возврат к изучаемой теме

Команда movq
Команда movq выполняет копирование 64 бит из одного MMX-регистра в другой, а также из MMX-регистра в память и обратно.

back Возврат к изучаемой теме

Команда pmaddwd
Команда pmaddwd попарно перемножает слова (со знаком) входного и выходного операнда, что дает четыре 32-разрядных произведения. Затем первое произведение складывается со вторым, а третье с четвертым. Полученные суммы записываются в 32-разрядные слова выходного операнда.

back Возврат к изучаемой теме

Команда paddd
Команда paddd складывает 32-разрядные слова входного операнда с 32-разрядными словами выходного операнда в циклической арифметике.

back Возврат к изучаемой теме

Команда pcmpeqb
Команда pcmpeqb сравнивает байты входного операнда с соответствующими байтами выходного. Если байт выходного операнда равен байту входного, такой байт заполняется единицами, а если не равен, то он заполняется нулями.

back Возврат к изучаемой теме

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

back Возврат к изучаемой теме

Команда pandn
Команда pandn вычисляет обращение (поразрядное логическое НЕ) выходного операнда, а затем поразрядное логическое И между входным операндом и обращенным значением выходного.

back Возврат к изучаемой теме

Команда por
Команда por вычисляет поразрядное логическое ИЛИ входного и выходного операнда. При выполнении этой команды значение 1 записывается в те биты выходного операнда, для которых хотя бы один из соответствующих битов обоих операндов на входе был равен 1. В остальные биты записывается 0.


Help

Введение в технологию MMX™ - Справка

Возврат к изучаемой теме

Панель управления

В правой части экрана находится панель управления. Она поможет Вам легко переходить от темы к теме, пользуясь следующими кнопками:
Next | Перейти к следующей теме. | Map | Показать план обучения.
Prev | Вернуться к предыдущей теме. | Help | Открыть страницу "Справка".
Back | Вернуться к началу изучаемой темы. | Exit | Закончить работу.

Гипертекстовые связи

Если щелкнуть мышью, указывая на подчеркнутое слово или кнопку, Вы получите дополнительную информацию: на экране появится новая страница с текстом либо новые элементы имеющейся страницы.

Запись чисел

К числам в шестнадцатеричной системе, как правило, добавляется буква h, чтобы отличить их от десятичных чисел. Например: FFFFh, 1327h. Oтрицательные числа в шестнадцатеричной системе записываются в соответствии с их машинным представлением, без знака минус: 80h означает байт со значением -128, а FF80h - это слово со значением -128.

А теперь продолжим изучение технологии MMX!

© 1996, 1997 Intel Corporation


Topic 9

Правила игры

Вам надо предсказать, какой результат получится при выполнении MMX-команд вычитания: psubw, psubusw и psubsw.

Заполните 16-разрядное слово, в котором вы сейчас видите "????". Для этого щелчком мыши выберите один из вариантов ответа, приведенных слева внизу, и нажмите кнопку ОТВЕТ. Если Вам требуется помощь, щелкните мышью на имени команды - на экране появится подсказка.

В любой момент Вы можете начать игру с начала.

Подсказка

Команда psubw MM0,MM2 вычитает слова регистра MM2 из слов регистра MM0 в циклической арифметике.

Обычное вычитание дает:
0001h - 0002h = -1
8000h - 0001h = 32767
7F38h - E8F9h = -27073
0001h - FFFFh = -65534
Числа справа записаны в десятичной системе. Вам осталось применить к ним правила циклической арифметики. Щелчком мыши выберите один из ответов слева внизу.

Правила игры

Подсказка

Команда psubusw MM0,MM2 вычитает слова без знака, находящиеся в регистре MM2, из слов без знака в регистре MM0. Используется арифметика с насыщением. Допустимый диапазон для слов без знака: 0..65535.

Обычное вычитание дает:
0001h - 0002h < 0
8000h - 0001h = 32767
7F38h - E8F9h < 0
0001h - FFFFh < 0
Числа справа записаны в десятичной системе. Вам осталось применить к ним правила арифметики с насыщением. Щелчком мыши выберите один из ответов слева внизу.

Правила игры

Подсказка

Команда psubsw MM0,MM2 вычитает слова со знаком, находящиеся в регистре MM2, из слов со знаком, находящихся в регистре MM0. Используется арифметика с насыщением. Допустимый диапазон для слов со знаком -32768..32767.

Обычное вычитание дает:
0001h - 0002h = -1
8000h - 0001h < -32768
7F38h - E8F9h > 32767
0001h - FFFFh = 2
Числа справа записаны в десятичной системе. Вам осталось применить к ним правила арифметики с насыщением. Щелчком мыши выберите один из ответов слева внизу.

Правила игры


Introduction to MMX(TM) Technology

 Welcome to Introduction to MMX(TM) Technology Tutorial! To start learning, please use a frame-enabled browser.


Topic 22

Составляем программу распаковки с "размножением" знакового бита

Исходные 16-разрядные слова находятся в регистре MM3. Заполните недостающие фрагменты программы и нажмите кнопку Ответ.

/* unpack words and shift */
punpcklwd | , | MM3
 | MM2, |
psrad | , | 16
 | , |


Topic 9

Каков результат вычитания?

Команда:
Операнды:
MM0
MM2
Результат psubw MM0,MM2:
Результат psubusw MM0,MM2:
Результат psubsw MM0,MM2:
Варианты ответа:
0000h
0003h
8000h
E8F9h 		0001h
3000h
8001h
F2A4h 		0002h
7FFFh
963Fh
FFFFh