Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
12-12-2013_11-21-32 / пособие_m.doc
Скачиваний:
76
Добавлен:
10.05.2015
Размер:
484.35 Кб
Скачать
  1. Mmx архитектура

MMX- технология разработана для ускорения мультимедиа и коммуникационных программ. Она включает в себя новые команды и типы данных, что позволяет создавать приложения нового уровня. При этом сохраняется полная совместимость с существующими операционными системами и программным обеспечением. В основе MMX технологии лежит принцип SIMD (Single Instruction Multiple Data), т.е. одной командой можно обработать сразу несколько единиц информации.

7.1. Форматы представления данных

MMX-технология вводит следующие 4 новых 64-разрядных типа данных:

- упакованные байты – 8 байт, упакованные в одно 64-разрядное число;

- упакованные слова – 4 слова, упакованные в одно 64-разрядное число;

- упакованные двойные слова – 2 двойных слова, упакованные в одно 64-разрядное число;

- учетверенное слово – одно 64-разрядное число.

MMX команды могут обрабатывать группы из 8 байт, 4 слов и двух двойных слов. Такие группы из 64 разрядов рассматриваются как упакованные данные и могут трактоваться как один из вышеперечисленных типов данных.

7.2. Арифметика с насыщением

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

В арифметике с циклическим переносом в случае переполнения в результате рассматриваются только младшие разряды результата, а старшие разряды игнорируются. Например, при сложении двух слов старший разряд теряется (или фиксируется в арифметическом флаге переноса CF):

FFFFh + 8000h = 7FFFh

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

Если же результат получается меньше 0х80 (для знаковых байт) или меньше 0х00 (для беззнаковых байт), то результатом данной операции будет соответственно 0х80 или 0х00.

7.3. Mmx регистры

В микропроцессорах, использующих технологию MMX, регистры отображены на регистры, используемые при вычислениях с плавающей запятой. 64-разрядные MMX регистры отображаются на поля мантиссы. Значения, записываемые в MMX-регистр, автоматически появляются в младших разрядах соответствующих FPU-регистров. Обращение к этим регистрам команды выполняют, указывая непосредственно имена этих регистров от ММ0 до ММ7.

ММХ-регистры могут использоваться непосредственно для проведения обработки данных. Они не могут использоваться для адресации к памяти; адресация выполняется при помощи целочисленных регистров и стандартных режимов адресации.

7.4. Система команд mmx

В микропроцессорах, использующих технологию MMX, появилось 57 новых команд. Эти команды делятся на следующие категории:

- арифметические команды;

- команды сравнения;

- команды преобразования;

- логические команды;

- команды сдвигов;

- команды передачи данных;

- команда EMMS.

Типичная ММХ-команда имеет следующий синтаксис:

- P – префикс, который указывает на использование упакованных данных;

- код операции, например ADD, CMP;

- S (signed saturation) – означает использование знакового насыщения;

- US (unsigned saturation) – означает использование беззнакового насыщения;

- B,W,D,Q (byte, word, doubleword, quadword) – означает используемый тип данных.

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

Для команд передачи данных операнд-приемник и операнд-источник могут располагаться в памяти, целочисленном регистре или ММХ-регистре. Для всех остальных ММХ-команд операнд-приемник находится в ММХ-регистре, операнд-источник в памяти, ММХ-регистре или является непосредственным операндом.

Все ММХ-команды никогда не изменяют регистр флагов EFLAFS.

В группе арифметических команд команды PADD и PSUB выполняют сложение и вычитание знаковых и беззнаковых операндов в режиме с циклическим переносом. Команды обрабатывают упакованные байты, упакованные слова и упакованные двойные слова.

Команда PADDB mm,mm/m64 cкладывает упакованные байты из ММХ-регистра или памяти с упакованными байтами в ММХ-регистре.

Команда PADDW mm,mm/m64 cкладывает упакованные слова из ММХ-регистра или памяти с упакованными словами в ММХ-регистре.

Команда PADDD mm,mm/m64 складывает упакованные двойные слова из ММХ-регистра или памяти с упакованными двойными словами в ММХ-регистре.

Команды PSUB имеют аналогичную мнемонику и выполняют вычитание.

Команды PADDS и PSUBS выполняют сложение и вычитание операндов со знаком, при этом операции выполняются с насыщением. Эти команды обрабатывают упакованные байты и упакованные слова.

Команда PADDSB mm,mm/m64 cкладывает с насыщением знаковые упакованные байты из ММХ-регистра или памяти со знаковыми упакованными байтами в ММХ-регистре. Если значение результата больше или меньше границ диапазона, то результат операции насыщается соответственно до 0х7F или до 0х80.

Команда PADDSW mm,mm/m64 складывает с насыщением знаковые упакованные слова из ММХ-регистра или памяти со знаковыми упакованными словами в ММХ-регистре.

Команды PADDUS и PSUBUS выполняют сложение и вычитание операндов без знака, при этом операции выполняются с насыщением. Команды обрабатывают упакованные байты и упакованные слова.

Команда PADDUSB mm,mm/m64 cкладывает с насыщением беззнаковые упакованные байты из ММХ-регистра или памяти с беззнаковыми упакованными байтами в ММХ-регистре.

Команда PADDUSW mm,mm/m64 складывает с насыщением беззнаковые упакованные слова из ММХ-регистра или памяти с беззнаковыми упакованными словами в ММХ-регистре.

Команды упакованного умножения выполняют умножение знаковых 16-разрядных операндов, при этом получается 32-разрядный результат. Имеется возможность выбрать младшие или старшие 16 разрядов результата. При выполнении команды PMULHW в результат заносятся старшие разряды, а при выполнении команды PMULLW – младшие разряды результата.

Команда PMULHW mm,mm/m64 умножает упакованные знаковые слова в ММХ-регистре на упакованные знаковые слова в ММХ-регистре или памяти и возвращает старшие 16 разрядов результата в ММХ-регистре. При выполнении данной команды происходит умножение 4 знаковых слов операнда-приемника на 4 знаковых слова операнда-источника и старшие 16 разрядов записываются в соответствующие слова операнда-приемника.

Команда PMULLW mm,mm/m64 умножает знаковые упакованные слова в ММХ-регистре на упакованные знаковые слова в ММХ-регистре или памяти и возвращает младшие 16 разрядов результата в ММХ-регистре.

Команда PCMPEQ относится к группе команд сравнения и сравнивает соответствующие элементы источника и приемника на равенство и если эти элементы равны, то в элемент приемника записываются единицы, а если они не равны – то записываются нули.

Команда PCMPEQB mm,mm/m64 сравнивает на равенство упакованные байты в ММХ-регистре или памяти с упакованными байтами в ММХ-регистре. Команды PCMPEQW и PCMPEQD сравнивают на равенство упакованные слова и упакованные двойные слова соответственно.

Команда PCMPGT сравнивает соответствующие элементы источника и приемника и если элемент источника больше элемента приемника, то в элемент приемника записываются единицы, а если меньше – то записываются нули.

Команда PCMPGTB mm,mm/m64 сравнивает на “больше” упакованные байты в ММХ-регистре или памяти с упакованными байтами в ММХ-регистре. Команды PCMPGTW и PCMPGTD сравнивают на “больше” упакованные слова и упакованные двойные слова соответственно.

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

Команда PACKSS (упаковка со знаковым насыщением) преобразует знаковые слова в знаковые байты или знаковые двойные слова в знаковые слова, используя знаковое насыщение. Операндом-приемником является ММХ-регистр, а операндом-источником может быть как ММХ-регистр, так и операнд в памяти. Элементы операндов преобразовываются в элементы в два раза меньшей длины, используя принцип насыщения. В младшую часть результата записывается упакованный операнд-приемник, а в старшую часть – упакованный операнд-источник.

Команда PACKSSWB mm,mm/m64 упаковывает 4 знаковых слова из обоих операндов в 8 знаковых байт. Если значение слова больше или меньше границ диапазона знакового байта, то результат упаковки насыщается соответственно до 0х7F или 0х80.

Команда PACKSSDB mm,mm/m64 упаковывает два знаковых двойных слова из обоих операндов в 4 знаковых слова.

Команда PACKUS (упаковка с беззнаковым насыщением) преобразует знаковые слова в беззнаковые байты, используя беззнаковое насыщение. Элементы операндов преобразовываются в элементы в два раза меньшей длины, используя принцип насыщения. В младшую часть результата записывается упакованный операнд-приемник, а в старшую часть – упакованный операнд-источник.

Команда PACKUSWB mm,mm/m64 упаковывает 4 знаковых слова из обоих операндов в 8 беззнаковых байт. Если значение слова больше или меньше границ диапазона беззнакового байта, то результат упаковки насыщается соответственно до 0хFF или до 0х00.

Команда PUNPCKH (распаковка старших разрядов) и команда PUNPCKL (распаковка младших разрядов) преобразуют байты в слова, слова в двойные слова и двойные слова в учетверенное слово.

Команда PUNPCKHBW mm,mm/m64 распаковывает байты из верхней половины ММХ-регистра и верхней половины ММХ-регистра/памяти в ММХ-регистр. Байты двух операндов записываются в результат через один при этом в старший байт результата помещается старший байт приемника, затем в следующий байт результата помещается старший байт источника и т.д.

Команды PUNPCKHWD mm,mm/m64 и PUNPCKHDQ распаковывают слова и двойные слова соответственно.

Команда PUNPCKLBW mm,mm/m64 распаковывает байты из нижней половины ММХ-регистра и нижней половины ММХ-регистра/памяти в ММХ-регистр. Байты двух операндов записываются в результат через один при этом в старший байт результата помещается старший байт из нижней половины приемника, затем в следующий байт результата помещается старший байт из нижней половины источника и т.д.

Логические команды PAND (логическое И), PANDN (логическое И-НЕ), POR (логическое ИЛИ) и PXOR (логическое исключающее ИЛИ) выполняют поразрядно соответствующие логические операции на всех 64 разрядах операндов.

В группе команд сдвигов команды логического сдвига влево, логического сдвига вправо и арифметического сдвига вправо осуществляют сдвиг каждого элемента на заданное число разрядов. Логические сдвиги влево и вправо позволяют осуществить сдвиги учетверенного слова как одного элемента.

Команда PSLL (упакованный логический сдвиг влево) и команда PSRL (упакованный логический сдвиг вправо) осуществляют логический влево и вправо, заполняя старшие или младшие разряды нулями. Эти команды обрабатывают упакованные слова, двойные слова и учетверенное слово.

Команда PSLLW mm,mm/m64 осуществляет логический сдвиг слов ММХ-регистра влево на число позиций, указанное в ММХ-регистре или памяти.

Команда PSLLW mm,imm8 осуществляет логический сдвиг слов ММХ-регистра на число позиций, указанное непосредственным операндом imm8.

Команды PSSLD и PSSLQ осуществляют логический сдвиг влево двойных слов или учетверенного слова.

Команда PSRLW mm,mm/m64 осуществляет логический сдвиг слов ММХ-регистра вправо на число позиций, указанное в ММХ-регистре или памяти.

Команда PSRLW mm,imm8 осуществляет логический сдвиг слов ММХ-регистра вправо на число позиций, указанное непосредственным операндом imm8.

Команды PSRLD и PSRLQ осуществляют логический сдвиг вправо двойных слов или учетверенного слова.

Команда PSRA (упакованный арифметический сдвиг вправо) осуществляет арифметический сдвиг вправо, заполняя освобождающиеся позиции знаковым разрядом. Команда обрабатывает упакованные слова и упакованные двойные слова.

Команда PSRAW mm,mm/m64 осуществляет арифметический сдвиг слов ММХ-регистра вправо на число позиций, указанное в ММХ-регистре или памяти.

Команда PSRAW mm,imm8 осуществляет арифметический сдвиг вправо на число позиций, указанное непосредственным операндом imm8.

Команда PSRAQ осуществляет арифметический сдвиг вправо двойных слов ММХ-регистра.

В группе команд передачи данных команды MOVD mm,r/m32 и MOVD r/m32,mm осуществляют передачу 32 разрядов упакованных данных из памяти в ММХ-регистр и обратно, или из целочисленного регистра в ММХ-регистр и обратно. Когда операнд-приемник является ММХ-регистром, то 32-разрядный операнд-источник записывается в младшие 32 разряда 64-разрядного регистра-приемника, при этом в старшие 32 разряда заносятся нули.

Команды MOVQ mm,mm/m64 и MOVQ mm/m64,mm осуществляют передачу 64 разрядов упакованных данных из памяти в ММХ-регистр и обратно, либо осуществляет передачу данных между ММХ-регистрами.

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Корнеев В.В., Киселев А.В. Современные микропроцессоры – М.:Нолидж, 2000 – 315с.

2. Григорьев В.Л. Микропроцессор i486. Архитектура и программирование (в 4-х книгах) – М.: ГРАНАЛ, 1993 – 346с.

3. Бердышев Е. Технология MMX. Новые возможности процессоров P5 и P6. – М.: ДИАЛОГ-МИФИ, 1998 – 234с.

  1. Гук М. Процессоры Pentium II, Pentium Pro и просто Pentium – СПб: Питер Ком, 1999 – 288с.

  2. Морс С.П., Алберт Д.Д. Архитектура микропроцессора 80286: Пер. с англ. – М.: Радио и связь, 1990 – 304с.

  3. Брей Б. Микропроцессоры Intel: Пер. с англ.- СПб: “БХВ-Петербург”, 2005-1328с.

СОДЕРЖАНИЕ

Введение ……………………………………………………… 3

Соседние файлы в папке 12-12-2013_11-21-32