
Форматы данных
Сопроцессор расширяет номенклатуру форматов данных, с которыми работает основной процессор. В этом нет ничего удивительного, так как формат данных любого устройства в существенной мере отражает специфику его работы. Сопроцессор специально разрабатывался для вычислений с плавающей точкой. Но сопроцессор может работать и с целыми числами, хотя и менее эффективно. Перечислим форматы данных, с которыми работает сопроцессор:
-
двоичные целые числа в трех форматах — 16, 32 и 64 бита;
-
упакованные целые десятичные (BCD) числа — длина максимального числа составляет 18 упакованных десятичных цифр (9 байтов);
-
вещественные числа в трех форматах — коротком (32 бита), длинном (64 бита), расширенном (80 битов).
Кроме этих основных форматов, сопроцессор поддерживает специальные численные значения, к которым относятся:
-
денормализованные вещественные числа — это числа, меньшие минимального нормализованного числа (см. ниже) для каждого вещественного формата, поддерживаемого сопроцессором;
-
нуль;
-
положительные и отрицательные значения бесконечности;
-
нечисла;
-
неопределенности и неподдерживаемые форматы.
Важно отметить, что в самом сопроцессоре числа в этих форматах имеют одинаковое внутреннее представление — расширенный формат вещественного числа. Это один из форматов представления вещественных чисел, который точно соответствует формату регистров RO... R7 стека сопроцессора Таким образом, даже если вы используете команды сопроцессора с целочисленными операндами, то после загрузки в сопроцессор операндов целого типа они автоматически преобразуются в формат расширенного вещественного числа.
Двоичные целые числа
Сопроцессор работает с тремя типами целых чисел (рис. 17.5).
Выбирая формат данных, с которыми будет работать ваша программа, помните, что сопроцессор поддерживает операции с целыми числами, но работа с ними осуществляется неэффективно. Причина в том, что обработка сопроцессором целочисленных данных будет замедлена из-за дополнительного преобразования целых чисел в их внутреннее представление в виде эквивалентного вещественного числа расширенного формата.
Упакованные целые десятичные числа
Сопроцессор поддерживает один формат упакованных целых десятичных чисел, или BCD-чисел . Как вы помните, для описания упакованного десятичного числа используется директива DT Данная директива позволяет описать 20 цифр в упакованном десятичном числе (по две в каждом байте). Из-за того что максимальная длина упакованного десятичного числа в сопроцессоре составляет только 9 байт, в регистры RO...R7 можно поместить только 18 упакован-
ных десятичных цифр. Старший десятый байт игнорируется. Самый старший бит этого байта используется для хранения знака числа. Упакованные десятичные числа также представляются в стеке сопроцессора в расширенном формате.
Вещественные числа
Основной тип данных, с которыми работает сопроцессор, — вещественный. Данные этого типа описываются тремя форматами: коротким, длинным и расширенным
Для представления вещественного числа используется следующая формула:
А = (±М) *N+-(p)
Здесь:
-
М — мантисса числа А (мантисса должна удовлетворять условию | М \ < 1);
-
N— основание системы счисления, представленное целым положительным числом;
-
р — порядок числа, показывающий истинное положение точки в разрядах мантиссы (по этой причине вещественные числа имеют еще название чисел с плавающей точкой, так как ее положение в разрядах мантиссы зависит от значения порядка).
Основание системы счисления N=2.
Мантисса М должна быть представлена в нормализованном виде. Нормализация может отличаться для разных типов процессоров. Для ЕС ЭВМ, например, мантисса нормализованного числа должна удовлетворять условию 1/N< \М\ < 1. Это означает, что старший бит представления должен быть единичным. Для случая, когда N= 2, это соответствует отношению 1/2 < |М| < 1
Для архитектуры сопроцессора IA-32 нормализованным является число несколько иного вида:
Л = (-1)s*Nq*M
Здесь:
-
s — значение знакового разряда (0 — число больше нуля, 1 — число меньше нуля);
-
q — порядок числа, его назначение аналогично назначению порядкар в формуле , но как поясняется далее, р и q — не одно и тоже.
В этой формуле знак имеют и порядок вещественного числа, и его мантисса.
В сопроцессоре Intel на аппаратном уровне принято соглашение, что порядок р определяется в формате вещественного числа особым значением q, называемым характеристикой. Величина q связана с порядком р посредством следующей формулы и представляет собой некоторую константу (условно назовем ее фиксированным смещением):
q=p + фиксированное смещение.
Для каждого из трех возможных форматов вещественных чисел смещение q имеет разное, но фиксированное для конкретного формата значение, которое зависит от количества разрядов, отводимых под характеристику
Так как нормализованное вещественное число всегда имеет целую единичную часть (исключая перечисленные ранее специальные численные значения), то при его представлении в памяти появляется возможность считать первый разряд вещественного числа единичным по умолчанию и учитывать его наличие только на аппаратном уровне. Это дает возможность увеличить диапазон представимых чисел, так как появляется лишний разряд, пригодный для представления мантиссы числа. Но это справедливо только для короткого и длинного форматов вещественных чисел. Расширенный формат как внутренний формат представления числа
любого типа в сопроцессоре содержит целую единичную часть вещественного
в явном виде.