Форматы данных FPU
Сопроцессор оперирует данными в формате с плавающей точкой, который позволяет представлять существенно больше действительных чисел, чем целочисленное АЛУ центрального процессора. Арифметические операции (здесь под арифметическими понимаются операции, изменяющие значения операндов, а также операции сравнения) в FPU выполняются над 80-битными числами, преде га пленными во внутреннем формате расширенной точности (рис. 3). Формат позволяет представлять следующие категории чисел:
• нули (положительный и отрицательный) — оба значения эквивалентны;
• денормализованные конечные числа (положительные и отрицательные);
• нормализованные конечные числа (положительные и отрицательные);
• бесконечность (положительная и отрицательная).
Числа представляются в аффинном пространстве. Это означает, что
меньше любого конечного числа, а больше любого конечного числа.Рис. 3. Формат внутреннего представления чисел.
Бит Sign определяет знак числа: 0 — положительное, 1 — отрицательное число. Поле Exponent хранит смещенное значение двоичного порядка числа (biased exponent). Смещение позволяет все значения порядков допустимого диапазона чисел представлять положительным числом, при этом значению 000...000 соответствуют минимальные (по модулю) числа, значению 111...110 — максимальные допустимые числа, а значению 111...111 — бесконечно большие числа. Нуль может быть положительным или отрицательным, в зависимости от бита знака, при этом и мантисса, и порядок у него нулевые. Мантисса (Signficand) нормализованного числа, отличного от нуля, всегда имеет вид "1,ххх....ххх", то есть представляет величину, не меньшую единицы. У бесконечностей (тоже положительной и отрицательной) мантисса нулевая. Денормализованные числа имеют нулевой порядок (смещенное значение) и мантиссу вида "0,ххх...ххх" (отличную от нуля). Денормализованные числа — это слишком малые величины, которые представляются и обрабатываются с точностью меньшей, чем позволяет разрядность регистров сопроцессора.
Кроме вещественных чисел (конечных нормализованных и денормализованных, нулей и бесконечностей) регистры сопроцессора могут содержать не-числа NaN (Not a Number) четырех видов.
• -SNaN и +SNaN — порядок 111...111, мантисса 1,0ххх...ххх (ненулевая). Эти "сигнализирующие" не-числа (signaling NaN) вызывают исключения сопроцессора, если с ними пытаются выполнять арифметические действия.
• -QNaN и +QNaN — порядок 111...111, мантисса 1,1ххх...ххх (ненулевая). Эти "тихие" не-числа (quiet NaN) не вызывают исключений при арифметических операциях.
Внешние операнды могут быть представлены в одном из форматов, приведенных на рис. 2. Характеристики форматов чисел, поддерживаемых сопроцессором, приведены в таблице. При их загрузке в FPU и сохранении результатов преобразования форматов во внутренний и обратно выполняются автоматически. Во внешних представлениях вещественных чисел целая часть мантиссы всегда подразумевается равной единице. В расширенном формате целая часть задается явно (бит 63), она имеет нулевое значение только при представлении нулей и денормализованных чисел. Смещение порядка составляет 127 для одиночного, 1023 для двойного и 16 383 для расширенного вещественного форматов. Форматы вещественных чисел представляют только множество дискретных значений множества чисел, расположенных на непрерывной бесконечной числовой оси. Диапазон и плотность значений зависят от выбранного формата представления. Заметим, что не все десятичные дроби могут быть представлены точно в двоичном коде. Так, например, дробь 1/10 не имеет точного двоичного представления (аналогично тому, что 1/3 = 0,33333(3)).
Таблица. Форматы чисел, поддерживаемых сопроцессором
Тип | Длина, бит | Точность | Диапазон нормализованных значений | |||
двоичная | десятичная | Двоичный | десятичный | |||
Вещественные числа | ||||||
Одиночные (single) | 32 | 24 | 7 | |||
Двойные (double) | 64 | 53 | 15-16 | |||
Рассширенные (extended) | 80 | 64 | 19 | |||
Двоичные целые | ||||||
Слова (word) | 16 | 15 | 4 | |||
Короткие (short) | 32 | 31 | 9 | |||
Длинные (long) | 64 | 63 | 18 | |||
Упакованные двоично-десятичные | ||||||
BCD | 80 | — | 18 | — |
Сопроцессор контролирует числа, участвующие в арифметических операциях. При загрузке денормализованного операнда в регистр FPU и попытке выполнения арифметических инструкций хотя бы с одним денормализованным операндом сопроцессор фиксирует условие исключения #D. Денормализованные числа могут появляться при выполнении вычислений, в этом случае сопроцессор фиксирует факт исчезновения значащих разрядов и генерирует исключение #U. При попытке выполнения арифметических операций с нечислами, а также с недопустимыми значениями операндов (например, извлечение квадратного корня из отрицательного числа) вырабатывается исключение #I. При переполнении вырабатывается исключение #O, при попытке деления на нуль ненулевого операнда вырабатывается исключение #Z.
Если результат вычисления невозможно представить точно в выбранном формате, сопроцессор выполняет округление результата в сторону соседнего допустимого значения. Правила округления программируются. Вместо автоматического выполнения округления сопроцессор может вырабатывать исключение #Р.
3. Технология MMX
Технология ММХ ориентирована на приложения мультимедиа, 2D/3D-графикy и коммуникации. Это расширение базовой архитектуры появилось только после выхода второго поколения процессоров Pentium. Основная идея ММХ заключается в одновременной обработке нескольких элементов данных за одну инструкцию — так называемая технология SIMD (Single Instruction — Multiple Data). Расширение ММХ использует новые типы упакованных 64-битных целочисленных данных:
• упакованные байты (Packed byte) — восемь байт;
• упакованные слова (Packed word) — четыре слова;
• упакованные двойные слова (Packed doubleword) — два двойных слова;
• учетверенное слово (Quadword) — одно слово.
Эти типы данных могут специальным образом обрабатываться в 64-битных регистрах ММХ0-ММХ7, представляющих собой младшие биты стека 80-битных регистров FPU. Каждая инструкция ММХ выполняет действие сразу над всем комплектом операндов (8, 4, 2 или 1), размещенных в адресуемых регистрах. Как и регистры FPU, эти регистры ММХ не могут использоваться для адресации памяти. Совпадение регистров ММХ и FPU накладывает ограничения на чередование кодов FPU и ММХ — забота об этом лежит на программисте приложений с ММХ.