Микросхема 8087 имеет расширенный набор типов данных,  необходимых для поддержки ее расширенных арифметических  возможностей.  В то время как микропроцессор 8088 может  непосредственно работать только с байтами и словами, микросхема  8087 имеет семь типов данных.  Шесть из них присущи лишь микросхеме  8087. На Фиг. 7.1 показаны все семь типов данных, с которыми  работает микросхема 8087.  Четыре формата представляют целые числа,  а три формата - вещественные, или числа с плавающей точкой.  Один  формат представляет упакованные десятичные числа.

Рисунок 7.2 иллюстрирует способы, которыми микросхема хранит  эти числа в памяти.  Как и в случае данных микропроцессора 8088,  все данные хранятся с младшей частью операнда, записанной в младших  адресах. Бит знака всегда оказывается в байте по старшему адресу  памяти. Мы будем обсуждать назначение различных полей по мере  того, как будем рассматривать разные типы данных.

Сопроцессор 8087 работает с тремя типами целых чисел:  словом,  которое имеет длину 16 бит и идентично слову микропроцессора 8088;  коротким целым числом, имеющим длину 32 бита; длинным целым числом,  64-значением.  Все эти числа являются числами, представленными в  двоичном дополнительном коде.

В программе целое слово определяется с помощью оператора DW.  Такое целое слово может иметь значение в диапазоне от - 32768 до  32767. Этот целый формат уже использовался в наборе команд  микропроцессора 8088.  Это - единственный формат данных, общий для  микропроцессора 8088 и арифметического сопроцессора 8087.  Короткий  целый формат требуется в операторе описания данных длиной 32 бита.  Такое описание двойного слова выполняет оператор DD, определяющий  целые числа, лежащие в диапазоне от -232 до 232-1.  Напоминаем, что  с помощью оператора DD можно также определить пару  СЕГМЕНТ:СМЕЩЕНИЕ.  Ассемблер решает сам, какую именно форму  сгенерировать, основываясь на операнде.  Если операнд - адрес,  порождается пара СЕГМЕНТ:СМЕЩЕНИЕ; если же операнд - просто число,  соответственно порождается длинное целое число.  Для описания  длинных 64-битовых целых чисел используется оператор определения  счетверенного слова DQ.  Эта директива вынуждает ассемблер  сформировать поле данных, состоящее их четырех слов (восьми байт).  Такой тип целого может иметь значения в диапазоне от -264 до 264-1.  Этот оператор ассемблера, так же как и операторы DB, DW и DD, может  определить константу, неопределенное поле (если задан операнд "?"),

                 <ДДДД ВОЗРАСТАНИЕ ЗНАЧЕНИЯ

 

                       ЪДВДДДДДДДДДДДДДДДї

            СЛОВА ЦЕЛЫЕ  іSі ВЕЛИЧИНА     і(ДВОИЧНОЕ

                       АДБДДДДДДДДДДДДДДДЩ ДОПОЛНЕНИЕ)

                        15           0

 

                       ЪДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

           КОРОТКОЕ ЦЕЛОЕ іSі      ВЕЛИЧИНА               і(ДВОИЧНОЕ

                       АДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ ДОПОЛНЕНИЕ)

                        31                      0

 

                      ЪДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

           ДЛИННОЕ ЦЕЛОЕ  іSі                ВЕЛИЧИНА                           і

                      АДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                        63

 

                      ЪДВДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

      УПАКОВАННОЕ ДЕСЯТИЧНОЕ іSі   X  і                   ВЕЛИЧИНА                              і

                      АДБДДДДДДДБd17Бd16Бd15Бd14Бd13Бd12Бd11Бd10Бd9ДБd8ДБd7ДБd6ДБd5ДБd4ДБd3ДБd2ДБd1ДБd0ДЩ

                        79      72                                                   0

 

                       ЪДВДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДї

       КОРОТКОЕ ВЕЩЕСТВЕННОЕ іSіПОРЯДОК   і  МАНТИССА            і

                       АДБДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДЩ

                        31    23              0

 

                      ЪДВДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

      ДЛИННОЕ ВЕЩЕСТВЕННОЕ іSі  ПОРЯДОК   і               МАНТИССА                     і

                      АДБДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                        63        52                                        0

 

                       ЪДВДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

      ВРЕМЕННОЕ ВЕЩЕСТВЕННОЕ іSі     ПОРЯДОК      ГДДї                  МАНТИССА                   і

                      АДБДДДДДДДДДДДДДДДДДДБДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                        79          64 63                                             0

 

               КОММЕНТАРИИ:

               S - бит знака (0 - плюс, 1 - минус)

               dn - Десятичная цифра (по две на бит)

               X - Незначащие биты; 8087 их игнорирует при загрузке и обнуляет при сохранении

                  - Позиция подразумеваемой двомичной точки

               I - Целый бит мантиссы; сохраняется для временных действительных, подразумевается - для коротких и длинных

               ПОРЯДОК (нормализованные значения):

                  Короткие действительные: 127 (7FH)

                  Длинные действительные: 1023 (3FFH)

                  Временные действительные: 16383 (3FFFH) 

                 Фиг. 7.1 Форматы данных 8087 (Copyright Intel 1980)

а также несколько восьмибайтовых полей с помощью команды DUP.  Оставшийся целый тип данных - упакованный десятичный формат.  Этот тип данных представляет целое число в упакованном десятичном  формате. Такие данные занимают десять байт. Один байт  резервируется для знака, а оставшиеся девять байт содержат 18  десятичных цифр.  Такое упакованное представление десятичных чисел  идентично представлению десятичных операндов микропроцессора 8088,  но при этом представлении одновременно обрабатывается 18 цифр.  Команды десятичной коррекции упакованных десятичных чисел  микропроцессора 8088 допускают одновременно только две десятичные  цифры. Кроме того, упакованные десятичные числа микропроцессора  8088 требуют, чтобы программист определил метод обработки знака  числа, если используются отрицательные числа.  Упакованные  десятичные числа сопроцессора 8087 имеют бит знака в старшем байте.  Упакованное десятичное число хранится в десятичном коде, причем  старший бит 10-байтного поля содержит знак (0 - положительно, 1 -  отрицательно).

Для описания упакованного десятичного числа используется  оператор определения десятибайтового поля DT.  Чтобы задать  упакованное десятичное число в этом поле, необходимо использовать  шестнадцатеричную запись.  Если в поле операнда окажется целое  число, ассемблер преобразует его в дополнительный двоичный код, а  не в упакованное десятичное число.  К счастью, преобразовать  десятичное число в необходимую шестнадцатеричную форму легко.

A

                      ЪДВДВДДДДДДДДДДДї

                      і |M|       і

                    +3іS|S|       і

                      і |B|       і

                      ГДБДБДДДДДДДДДДДґ

                      і           і

                    +2і           і

                      і           і

     ЪДВДВДДДДДДДДДДДї      ГДДДДДДДДДДДДДДДґ           ЪДВДВДДДДДДДДДДДї

     і |M|       і          і           і          і |M|       і

   +1іS|S|       і        +1і           і       +3іS|S|       і

     і |B|       і          і           і          і |E|       і

     ГДБДБДДДДДДДДДВДґ      ГДДДДДДДДДДДДДВДґ           ГДЕДЕДДДДДДДДДДДґ

     і               |Lі          і         |Lі          іL|M|       і

   +0і               |Sі        +0і         |Sі       +2іS|S|       і

     і               |Bі          і         |Bі          іE|F|       і

     АДДДДДДДДДДДДДБДЩ      АДДДДДДДДДДДДДБДЩ           ГДБДБДДДДДДДДДДДґ

     7                0     7          0           і           і

     ЦЕЛЫЕ СЛОВА       КОРОТКИЕ ЦЕЛЫЕ           +1і           і

                                             і           і

                   і   ЪДВДДДДДДДДДДДДДї          ГДДДДДДДДДДДДДВДґ       ЪДВДВДДДДДДДДДДДї

                   і    і |       і         і        |Lі     і |M|      і

                   і  +9іS|    (X)      і       +0і        |Sі  +9іS|S|       і

                   і    і |       і         і        |Fі     і |E|      і

                   і   ГДБДДДДДВДДДДДДДґ          АДДДДДДДДДДДДДБДЩ       ГДБДБДДДДДДДДДВДґ

                   і    і        |     і          7          0      і        |Lі

                   Р  +8і        |     і          КОРОТКИЕ ВЕЩЕСТВ.    +8і        |Sі

                   О    і        |     і                            і        |Eі

     ЪДВДВДДДДДДДДДДДї С    ГДДДДДДДЕДДДДДДДґ            ЪДВДВДДДДДДДДДДДї      ГДВДВДДДДДДДДДБДґ

     і |M|       і Т   і         |     і          і |M|       і і         і |M|       і

   +7іS|S|       і        +7і     |     і       +7іS|S|       і і      +7іI|S|       і

     і |B|       і А   і         |     і          і |E|       і і         і |F|       і

     ГДБДБДДДДДДДДДДДґ Д    ГДДДДДДДЕДДДДДДДґ            ГДБДБДДВДВДВДДДДґ і    ГДБДБДДДДДДДДДДДґ

     і                 і Р   і         |     і          і    |L|M|   і і       і           і

   +6і                 і Е +6і         |     і       +6і   |S|S|    і і    +6і           і

     і                 і С   і         |     і          і    |E|F|   і Р       і           і

     ГДДДДДДДДДДДДДДДґ О    ГДДДДДДДЕДДДДДДДґ            ГДДДДДДБДБДБДДДДґ О    ГДДДДДДДДДДДДДДДґ

     і                 і В   і         |     і          і           і С         і           і

   +5і                 і        +5і     |     і       +5і           і Т      +5і          і

     і                 і          і     |     і          і           і     і           і

     ГДДДДДДДДДДДДДДДґ      ГДДДДДДДЕДДДДДДДґ           ГДДДДДДДДДДДДДДДґ А     ГДДДДДДДДДДДДДДДґ

     і                і          і     |     і          і           і Д         і           і

   +4і                 і        +4і     |     і       +4і           і Р      +4і          і

     і                 і          і     |     і          і           і Е         і           і

     ГДДДДДДДДДДДДДДДґ      ГДДДДДДДЕДДДДДДДґ           ГДДДДДДДДДДДДДДДґ С     ГДДДДДДДДДДДДДДДґ

     і                 і          і     |     і          і           і О         і           і

   +3і                 і        +3і     |     і       +3і           і В      +3і          і

     і                 і          і     |     і          і           і     і           і

     ГДДДДДДДДДДДДДДДґ      ГДДДДДДДЕДДДДДДДґ           ГДДДДДДДДДДДДДДДґ       ГДДДДДДДДДДДДДВДґ

     і                 і          і     |     і          і           і     і        | і

   +2і                 і        +2і     |     і       +2і           і  +2і        | і

     і                 і          і     |     і          і           і     і        | і

     ГДДДДДДДДДДДДДДДґ      ГДДДДДДДЕДДДДДДДґ           ГДДДДДДДДДДДДДДДґ       ГДДДДДДДДДДДДДДДґ

     і                 і          і     |     і          і           і     і           і

   +1і                 і        +1і     |     і       +1і           і  +1і          і

     і                 і          і     |     і          і           і     і           і

     ГДДДДДДДДДДДДДВДґ      ГДДДДДДДЕДДДДДДДґ           ГДДДДДДДДДДДДДВДґ      ГДДДДДДДДДДДДДВДґ

     і               |Lі          і     |     і          і        |Lі    і        |Lі

   +0і               |Sі        +0і     |     і       +0і        |Sі  +0і        |Sі

     і               |Bі          і     |     і          і        |Fі    і        |Fі

     АДДДДДДДДДДДДДБДЩ      АДДДДДДДБДДДДДДДЩ           АДДДДДДДДДДДДДБДЩ       АДДДДДДДДДДДДДБДЩ

     7                0     7          0            7          0     7          0

     ДЛИННЫЕ ЦЕЛЫЕ          УПАКОВАННЫЕ ДЕС.             ДЛИННЫЕ ВЕЩЕСТВ.       ВРЕМЕННЫЕ ВЕЩЕСТВ.

 

       S: Бит знака                                   S: Бит знака

       MSB/LSB: Старший/младший бит                   MSE/LSE: Старший/младший бит порядка

       MSD/LSD: Старшая/младшая десятичная цифра            MSF/LSF: Старший/младший бит дробной части

       (X): Биты не имеют значения                    I: Целый бит мантиссы

A

          Фиг. 7.2 Структура хранения данных в 8087

 

           Microsoft (R) Macro Assembler Version 5.00              1/1/80 04:03:56

           Фиг. 7.3 Целочисленные форматы данных сопроцессора 8087      Page         1-1

 

                                          PAGE   ,132

                                          TITLE  Фиг. 7.3 Целочисленные форматы данных сопроцессора 8087

 

            0000                   CODE   SEGMENT

 

            0000  04D2             WORD       DW      1234

           7_3.ASM(6): warning A4016: Reserved word used as symbol: WORD

            0002  FB2E                        DW      -1234

 

            0004  40E20100              SHORT_INTEGER   DD      123456

            0008  C01DFEFF                           DD      -123456

 

            000C  D202964900000000      LONG_INTEGER    DQ      1234567890

            0014  2EFD69B6FFFFFFFF                   DQ      -1234567890

            001C  ????????????????                   DQ      ?

             0024 78563412907856341200    PACKED_BCD      DT      00123456789012345678H

            002E  78563412907856341280              DT      80123456789012345678H ; Отрицательное от предыдущего

            0038  0002[                              DT     2 DUP (?)

                   ???????????????

                   ?????

                               ]

 

            004C                   CODE   ENDS

                                          END

            Фиг. 7.3 Целочисленные форматы данных сопроцессора 8087

Просто запишите нужное число в десятичной форме, а затем добавьте  букву H, показывающую, что это - шестнадцатеричное число.  Изобразить отрицательное число труднее.  Если вы напишите перед  десятичным числом знак "-", ассемблер преобразует его в двоичный  дополнительный код, даже если есть буква H.  Поэтому в этом случае  нужно подсчитать десятичные цифры и удлинить число до 20 цифр.  первые две цифры должны быть 80, чтобы показать, что число  отрицательно.  То есть, чтобы изобразить -1234 в упакованном  десятичном формате, надо записать:

  DT 80000000000000001234H

На Фиг. 7.3 изображен листинг ассемблера, иллюстрирующий сформированные ассемблером значения в случае четырех типов целых  чисел.