Сопроцессор 8087 содержит два управляющих регистра. Один регистр нужен для записи управляющего слова, другой - для считывания слова состояния. Управляющий регистр позволяет программисту задать режим работы микросхемы 8087, далее о возможностях некоторых из них будет лишь упомянуто; рассмотрение всех возможных вариаций управляющего слова выходит за пределы этой книги. Структура управляющего регистра показана на Фиг. 7.7. Управляющее слово позволяет выбрать один из двух различных типов бесконечности. По умолчанию способом замыкания числовой системы является проективное замыкание, при котором сопроцессор 8087 трактует положительную, и отрицательную бесконечности как единую бесконечность без знака. Другой способ - аффинное замыкание, в которое входят и положительная, и отрицательная бесконечности. Хотя может показаться, что проективное замыкание теряет информацию, оно никогда не приводит к бессмысленным результатам. Аффинное замыкание в программе необходимо использовать только тогда, когда необходима дополнительная информация и когда программа написана для того, чтобы иметь дело с (возможно) неверными результатами.
Сопроцессор 8087 позволяет выбрать один из четырех способов округления чисел. Округление возникает тогда, когда результат
15 7 0
ЪДДДДДДДДДДДВДДДВДДДДДДДВДДДДДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДДї
і іIC і RC і PC іIEMі іPM іUM іOM іZM іDM іIM і
АДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДДЩ
ДДДДДВДДДДД і ДДДВДДД ДДВДД і і і і і і і і МАСКИ ИСКЛЮЧЕНИЯ (1=МАСКИРУЕТСЯ)
і і і і і і і і і і і АД НЕВЕРНАЯ ОПЕРАЦИЯ
і і і і і і і і і і АДДДДДД НЕНОРМАЛИЗОВАННЫЙ ОПЕРАНД
і і і і і і і і і АДДДДДДДДДД ДЕЛЕНИЕ НА НОЛЬ
і і і і і і і і АДДДДДДДДДДДДДД ПЕРЕПОЛНЕНИЕ
і і і і і і і АДДДДДДДДДДДДДДДДДД ИСЧЕЗАНИЕ ПОРЯДКА
і і і і і і АДДДДДДДДДДДДДДДДДДДДДД ТОЧНОСТЬ
і і і і і АДДДДДДДДДДДДДДДДДДДДДДДДДД(ЗАРЕЗЕРВИРОВАНО)
і і і і АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДМАСКА РАЗБЛОКИРОВКИ ПРЕРЫВАНИЙ (1)
і і і АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДУПРАВЛЕНИЕ ТОЧНОСТЬЮ (2)
і і АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДУПРАВЛЕНИЕ ОКРУГЛЕНИЕМ (3)
і АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДУПРАВЛЕНИЕ НЕОПРЕДЕЛЕННОСТЬЮ (4)
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД(ЗАРЕЗЕРВИРОВАНО)
(1) Маска разблокировки прерываний:
0 = Разблокировка
1 = Прерывания заблокированы (маскированы)
(2) Управление точностью:
00 = 24 бита
01 = (зарезервировано)
10 = 53 бита
11 = 64 бита
(3) Управление округлением:
00 = Округление до ближайшего или четного
01 = Округление в меньшую сторону
10 = Округление в большую сторону
11 = Обрезание к нулю
(4) Управление неопределенностью:
0 = Продуктивная
1 = Афинитивная
Фиг. 7.7 Формат управляющего слова INTEL 8087
В качестве примера особой ситуации рассмотрим упомянутое выше переполнение стека. Если программа помещает в стек девятый объект, сопроцессор 8087 отвечает прерыванием по особой ситуации. Если это прерывание не разрешено, сопроцессор 8087 отмечает операцию как недействительную и дает результат со специальным значением, известным как NAN (Not A Number, не число). Если вы собираетесь выполнять сложные вычисления, требующие более восьми позиций стека, то можете выгодно использовать прерывание по этой особой ситуации. Когда возникает переполнение стека, обработчик этого прерывания может удалить нижние элементы стека, используя команды записи. Затем программа освобождает эти позиции стека для дальнейшего использования. Существует также и соответствующее прерывание по исчерпыванию стека, которое возникает при использовании пустой позиции стека; подпрограмма обработки прерывания может обрабатывать и эту ситуацию: она может восстановить прежнее состояние стека из области сохранения.
Далее мы увидим, что микросхема 8087 содержит информацию о своем состоянии, что делает возможным обработать особые ситуации в обработчике прерываний. Микросхема 8087 имеет исчерпывающую информацию о команде, которая вызвала особую ситуацию.