Assembler для начинающих






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