Типы данных 8087

      Микросхема 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 изображен листинг ассемблера, иллюстрирующий

    сформированные ассемблером значения в случае четырех типов целых

    чисел.

Hosted by uCoz