Формат Короткий Длинный Расширенный
Длина числа (биты) 32 64 80
Размерность мантиссы М 23 52 64
Диапазон значений 10-38...1038 10-308…10308 10-4932…104932
Размерность
характеристики q 8 11 15
Значение фиксированного
смещения +127 (7F) +1023 (3FF) +16383 (3FFF)
0111 1111 0011 1111 1111 0011 1111 1111 1111
Диапазон характеристик q 0...255 0...2047 0...32767
Диапазон порядков р______-126...+ 127 -1022...+ 1023 -16382...+ 16383
В табл. 19.2 показаны диапазоны значений характеристик q и соответствующих им истинных порядков р вещественных чисел. Отметим, что нулевому порядку вещественного числа в коротком формате соответствует значение характеристики равное 127, которому в двоичном представлении соответствует значение 0111 1111. Отрицательному порядку р, например, -1, будет соответствовать характеристика q= -1+127=126, В двоичном виде ей соответствует значение 0111 1110. Положительному порядку р, например, +1, будет соответствовать характеристика q=l + 127=128, в двоичном виде ей соответствует значение 1000 0000. То есть, все положительные порядки имеют в двоичном представлении характеристики старший бит равный единице, а отрицательные порядки — нет. Не кажется ли вам, что мы нашли место, где спрятан знак порядка? В старшем бите характеристики.
Так как нормализованное вещественное число всегда имеет целую единичную часть (исключая представление перечисленных выше специальных численных значений), то при его представлении в памяти появляется возможность считать первый разряд вещественного числа единичным по умолчанию и учитывать его наличие только па аппаратном уровне. Это дает возможность увеличить диапазон представимых чисел, так как появляется лишний разряд, который можно использовать для представления мантиссы числа. Но это справедливо только для
короткого и длинного форматов вещественных чисел. Расширенный формат, как внутренний формат представления числа любого типа в сопроцессоре, содержит целую единичную часть вещественного в явном виде.
Короткое вещественное число длиной в 32 разряда определяется директивой dd. При этом обязательным в записи числа является наличие десятичной точки, даже если оно не имеет дробной части. Для транслятора десятичная точка является указанием, что число нужно представить в виде числа с плавающей точкой в коротком формате (рис. 19.7).
Это же касается длинного и расширенного форматов представления вещественных чисел, определяемых директивами dq и dt.
Другой способ задания вещественного числа директивами dd, dq и dt — экспоненциальная форма с использованием символа «е». Вид вещественного числа в поле операндов директив dd, dq и dt можно представить синтаксической диаграммой (рис. 19.8).
Чтобы окончательно разобраться с тонкостями представления вещественных чисел различных форматов в памяти, рассмотрим несколько примеров.
Пример 19.1. Определение вещественного числа короткого формата
Определим в программе вещественное число 45,56 в коротком формате:
dd 45.56
или
dd 45.56е0
или
dd 0.4556е2
В памяти это число будет выглядеть так:
71 3d 36 42
Учитывая, что в архитектуре Intel принят перевернутый порядок следования байт в памяти в соответствии с принципом «младший байт по младшему адресу», истинное представление числа 45,56 будет следующим: 42 36 3d 71 В двоичном представлении в памяти это будет иметь вид, как на рис. 19.9.
На рис. 19.9 видно, что старшая единица мантиссы, при представлении в памяти, отсутствует.
Пример 19.2. Определение вещественного числа длинного формата Определим в программе вещественное число 45,56 в длинном формате:
dq 45.56
или
dq 45.56е0
В памяти это число будет выглядеть так:
47 e1 7а 14 ае с7 46 40
Перевернув его, получим истинное значение:
40 46 с7 ае 14 7а el 47
Пример 19.3.Определение вещественного числа расширенного формата
Определим в программе вещественное число 45,56 в расширенном формате представления:
dt 45.56
В памяти это число будет выглядеть так:
71 3d 0а d7 а3 70 3d b6 04 40
Перевернув его, получим истинное значение в памяти:
40 04 b6 3d 70 a3 d7 0a 3d 71
А вот его двоичное представление полезно рассмотреть подробнее (рис. 19.10):
0100 0000 0000 0100 1011 0110 0011 1101 0111 0000 1010 . 0011 1101 0111 0000 1010 11100001 0111 0001
Данное число имеет следующее назначение битов:
0 — знак «+»;
100 0000 0000 0100 - характеристика q=l,6388;
1011 01 — целая часть числа (45);
10 0011 1101 0111 0000 1010 ООН 1101 0111 0000
1010 1110 0001 0111 0001 - дробная часть числа (0,56).
Как видно, в мантиссе явно присутствует старшая единица, чего не было в коротком и длинном форматах представления вещественного числа.
Дальнейшее обсуждение требует четкого понимания того, каким образом из дробного десятичного числа получается его расширенное вещественное представление. Рассмотрим этот процесс по шагам.
1. Переведем десятичную дробь 45,56 в двоичное представление. В результате получим эквивалентное двоичное представление: 45,56 =101101.1000111101011100001010001
2. Нормализуем число. Для этого перекосим точку влево, до тех пор, пока в целой части числа не останется одна двоичная единица. Число переносов влево (или вправо, если десятичное число было меньше единицы) будет являться порядком числа. Но будьте внимательны — в поле характеристики заносится смещенное значение порядка (табл. 19.2). Таким образом, после перемещения точки получаем значение порядка равное 5. Соответственно, характеристика будет выглядеть так: 5+16383=1638810=1000000000001002.
Сформированный результат в виде вещественного числа в расширенном формате состоит из трех компонент:
знака — 0;
характеристики - 100000000000100;
мантиссы - 1011 ОНО ООН 1101 0111 0000 1010 ООН
1101 0111 0000 1010 1110 0001 0111 0001
Ниже вы научитесь пользоваться отладчиком для работы с сопроцессором и получите возможность просматривать содержимое регистров стека. При этом содержимое регистров стека будет изображаться в шестнадцатеричном виде: 40 04 b6 3d 70 а3 d7 0a 3d 71. Видно, что он полностью совпадает с приведенным выше представлением числа в памяти, если оно описано в директиве dt. В качестве итога еще раз подчеркнем, что расширенный формат представления вещественного числа является единственным форматом представления чисел в регистрах сопроцессора. Само преобразование производится автоматически при загрузке числа в стек сопроцессора. Исключение составляет расширенный формат.
Специальные численные значения
Несмотря на большой диапазон вещественных значений, представимых в регистрах стека сопроцессора, понятно, что бесконечное количество их значении находится за рамками этого диапазона. Для того чтобы иметь возможность реагировать на вычислительные ситуации, в которых возникают такие значения, в сопроцессоре и предусмотрены специальные комбинации бит, называемые специальными численными значениями. При необходимости, программист может сам кодировать специальные численные значения. Это возможно потому, что вещественные числа, описанные директивой dt, соответствующие команды сопроцессора загружают без всяких преобразований.
Денормализованные вещественные числа
Денормализовапные вещественное числа — это числа, которые меньше минимального нормализованного числа для каждого вещественного формата. Поясним природу денормализованных чисел с использованием числовой шкалы. Например, для вещественного числа в расширенном формате диапазон представимых значений в сопроцессоре показан на числовой шкале рис. 19.11.
Нормализованные вещественные числа в расширенном формате
.О____________________| ————>
<—————————— 3.37- 10-4932 Денормализованные числа
Рис. 19.11.Положение денормализованных вещественных чисел на числовой шкале
Как нам уже известно, сопроцессор хранит числа и нормализованном виде. По мере приближения чисел к нулю, ему все труднее «вытягивать» их значения к нормализованному виду, то есть к такому виду, чтобы первой значащей цифрой мантиссы была единица. Размерность разрядной сетки, отведенной в форматах вещественных чисел сопроцессора, для представления характеристики не безгранична. Поэтому при определенных значениях числа в расширенном формате значение характеристики становится равным нулю (рис. 19.11). Но на самом деле, число отлично от нуля, так как это все же не настоящий численный нуль. Таким образом, между истинным нулем и минимально представимым нормализованным числом есть еще бесконечное количество очень маленьких чисел. Это и есть так называемые денормализованные числа. Они имеют нулевой порядок и ненулевую мантиссу. Диапазон представимых в сопроцессоре денормализованных чисел не безграничен, так как количество разрядов мантиссы ограниченно (рис. 19.12):
Рис. 19.12.Диапазон представимых в сопроцессоре денормализованных чисел
Вопрос о том, каким образом сопроцессор реагирует на появление денормализованных значений, будет рассмотрен в конце урока. При формировании денормализованного значения в некотором регистре стека, в соответствующем этому регистру теге регистра twr формируется специальное значение (10).
Нуль
Значение нуля также относят к специальным численным значениям. Это делается из-за того, что это значение особо выделяется среди корректных вещественных значений, формируемых как результат работы некоторой команды. Более того, нуль может формироваться как реакция сопроцессора на определенную вычислительную ситуацию.
Значение истинного нуля может иметь знак (рис. 19.13), что, впрочем, не влияет на его восприятие командами сопроцессора. Если необходимо определить знак нуля, то используйте команду fxam. В результате работы этой команды в бит c1 регистра swr заносится знак операнда. При загрузке нуля в регистр стека, в соответствующем теге регистра twr формируется специальное значение (01).
Значение нуля может быть сформировано в результате возникновения ситуации анти переполнения (см. ниже), а также при работе команд с нулевыми операндами.
Дата добавления: 2015-04-15; просмотров: 3182;