Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КС-ZAO / Лекции ЦЭВМруский вариант11.doc
Скачиваний:
189
Добавлен:
07.02.2016
Размер:
15.82 Mб
Скачать

§22.1. Регистры

В процессоры, использующие ММХ, добавлено 8 новых 64-разрядных регистров ММО-ММ7. Они могут быть использованы только для выполнения операций с типами данных ММХ. Команды ММХ позволяют задавать в качестве операндов как регистры общего назначения (ЕАХ, ЕВХ, ECX, EDX, ЕВР, ESI, EDI и ESP), так и переменные в памяти, используя для этого стандартную схему адресации, принятую в процессорах х86. Хотя ММХ - регистры и имеют ни с чем не совпадающие названия, на самом деле они являются «псевдонимами» регистров сопроцессора (st0-st7). Это означает, что, изменяя один из регистров ММХ в своей программе, мы в то же время изменяем регистры сопроцессора. Зачем такие сложности? Не проще ли было их сделать «раздельными»? В конце концов, для этого понадобилось бы не так уж и много усилий со стороны разработчиков процессора... Очевидно, это было сделано не только с целью добавить работы программистам. Как всегда, все дело в совместимости. Если бы было сделано так, как подсказывает логика, то пришлось бы переписать операционную систему! Те, кто знаком с работой процессора в защищенном режиме, наверное, уже догадались, о чем идет речь. Конечно же, о мультизадачности. Дело в том, что в многозадачной среде программы должны быть независимы друг от друга. При переключении с одной задачи на другую значения всех регистров «старой» задачи должны быть сохранены. В настоящее время о сохранении регистров микропроцессора заботится сам микропроцессор, а о сохранении регистров сопроцессора заботится операционная система. Так как все регистры ММХ одновременно являют собой регистры FPU (Floating Point Unit сопроцессор), то операционная система, сохраняя регистры FPU, сохраняет и регистры ММХ! Проблема решена, кроме того, она избавила нас от ожидания выхода Windows 95 ММХ. Программист должен заботиться о том, чтобы код, использующий FPU и ММХ, работал корректно. Код одного типа (ММХ или FPU) должен быть по возможности сгруппирован. Для достижения наибольшей производительности в программе не должно быть условных переходов из части кода, использующего FPU, к коду, использующему ММХ. После того как работа с ММХ завершена, нужно очистить регистры mmregO-mmreg7. Это делается для того, чтобы в последующем сопроцессор не столкнулся с «грязными» регистрами непонятного формата. Для этого используется новая инструкция EMMS, которая помечает все регистры FPU как «пустые».

§22.2. Префиксы

Всем инструкциям х86 ставится в соответствие число - код операции. Длина кода операции один-два байта. Ему может предшествовать байт SIB (Scale-масштаб, Index-индекс, Base-база), определяющий полный режим адресации. В процессоре х86 перед инструкцией также возможно присутствие префиксов, несколько модифицирующих «смысл» команды (префикс замены сегмента, префикс команды). Инструкции ММХ формируются точно так же, как и «старые» команды.

Рис.22.1. Возможные варианты интерпритации регистров.

§22.3.Распаровка (paring).

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

Две инструкции, использующие блок сдвигов MMX (инструкции упаковки/распаковки и сдвига), не могут выполняться одновременно.

Две инструкции, использующие блок умножения MMX (инструкции типа pmul, pmulh, pmadd), не могут выполняться в паре.

  • Инструкции MMX, которые обращаются к памяти, могут выполняться только на и-конвейере,

Целевой регистр ММХ-инструкции, попавшей в u-конвейер, не должен совпадать с регистром-источником инструкции, попавшей на v-конвейер (тест на зависимость). То есть пара инструкций:

paddb mmreg2, mmregl paddb mmregЗ, mmreg2

не может выполняться одновременно,

Инструкция EMMS не паруется.

Если установлены CRO.TS или CRO.EM, то ММХ - инструкции не могут быть выполнены на v-конвейере.

Соседние файлы в папке КС-ZAO