|
Ассемблер отдельно порождает поля данных
дествительных чисел с
помощью четырех-, восьми- и десятибайтовых
описаний.Короткому
действительному числу здесь соответствует
оператор DD; длинному
действительному числу соответствует
оператор DQ; а временному
действительному чисоу - оператор DT.
К сожалению, Макроассемблер фирмы IBM не
обслуживает числа с
плавающей точкой процессора 8087.Если вы укажите действительное
число в качестве операнда оператора DD или
DQ, то в качестве данных
получите запутанный набор нулей и
единиц.Этот формат плавающих
чисел соответствует формату, используемому
внутри интерпретатора
языка Бейсик, и не является форматом ИИЭР,
используемым в
сопроцессоре 8087.Поэтому программа для сопроцессора 8087 должна
использовать несколько иной метод
порождения действительных чисел.
Существует два метода, которые можно
использовать для
построения действительных чисел.Первый метод - ручное
ассемблирование.Вы выписываете действительное число в праивльном
формате с помощью бумаги и ручки.Эта операция содержит:
тщательный анализ числа, преобразование
десятичного числа в
двоичную форму, разделение порядка и
мантиссы, смещение порядка, и
наконец, преобразование результата в
двоичную или шестнадцатеричную
систему.Это реальный метод, но он требует изрядного опыта и
огромных затрат времени программиста.Второй метод порожления
действительных чисел - косвенный метод,
требующий большого
количества машинного времени, но гораздо
меньших затрат времени
программиста.Здесь вы записываете действительное число в виде
произведения ил частного двух или более
целых.Ассемблер может
непосредственно порождать целые числа с
помощью команд DW, DD или
DQ.Сразу же после инициализации микросхемы 8087 программа может
построить необходимые ей действительные
числа, выполняя необходимые
умножения и деления.Например, в программе нужна константа с
плавающей точкой 1.234*105.Сформировать такую константу в целом
представлении программист сможет легко,
используя следующий оператор
DD 123400
Заметим, что число слишком велико для
представления оператором
DW, но удовлетворяет ограничениям
32-битовых целых чисел.
Но предположим, что нужно построить число
1.234*10**-5, которое
очень мало.В этом случае в программе потребуется два целых числа:
одно целое число соответствует значению
мантиссы, а другое
соответствует десяти в степени
порядка.Можно воспользоваться
следующими определениями
DW1234
DD100000000
чтобы построить необходимое число.Программист делит дробную
часть числа 1234 на значение 10**8 и
получает нужное число.
При использовании такого подхода возникают
сложности в работе с
очень большими или малыми числами.Эти числа требуют представления
степеней десяти, которые по значению много
больше любых
представимых целых чисел.Далее приводится пример, который строит
действительный формат каждой третьей
степени десяти и может помочь
в таком случае.Отложим рассмотрение этой программы до тех пор,
пока не изучим необходимые для нее
команды.С помощью таких
действителтных представлений степеней 10
записать числа от 1036 до
10-24 будет достаточно легко.Программа может разбить число на
целую часть и степень десяти, а умножение
и деление дадут верное
значение.Микросхема 8087 также допускает и другие способы
выполнения таких операций масштабирования,
но методы, используюшие
целые числа и степени 10, наиболее просты,
особенно для людей,
работающих с сопроцессором 8087 впервые.
|