Команды сопроцессора 8087 должны рассматриваться как расширение  набора команд микропроцессора 8088, т.е.  микросхема 8087 добавляет  команды к общему набору.  Адресация памяти выполняется так же, как  и в микропроцессоре 8088.  Как мы уже видели ранее, так происходит  потому, что в действительности микропроцессор 8088 сам порождает  адреса памяти, а сопроцессор 8087 только выполняет требуемые  операции над данными.

Сопроцессор 8087 имеет набор регистров для чисел с плавающей точкой, организованный в виде стека.  Вершину стека микросхема 8087  локализует с помощью 3=битового указателя, содержащегося в слове  состояния.  Прочитав слово состояния, вы сможете узнать, какой из  восьми регистров является текущей вершиной стека; но, как будет  видно далее, эта информация в программе требуется редко.

Вся адресация регистрового стека микросхемы 8087 делается  относительно текущей вершины стека.  Мнемонически на ассемблере  вершина стека называется ST(0) или просто ST.  Элемент, лежащий  прямо под вершиной стека, называется ST(1), второй элемент - ST(2),  и так далее, вплоть до последнего элемента, ST(7).  Для простоты  использования мы будем опускать скобки в обозначениях элементов  стека, используя ST0, ST1, ST2 и так далее.

А теперь давайте посмотрим, как программа может добраться к  элементам стека.  Команда

  FADDST0, ST3

складывает вершину стека и четвертый его элемент, помещая  результат в вершину стека.  На Фиг. 7.9а показаны действия этой  команды. Ссылка на регистры ST0 и ST3 жестко связана с указателем  стека. На рисунке складываются значения A и D, а результат A + D  замещает значение A, так как оно лежит в вершине стека.  На  Фиг. 7.9б до выполнения той же самой команды в стек был помещен  элемент E.  Команда по=прежнему складывает содержимое вершины стека  с его четвертым элементом; но, как показано на Фиг. 7.9б, она теперь  складывает значения E и C, замещая результатом E + C значение E.  В  результате помещения элемента E в стек перераспределения операндов  внутри сопроцессора 8087 не произошло, но произошло их перемещение  по отношению к вершине стека.  То есть элемент ST3 всегда является  четвертым элементом стека, независимо от того, где расположен  указатель стека.

Мы можем разбить команды сопроцессора 8087 на три широкие  группы. В первой группе находятся пересылки данных - загрузки и  записи данных в сопроцессор 8087 и из него.  Вторая группа -  управление сопроцессором, команды, которые служат для нужд  внутреннего сервиса 8087.  В третьей группе команд сосредоточены  все возможности сопроцессора 8087, это команды числовой обработки.  Далее мы рассмотрим каждую группу детальнее.  Этот текст не  содержит исчерпывающего описания команд микросхемы 8087.  Мы будем  использовать примеры, чтобы с их помощью сообщить достаточное  количество информации о значении той или иной команды, а  рассмотрение всех вычислительных возможностей сопроцессора 8087  выходит за рамки данной книги.

       ЪДДДДДДДДДДДДДДДДДДДДДї               ЪДДДДДДДДДДДДДДДДДДДДДї

       і               і                і               і

       і ЪДДДДДДДДДДДДї     і               і  ЪДДДДДДДДДДДДї     і

       АДДґ A     ГДДДД +              АДДґ      E    ГДДДД +

       ГДДДДДДДДДДДДґ     і              ГДДДДДДДДДДДДґ     і

        і   B    і     і                 і      A    і     і

       ГДДДДДДДДДДДДґ     і              ГДДДДДДДДДДДДґ     і

        і   C    і     і                 і      B    і     і

       ГДДДДДДДДДДДДґ     і              ГДДДДДДДДДДДДґ     і

        і   D    ГДДДДДЩ                 і     C     ГДДДДДЩ

       ГДДДДДДДДДДДДґ               ГДДДДДДДДДДДДґ

        і         і                 і     D     і

                                     ГДДДДДДДДДДДДґ

                                     і        і

            (a)                          (b)

  Фиг. 7.9 Действие FADD ST0,ST3