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

Команды преобразования формата чисел.

CVTPI2PS - Преобразование двойных слов со знаком в числа одинарной точности. CVTPS2PI - Преобразование чисел одинарной точности в двойные слова со знаком

(округление).

CVTSI2SS - Преобразование двойного слова со знаком в число одинарной точности. CVTSS2SI - Преобразование числа одинарной точности в двойное слово со знаком

(округление).

CVTTPS2PI - Преобразование чисел одинарной точности в двойные слова со знаком

(отбрасывание дробной части).

CVTTSS2SI - Преобразование числа одинарной точности в двойное слово со знаком

(отбрасывание дробной части).

Команды управления

FXRSTOR-Загрузка содержимого регистров FPU/MMX и SSE

FXSAVE-Сохранение содержимого регистров FPU/MMX и SSE

LDMXCSR-Загрузка содержимого регистра MXCSR

STMXCSR - Сохранение содержимого регистра MXCSR

Команды передачи данных с управлением кэшированием

MASKMOVQ - Выборочная запись в память байтов из ММХ-регистра MOVNTPS-Запись в память содержимого SSE-регистра MOVNTQ - Запись в память содержимого ММХ-регистра PREFETCHTO -Предварительная выборка в кэш-память уровня L1 и L2 PREFETCHT1 - Предварительная выборка в кэш-память уровня L2 PREFETCHT2 - Предварительная выборка в кэш-память уровня L2 PREFETCHNTA-Предварительная выборка в кэш-память уровня L1 SFENCE -Упорядочивание записи в памяти.

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

Команды SSE обрабатывают данные в формате с плавающей точкой одинарной точнос­ти (ОТ, рис. 2.16, д). Блок SSE содержит восемь 128-разрядных регистров ХММО-ХММ7 (рис. 2.32). В каждом SSE-регистре может храниться четыре упакованных числа в формате с плавающей точкой одинарной точности (рис. 2.33). Такой тип данных называется пакетом одинарной точности. Элементами F3-FO пакета являются 32-разрядные числа ОТ, которые содержат знаковый бит S, 8-разрядный смещенный порядок Е и 23-разрядную мантиссу М. При выполнении SSE-команд производится обработка каждого из элементов аналогично тому, как это выполняется блоком ММХ с упакованными числами. Большинство SSE-команд спо­собны обрабатывать как весь пакет (такие команды имеют суффикс PS - Packed Single), так и один младший элемент пакета (такие команды имеют суффикс SS - Scalar Single).

В памяти пакет одинарной точности располагается так, как это принято в Intel-архитекту­ре, т. е. младший байт размещается по меньшему адресу (рис. 2.33). Когда один из 128-раз­рядных операндов (пакет) находится в памяти, то он должен быть выровнен по 128-разряд­ной границе, иначе при выполнении SSE-команды произойдет исключение типа #GP «нару­шение общей защиты». Только выполнение команды MOVUPS не вызывает исключения в данном случае. Операнды меньших размеров (64 или 32 разряда) могут быть невыравнены.

При выполнении SSE-команд могут возникать такие же типы ошибок (исключитель­ных случаев) #1, #D, #Z, #O, #U, #P, как и при работе блока FPU. В этом случае в регистре управления-состояния MXCSR блока SSE соответствующий признак IE, DE, ZE, OE, UE или РЕ принимает значение «1». При установке этого значения признака ошибки реализу­ется исключение типа #ХМ «ошибка SSE», если в регистре управления CR4 установлено значение бита OSXMMEXCPT = 1 (см. рис. 2.16, в). Для обслуживания исключения про­цессор вызывает необходимую подпрограмму. Если в регистре CR4 значение бита OSXMMEXCPT = 0, то при установке какого-либо из признаков ошибки реализуется ис­ключение #UD «недействительный код операции». В табл. 2.45 приведена информация о том, какие ошибки могут возникать при выполнении SSE-команд (команды, не указан­ные в данной таблице, не вызывают появления таких ошибок). Необходимо отметить, что блок SSE не фиксирует, обработка какого из элементов пакета вызвало появление ошибки. Эту задачу должна выполнять подпрограмма обслуживания исключения.

Реализация исключения может быть замаскирована установкой в единичное значение соответствующего бита маски IM, DM, ZM, ОМ, UM или РМ в регистре MXCSR (рис. 2.34). В этом случае при возникновении ошибки (установке какого-либо из признаков IE, DE, ZE, OE, UE, РЕ в «1») процессор продолжает выполнение программы без реализации исклю­чения, а результат операции принимает такое же значение, как при маскировании анало­гичных исключений для операций FPU.

Формат содержимого SSE-регистра управления-состояния MXCSR показан на рис. 2.34. Отметим, что большинство битов этого регистра имеют такое же назначение, как соответству­ющие биты в регистрах FPCR, FPSR блока FPU (см. рис. 2.5). Поле RC в регистре MXCSR определяет правила округления результата в соответствии с табл. 2.1. Бит FZ в этом регистре управляет реакцией блока SSE на антипереполнение. Согласно стандарту IEEE, если произошло антипереполнение (признак UE = 1), а соответствующее исключение замаскировано (бит UM = 1), то процессор выдает в качестве результата денормализованное число. Установ­ка бита FZ = 1 позволяет отойти от стандарта IEEE. При FZ = 1 результатом антипереполнения будет нуль соответствующего знака (устанавливаются признаки ошибок UE = РЕ = 1). Если установлено значение бита маски UM = 0 (ошибка #U не маскирована), то независимо от значе­ния бита FZ при установке признака антипереполнения UE = 1 реализуется исключение #ХМ.

Если в регистре управления CRO установлено значение бита ЕМ = 1, то попытка вы­полнить SSE-команду приведет к исключению #UD. Если в регистре управления CR4 зна­чение бита OSFXSR = 0 (это означает, что операционная система не поддерживает со­хранение и восстановление содержимого SSE-регистров при переключении задач), то попытка выполнить SSE-команду приведет к исключению #UD. Если в регистре CRO зна­чение бита TS = 1, то попытка выполнить SSE-команду приведет к исключению #NM.

Формат SSE-команд аналогичен формату ММХ-команд. SSE-команды поддерживают все возможные способы адресации с использованием байтов MODR/M и SIB. Префиксы влияют на выполнение этих команд таким же образом, как на выполнение ММХ-команд (см. табл. 2.39). Для команд, которые имеют две формы (пакетную и скалярную), присут­ствие префикса REP указывает на скалярную форму команды. Если префикс REP отсут­ствует, то команда выполняет пакетную обработку данных.