Внутренние регистры: Регистры MMX и 3DNow!

Печать
Программирование - Архитектура и система команд микропроцессоров x86

 

Технологии MMX фирмы Intel и 3DNow! фирмы AMD построены на основе структурного расширения процессора. По сути технология 3DNow! является расширением технологии MMX. Обе они включают:

  • дополнительные наборы команд для обработки мультимедийной информации,
  • дополнительные режимы работы процессора при обработке прерываний/исключений/особых ситуаций,
  • отладке и мониторинге производительности программ,
  • дополнительные логические регистры, отображаемые на регистры FPU.

MMX-регистры (они же 3DNow!-регистры) — это восемь 64-разрядных регистров (MM0 … MM7), которые отображены на младшие 64 бита регистров общего назначения FPU (R0 … R7). То есть регистры MMX по сути являются логическими регистрами, физически совмещенными с регистрами R0 … R7. Это значит, что при записи информации в MMX-регистр, записываемое значение автоматически появляется в младших битах соотвествующего регистра FPU, и наоборот, при записи в регистровый стек FPU значения младших 64 бит записываемой величины окажутся в соответствующем MMX-регистре (см. рис. 1.20.).

 

Отображение MMX-регистров на регистры FPU

Рис. 1.20. Отображение MMX-регистров на регистры FPU

 

Поскольку регистры FPU (R0 … R7) организуют так называемый регистровый стек (ST0 … ST7), то в зависимости от текущего значения поля TOP регистра состояния FPU (SW) будет меняться соответствие регистров стека и MMX-регистров.

Например, при SW.TOP = 0:

  • MM0 отображается на ST0,
  • MM1 — на ST1 и т.д.;

при SW.TOP = 2:

  • MM0 отображается на ST6,
  • MM1 — на ST7,
  • MM2 — на ST0 и т.д.

FPU располагает своим механизмом отслеживания типов данных, находящихся в регистрах R0 … R7. Это поля тэгов, поставленные в соответствие каждому регистру. Однако технологии MMX и 3DNow! вводят новые типы данных, которые не могут быть корректно обработаны FPU. Поэтому при выполнении команд MMX и 3DNow! (кроме EMMS, FEMMS, PREFETCH) все поля тэгов устанавливаются в 00b (действительный). (Команды EMMS и FEMMS заполняют все поля тэгов значениями 11b (пустой). Команда PREFETCH не изменяет значения тэгов.)

 

Таблица 1.3. Влияние MMX- и 3DNow!- команд на контекст FPU

Тип команды

Поля тэгов

SW.TOP

Поле порядка и бит знака Rn

Поле мантиссы Rn

Чтение из MMX-регистра MMn

00b

000b

без изменений

без изменений

Запись в MMX-регистр MMn

00b

000b

заполняется единицами

перезаписы-вается

EMMS, FEMMS

11b

000b

без изменений

без изменений

Так как команды MMX3DNow! и команды FPU используют физически одни и те же регистры, для сохранения и восстановления контекста MMX, 3DNow! используются команды FPU — FSAVE и FRSTOR.