Регистровый стек
Регистровый стек
Сопроцессор 8087 имеет четыре регистра специального назначенмя
и восьмирегистровый стек для арифметических операндов. Этот
регистровый стек лежит в основе работы сопроцессора 8087, и поэтому
мы прежде всего рассмотрим именно его.
Регистровый стек процессора числовой обработки состоит из
восьми позиций, каждая из которых имеет ширину 80 бит. Сороцессор
8087 запоминает все объекты во временном действительном формате,
независимо от того, как они представлены в памяти системы;
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і ПОЛЕ ДАННЫХ ПОЛЕ і
і 79 78 64 63 0 1 0 і
іЪДДДДДДВДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДї ЪДДДДДДїі
ііЗНАК і ПОРЯДОК і МАНТИССА і і іі
іГДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДґ ГДДДДДДґі
іі і і і і іі
іГДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДґ ГДДДДДДґі
іі і і і і іі
іГДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДґ ГДДДДДДґі
іі і і і і іі
іГДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДґ ГДДДДДДґі
іі і і і і іі
іГДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДґ ГДДДДДДґі
іі і і і і іі
іГДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДґ ГДДДДДДґі
іі і і і і іі
іГДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДґ ГДДДДДДґі
іі і і і і іі
іАДДДДДДБДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ АДДДДДДЩі
і 15 0 і
і ЪДДДДДДДДДДДДДДДДДДДДДДї і
і іУПРАВЛЯЮЩИЙ РЕГИСТР і і
і ГДДДДДДДДДДДДДДДДДДДДДДґ і
і іРЕГИСТР СОСТОЯНИЯ і і
і ГДДДДДДДДДДДДДДДДДДДДДДґ і
і і і і
і ГД УКАЗАТЕЛЬ КОМАНД Дґ і
і і і і
і ГДДДДДДДДДДДДДДДДДДДДДДґ і
і і і і
і ГД УКАЗАТЕЛЬ ДАННЫХ ДДґ і
і і і і
і АДДДДДДДДДДДДДДДДДДДДДДЩ і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Фиг. 7.6 Регистровая труктура микросхемы INTEL 8087
сопроцессор 8087 преобразует целые и действительные числа во
внутренний формат. Как мы уже видели, такое представление
допускает очень высокую точность и большой диапазон. В случае
целых чисел сопроцессор 8087 получает точные результаты вплоть до
значения 2**64. Внутренний формат с плавающей точкой малоинтересен
для тех программистов, которые обрабатывают целые числа с помощью
микросхемы 8087.
Регистры сопроцессора 8087 функционируют как обычный стек,
такой же, как и стек микропроцессора 8088. Но у этого стека
имеется ограниченное число позиций - только вомесь. Процессор 8087
имеет еще один регистр, труднодоступный для программиста. Этот
регистр представляет собой слово, содержащее "этикетки" каждой
позиции стека. Такой регистр позволяет сопроцессору 8087
отслеживать, какие из позиций стека используются, а какие свободны.
Любая попытка помещения объекта в стек на уже занятую позицию
приводит к врзникновению особой ситуации - недействительной
операции. Ниже будут обсуждены особые ситуации, и то, как
программа может бороться с проблемой переполнения стека.
Программа может заносить данные в стек сопроцессора 8087 с
помощью команды загрузки, и все команды загрузки помешают данные в
вершину стека. Если число в главной памяти записано не во
временном действительном формате, микросхема 8087 преобразует его в
80-битовое представление во время выполнения команды загрузки.
Аналогично команды записи извлекают значение из стека микросхемы
8087 и помещают их в главную память, а если необходимо
преобразование формата данных, сопроцессор 8087 выполняет его как
часть операции записи. Некоторые формы операции записи оставляют
вершину стека нетронутой для дальнейших действий.
После того, как программа поместила данные в стек сопроцессора
8087, они могут быть использованы в любой вычислительной команде.
Вычислительные команды процессора 8087 допускают как действия между
регистрами, так и действия между памятью и регистрами. Точно так
же, как и в случае микропроцессора 8088, из любых двух операндов
арифметической операции один должен находиться в регистре. У
сопроцессора 8087 один из операндов должен быть всегда верхним
элементом стека, а другой операнд может быть взят их памяти, либо
из стека регистров. Стек регистров сопроцессора 8087 всегда должен
быть приемником результата любой арифметической операции.
Непосредственно записать результат в память той же командой,
которая выполнила вычисления, процессор числовой обработки не
может. Чтобы переслать операнд обратно в память, необходима
отдельная команда записи (или команда извлечения из стека с записью
в память). Некоторые арифметические команды извлекают верхний
элемент стека и сбрасывают его, не записывая в память.