¦ ¦ ¦ ¦
80-битовый ¦ ¦ ¦ ¦
вещественный¦ 64 ¦ 15 ¦ 3FFF(16383) ¦Определена
64-битовый ¦ ¦ ¦ ¦
вещественный¦ 52 ¦ 11 ¦ 3FF(1023) ¦Предполагается
32-битовый ¦ ¦ ¦ ¦
вещественный¦ 23 ¦ 8 ¦ 7F(127) ¦Предполагается
ДДДДДДДДДДДДБДДДДДДДДБДДДДДДДДДДДБДДДДДДДДДДДДДБДДДДДДДДДДДДДДДД
Кроме размера короткий и длинный вещественные форматы отлича-
ются от 80-битового вещественного тем, что самый значимый бит ре-
- 10-6 -
ально не появляется! Из-за своего ограниченного пространства эти
форматы всегда предполагают 1 в самой левой позиции, но не хранят
1, таким образом они приобретают позицию для другой цифры.
Целое слово, короткий целый и длинный целый
форматы данных
Формы целого хорошо известны. Эти формы используются цент-
ральным процессором для хранения дополнения двоичных целых чисел
(хотя центральный процессор не может применять формат 8-битового
длинного целого). Эти числа имеют следующие диапазоны:
64-битовый:
от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807
32-битовый:
от -2,147,483,648 до 2,147,483,647
16-битовый:
от -32,768 до 32,767
Эти числа отличаются от вещественных чисел тем, что любое
значение, загруженное из этой формы, является точным представле-
нием числа. Помните также, что хотя эти числа имеют знак и самый
значимый бит отражает знак числа, они все же выражают двоичные
дополнения чисел.
Форматы упакованного двоично-десятичного кода (BCD)
Последней формой представления данных в NPX является упако-
ванный BCD (двоично-десятичный код). Что такое упакованный BCD? В
системе счисления двоично-десятичного кода каждый 4-битовый полу-
байт представляет собой отдельную цифру, которая может иметь зна-
чение между 0 и 9. Все число представляет собой только строку
цифр. Таким образом, число больше похоже на строку символов
ASCII. На рисунке 10-4 показано представление числа 256 в нор-
мальной двоичной форме и форме двоично-десятичного кода. Неболь-
шие вычисления проводятся в десятичной системе счисления.
ЪДДВДДДДДДВДДДДД¬ ЪДДВДДДДДДВДДДДД¬
¦01¦ 0000 ¦ 0000¦ ¦01¦ 0000 ¦ 0000¦
АДДБДДДДДДБДДДДДЩ АДДБДДДДДДБДДДДДЩ
9-8 7...4 3...0 9-8 7...4 3...0
1 0 0 2 5 6
Двоичный:1x256 + 0x16 + 0x1 = 256 2x256 + 5x16 + 6x1 = 598
Двоично-
десятич.:1x100 + 0x10 + 0x1 = 100 2x100 + 5x10 + 6x1 = 256
Рис.10-4. Представление числа в двоично-десятичном коде
Из рисунка 10-4 видно, что мы пишем числа в двоично-десятич-
ном коде, как если бы они были шестнадцатиричными (одна цифра на
каждый 4-битовый полубайт), но интерпретируем их как десятичные.
Но почему эта форма данных так важна? Потому, что она служит для
преобразований между ASCII и упакованным BCD. Рисунок 10-5 де-
монстрирует, что для перехода из BCD в ASCII Вы должны только
- 10-7 -
распаковать цифры (одну на полубайт) в байты и прибавить шестнад-
цатиричное 30 для формирования символов ASCII от 0 до 9 (шестнад-
цатиричные с 30 по 39). Для выполнения обратного преобразования
надо вычесть 30h из каждого символа и упаковать их, по два на
байт.
ЪДДВДДДДДДВДДДДД¬
¦01¦ 0000 ¦ 0000¦
АДДБДДДДДДБДДДДДЩ
9-8 7...4 3...0
Двоично-десятичный
формат 2 5 6
¦ ¦ ¦
¦ ¦ ¦
ЪДДДДДДДДДДЩ ¦ АДДДДДДДДДД¬
¦ ¦ ¦
ЪДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДД¬
¦ 0011 0010 ¦ 0011 0101 ¦ 0011 0110 ¦
АДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДЩ
7.......0 7........0 7........0
¦ ¦ ¦
32(Hex) 35(Hex) 36(Hex)
¦ ¦ ¦
АДДДДДДД¬ ¦ ЪДДДДДДДДДЩ
Формат ASCII
Рис.10-5. Преобразования между числами ASCII и BCD
Эта форма данных применяется NPX только для загрузки и хране-
ния чисел. Ни одна из арифметических команд не может использовать
форму упакованного BCD. Даже с учетом этого ограничения команды
загрузки и хранения упакованного BCD являются двумя наиболее по-
лезными командами NPX. Это происходит ввиду того, что способность
вычислять ничего не стоит без возможности передать результаты вы-
числений пользователю, а большинство людей применяют для записи
чисел с плавающей запятой десятичную систему счисления.
NPX обеспечивает возможность преобразования десятичных чисел
в двоичные и обратно. Программист должен только следить за преоб-
разованиями между строками ASCII и упакованным BCD, а также за
правильным расположением десятичной точки (мы рассмотрим это в
разделе, посвященном преобразованию между десятичными числами и
двоичными числами с плавающей запятой). NPX следит за всем ос-
тальным.
Коротко о типах данных
В таблице 10-2 мы рассмотрели размер чисел, которые могут
быть представлены каждым типом данных вместе с приблизительным
десятичным разрешением (количество значащих цифр), поддерживающим
каждый тип данных. Для реального использования мы можем пореко-
мендовать следующее: Использовать упакованный BCD для перехода от
чисел ASCII к вещественным числам с плавающей запятой и обратно.
Использовать вещественные числа с плавающей запятой для всех вы-
- 10-8 -
числений и для представления в MASM констант вещественных чисел
(мы рассмотрим это позже). А также использовать форму минимально-
го целого, пригодную для числа, выражающего константу целого чис-
ла в MASM. Следуя этим указаниям мы можем получить наибольшую
точность с некоторым сохранением объема памяти путем применения
где возможно формы меньшего целого.
Рисунок 10-6 демонстрирует диапазон представления числа в
NPX. Обратите внимание, что NPX хранит числа с большей точностью
внутри (80-битовое вещественное), чем при загрузке и сохранении
регистров NPX (длинное вещественное). Это дает дополнительный за-
пас точности для вычислений. Отметьте также, что пробел между от-
Таблица 10-2
Диапазон и точность типов данных NPX
ДДДДДДДДДДДДВДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Тип данных ¦ Двоичные¦Десятичные¦ Приблизительный диапазон
¦ биты ¦цифры ¦
ДДДДДДДДДДДД†ДДДДДДДДД†ДДДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Вещественное¦ ¦ ¦
с плавающей ¦ ¦ ¦
запятой ¦ 80 ¦ 19 ¦ 3.4х10(-4932) ДДДДДДДДДДДДДДДДДДДД>
уменьшается к 0 увеличивается к бесконечности
Рис.10-6. Диапазон представления чисел в NPX
- 10-9 -
дельными представляемыми числами (расстояние между двумя смежными
числами, которые NPX может представить точно) уменьшается к нулю
(в обоих направлениях) и увеличивается к бесконечности (плюс или
минус). Эта плотность представления числа подразумевает, что NPX
с большей точностью обрабатывает очень маленькие числа, нежели
большие.
Набор команд NPX
NPX имеет то, что в индустрии называется богатым набором ко-
манд. Это не обязательно означает, что имеется много команд (хотя
он имеет 69 различных команд), а то, что набор команд хорошо
приспособлен для выполнения требуемых операций. Существуют коман-
ды почти для каждой операции, что значительно сокращает количест-
во шагов (и соответствующих трудностей при программировании), ко-
торые могут встретиться при использовании менее мощного числового
сопроцессора.
В таблице 10-3 приведены 69 команд. Таблица организована по
типам выполняемых операций, а не в алфавитном порядке, так как
предпочтительнее искать команду по типу, чем по имени. Необходимо
пояснить два обозначения, присутствующие в таблице 10-3. Сначала
отметку (P), появляющуюся в некоторых командах. Это означает, что
соответствующая команда может быть использована в форме POP,