 Отображение ММХ-регистров на регистры блока FPU фиксировано и не зависит от значения поля ТОР регистра состояния FPSR. В обозначении ММn число n указывает на физический номер регистра ММn ® Rn. Напомним, что при выполнении операций FPU в обозначении регистра ST(n) число n указывает относительный номер регистра, а его физический номер определяется значением поля ТОР. Поэтому при значении ТОР = 000 регистр ММ0 отображается на ST(0), MM1 - на ST(1) и т. д.; при ТОР = 010 ММ0 отображается на ST(6), ММ1 - на ST(7), MM2 - на ST(0) и т. д.
Так как блоки ММХ и FPU используют физически одни и те же регистры, то для сохранения и восстановления содержимого ММХ-регистров используются команды FSAVE и FRSTOR.
На рис. 2.23 приведены форматы упакованных данных, обрабатываемых ММХ-командами:
• упакованные байты В7-0 (8 элементов по 8 бит, рис. 2.23,а);
• упакованные слова W3-0 (4 элемента по 16 бит, рис. 2.23,6);
• упакованные двойные слова D1-0 (2 элемента по 32 бита, рис. 2.23,в);
• упакованное счетверенное слово Q (1 элемент, 64 бита, рис. 2.23,г).
а)
63 56
| 56 48
| 47 40
| 39 32
| 31 24
| 23 16
| 15 8
| 7 0
| B7
| В6
| В5
| В4
| ВЗ
| В2
| В1
| В0
| б)
|
|
|
| 63 48
| 47 32
| 31 16
| 15 0
| W3
| W2
| W1
| W0
| в)
63 32
|
31 0
| D1
| D0
| г)
63 0
| Q
|
Рис. 2.23. Форматы упакованные данных: а) ‑ байты, б) ‑ слова, в) – двойные слова, г) ‑ счетверенное слово
Таблица 2.39 Влияние ММХ-команд на содержимое регистров FPU
Тип команды
| Регистр TW
| Поле ТОР
| Поле порядка и знаковый бит ММn (79-64)
| Поле мантиссы ММn (63-0)
| Чтение из регистра ММn
Запись в регистр ММn
EMMS
| Все поля 00 Все поля 00 Все поля 11
| 000
000
000
| Не изменяется
Заполняется единицами
Не изменяется
| Не изменяется
Перезаписывается
Не изменяется
|
Элементами обрабатываемых данных являются соответственно байты, 16-разрядные слова, 32-разрядные двойные слова или 64-разрядные счетверенные слова. При обработке упакованных данных с помощью ММХ-команд одновременно (параллельно) выполняется одна и та же операция над всеми элементами заданного формата, каждый из которых представляет отдельное число (данные). Например, при помощи одной команды можно сложить элементы, хранящиеся в одном ММХ-регистре с элементами в другом ММХ-регистре, получив восемь отдельных результатов (сумм) в виде упакованных байтов. Одновременно можно обработать либо восемь байт, либо четыре слова, либо два двойных слова, либо одно счетверенное слово. Таким образом, реализуется принцип SIMD-обработки: одновременное выполнение одной команды над многими данными (до восьми 8-разрядных элементов). В памяти упакованные данные располагаются так, как это принято в Intel-архитектуре, т. е. младший байт размещается первым - по младшему адресу (рис. 2.24).
|
| 63 56
| 55 48
| 47 40
| 39 32
| 31 24
| 23 16
| 15 8
| 7 0
|
|
|
| В7
| В6
| В5
| В4
| В3
| В2
| В1
| В0
|
|
|
|
| Адрес 2008h
|
| Адрес 2000h
|
Рис. 2.24. Расположение упакованных байтов в памяти по адресу 2000h
Ряд ММХ-команд используют арифметику с насыщением (saturation arithmetic). Если произошло переполнение, то в арифметике с насыщением результатом операции будет ближайшее к полученному значению число, которое умещается в формате, определенном для результата. Таким образом, результат как бы «насыщается» до максимально возможного значения. Например, результатом сложения двух байтов без знака B8h (184) и E1h (225), при использовании арифметики с насыщением, будет байт FFh (255) (рис. 2.25,а). Если сложить байты со знаком 90h (- 112) и E1h (- 31), то результатом сложения с насыщением будет байт 80h (- 128) (рис. 2.25,6).
Арифметика с насыщением различает знаковые и беззнаковые операнды - от этого зависят пределы насыщения (табл. 2.40). Если результат операции не выходит за пределы насыщения, то арифметика с насыщением дает тот же результат, что и обычная арифметика.
а) Числа без знака
| 6) Числа со знаком
| 1
| 0
| 1
| 1
| 1
| 0
| 0
| 0
| B8h
| 1
| 0
| 0
| 1
| 0
| 0
| 0
| 0
| 90h
| +
|
| +
|
| 1
| 1
| 1
| 0
| 0
| 0
| 0
| 1
| Е1h
| 1
| 1
| 1
| 0
| 0
| 0
| 0
| 1
| Е1h
| =
|
| =
|
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| FFh
| 1
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 99h
|
Рис. 2.25. Выполнение операций сложения при использовании арифметики с насыщением
Таблица 2.40 Пределы насыщения
| Нижний предел
| Верхний предел
|
| Со знаком
| Байт
| 80h =-128
| 7Fh =127
| Слово
| 8000h = -32768
| 7FFFh = 32767
| Двойное слово
| 80000000h =-2147483648
| 7FFFFFFFh = 2147483647
|
| Без знака
| Байт
| 00h =0
| FFh = 255
| Слово
| 0000h = 0
| FFFFh = 65535
| Двойное слово
| 00000000h = 0
| FFFFFFFFh = 4294967295
|
Ряд ММХ-команд выполняет операции обычной арифметики с циклическим переносом (wraparound arithmetic). Мнемокоды таких команд не имеют суффикса S или US.
ММХ-команды не изменяют содержимое регистра EFLAGS. При этом переполнение разрядной сетки, возникающее при операциях с упакованными данными, нигде не фиксируется и не вызывает обработки исключения.
|