Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпс с 1 по 294.doc
Скачиваний:
13
Добавлен:
16.04.2019
Размер:
6.2 Mб
Скачать

Команды преобразования

PACKSS [WB, DW] -Упаковка со знаковым насыщением PACKUSWB - Упаковка с беззнаковым насыщением PUNPCKH [BW, WD, DQ] - Распаковка из старших половин PUNPCKL [BW, WD, DQ] - Распаковка из младших половин PSHUFW- Переупорядочивание слов

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

PADD [B, W, D]-Сложение с циклическим переносом

PSUB [B, W, D] - Вычитание с циклическим переносом

PADDS [B, W] - Знаковое сложение с насыщением

PSUBS [B, W]- Знаковое вычитание с насыщением

PADDUS [B, W] - Беззнаковое сложение с насыщением

PSUBUS [B, W] - Беззнаковое вычитание с насыщением

PMULHW - Знаковое умножение с сохранением старшей половины результата PMULLW - Знаковое умножение с сохранением младшей половины результата PMULHUW- Беззнаковое умножение с сохранением старшей половины результата PMADDWD - Знаковое умножение с накоплением

PSADBW- Сложение абсолютных разностей байтов

PAVG[B,W]*- Нахождение среднего значения

Команды нахождения максимума и минимума

PMAXSW- Нахождение большего значения (знаковые слова)

PMAXUB'- Нахождение большего значения (беззнаковые байты) PMINSW- Нахождение меньшего значения (знаковые слова)

Inub'- Нахождение меньшего значения (беззнаковые байты) Команды сравнения

PCMPEQ [B, W, D] - Сравнение на равенство

PCMPGT [B, W, D]-Сравнение на большее значение

Команды логических операций

PAND - Логическое И

PANDN-Логическое НЕ-И

POR- Логическое ИЛИ PXOR - Исключающее ИЛИ

Команды сдвига

PSLL [W, D, Q] -Логический сдвиг влево

PSRL [W, D, Q]-Логический сдвиг вправо

PSRA [W, D] - Арифметический сдвиг вправо

При выполнении ММХ-команд процессор использует для хранения операндов восемь арифметических регистров R7-0 блока FPU (см. рис. 2.4), реализующего обработку чи­сел с плавающей точкой. В этом случае арифметические регистры получают обозначе­ния ММ7-0. Так как ММХ-команды обрабатывают 64-разрядные операнды, то ММХ-регистры имеют разрядность 64 бит, используя только 64 младших разряда в 80-разрядных регистрах FPU (см. рис. 2.22).

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

Почти все мнемокоды ММХ-команд начинаются с префикса Р (Packed), которые указывает, что технология ММХ имеет дело с упакованными данными. За префиксом следует полное или сокращенное название выполняемой операции, например, OR, CMP, SUB. После названия опе­рации может стоять несколько суффиксов, имеющих следующее значение:

US (Unsigned Saturation) - беззнаковое насыщение;

S (Signed saturation) - знаковое насыщение;

В, W, D, Q (Byte, Word, Doubleword, Quadword)- формат используемых упакованных данных.

Если при выполнении ММХ-команды используется арифметика с насыщением, особен­ности которой описаны ниже в данном разделе, то в мнемокоде сначала указывается суф­фикс US или S, определяющий вид насыщения (беззнаковое или знаковое). Мнемокоды ко­манд, не использующих принцип насыщения, не содержат этот суффикс. Далее в мнемокоде указывается суффикс, определяющий формат обрабатываемых данных. Команды, исполь­зующие различные форматы для представления исходных данных и результата, содержат два суффикса, определяющие формат: первый задает формат результата, а второй -фор­мат исходных данных. Например, в команде PACKUSWB название операции задается мне­мокодом PACK (упаковка), первый суффикс US указывает на то, что применяется беззнако­вое насыщение, следующий суффикс ^определяет формат результата в виде упакованных байтов, а последний суффикс S - формат исходных данных в виде упакованных слов.

Рис. 2.21. Формат ММХ-команд

ММХ-команды поддерживают все способы адресации, реализуемые с использованием байтов MODR/M и S\B. Формат ММХ-команды показан на рис. 2.21. Любая ММХ команда на­чинается с байта OFh, затем идет второй байт кода операции OpCode. Для указания исполь­зуемых в команде ММХ-регистров в байте MODR/M в полях REG и R/M (при MOD = 11, регис­тровая адресация) указываются номера используемых ММХ-регистров mmxreg. Присутствие байтов SIB, смещения DISP и непосредственного операнда IMM зависит от выбранного спо­соба адресации. Следует отметить, что ММХ-регистры не могут служить для формирования адреса.

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

Если ММХ-команда использует операнды, размещенные в памяти, то перед ней могут присутствовать префиксы замены сегмента SEG и разрядности адреса AS. Префиксы раз­рядности операнда OS и повторения REP, REPE/REPNE, предшествующие ММХ-команде, игнорируются процессором. Наличие перед ММХ-командой префикса блокировки шины LOCK вызовет исключение типа #UD («недействительный код операции»).

При ошибках обращения к памяти ММХ-команды генерируют исключения #SS, #GP, #PF или #АС, как и остальные команды. Попытка выполнить ММХ-команду, когда в регистре уп­равления CRO установлено значение бита ЕМ = 1, приводит к исключению типа #UD. Эмуля­ция ММХ-команд невозможна. Попытка выполнить ММХ-команду, когда в регистре управле­ния CRO бит TS= 1, приводит к исключению типа #NM («устройство недоступно»). Если при обработке исключения FPU встретится ММХ-команда, то это приведет к исключению типа #MF и/или FERR#.

ММХ-команды могут выполняться в любом режиме работы процессора: реальном, за­щищенном и виртуального 8086.

ММХ-регистры (рис. 2.22) имеют разрядность 64 бита и отображены на поля мантиссы арифметических регистров блока FPU (см. рис. 2.4). При записи нового значения в ММХ-регистр это значение автоматически появляется в поле мантиссы (биты 63-0) соответ­ствующего регистра FPU. При этом в поле порядка (биты 78-64) и знаковый бит (бит 79) записываются единицы. После выполнения любой ММХ-команды в поле ТОР регистра FPSR (см. рис. 2.5), указывающем вершину арифметического стека, записывается значение 000. Любая ММХ-команда (кроме EMMS) заносит во все поля регистра тегов TW значение 00. Для блока FPU это означает, что во всех регистрах находятся допустимые ненулевые чис­ла (все регистры заняты). Команда EMMS устанавливает значения всех полей регистра тегов в 11 (для блока FPU это означает, что все арифметические регистры пусты). Значе­ние регистра TW, содержащего теги, не оказывает никакого влияния на выполнение ММХ-команд. При выполнении ММХ-команд содержимое регистров FPU устанавливается в соот­ветствии с табл. 2.39.

Элементами обрабатываемых данных являются соответственно байты, 16-разрядные слова, 32-разрядные двойные слова или 64-разрядные счетверенные слова. При обработке упакованных данных с помощью ММХ-команд одновременно (параллельно) выполняется одна и та же операция над всеми элементами заданного формата, каждый из которых представля­ет отдельное число (данные). Например, при помощи одной команды можно сложить элемен­ты, хранящиеся в одном ММХ-регистре с элементами в другом ММХ-регистре, получив во­семь отдельных результатов (сумм) в виде упакованных байтов. Одновременно можно обра­ботать либо восемь байт, либо четыре слова, либо два двойных слова, либо одно счетве­ренное слово. Таким образом, реализуется принцип SMD-обработки: одновременное вы­полнение одной команды над многими данными (до восьми 8-разрядных элементов). В па­мяти упакованные данные располагаются так, как это принято в Intel-архитектуре, т. е. млад­ший байт размещается первым - по младшему адресу (рис. 2.24).

Ряд ММХ-команд используют арифметику с насыщением (saturation arithmetic). Если про­изошло переполнение, то в арифметике с насыщением результатом операции будет ближай­шее к полученному значению число, которое умещается в формате, определенном для ре­зультата. Таким образом, результат как бы «насыщается» до максимально возможного зна­чения. Например, результатом сложения двух байтов без знака B8h (184) и E1h (225), при использовании арифметики с насыщением, будет байт FFh (255) (рис. 2.25,а). Если сложить байты со знаком 90h (- 112) и E1h (- 31), то результатом сложения с насыщением будет байт 80h (- 128) (рис. 2.25,6).

Арифметика с насыщением различает знаковые и беззнаковые операнды - от этого зависят пределы насыщения (табл. 2.40). Если результат операции не выходит за пределы насыщения, то арифметика с насыщением дает тот же результат, что и обычная арифметика.

Ряд ММХ-команд выполняет операции обычной арифметики с циклическим переносом (wraparound arithmetic). Мнемокоды таких команд не имеют суффикса S или US.

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