7.3.11. Математический сопроцессор
80287
Сопроцессор
80287 предназначен для расширения вычислительных возможностей центрального
процессора (CPU) 80286 и 386. Функционально он напоминает сопроцессор 8087, но
имеет возможность работы в реальном и защищенном режимах, выполняет некоторые
дополнительные инструкции и иначе обрабатывает исключения. Интерфейс
взаимодействия с основным процессором существенно отличается от связки
8086-8087. За счет изменения архитектуры повышена производительность вычислений.
Более поздняя модификация, официально называемая Intel287 XL MCP (Math
Coprocessor), имеет улучшенную архитектуру, повышенную производительность
(сокращено количество тактов на выполнение операций) и поддерживает инструкции,
доступные для 387+. К этой модификации относятся также и все математические
отличия, которыми обладают сопроцессоры 387+ относительно 8087 и 80287.
Аппаратный
интерфейс рассчитан на подключение к локальной шине процессора 80286 или 386.
Расположение выводов приведено на рис. 4, назначение сигналов — в табл. 3.
Обмен
данными между процессором и сопроцессором 80287 происходит по локальной шине
данных в циклах чтения и записи портов ввода/вывода. Для сопроцессора в
адресном пространстве ввода/вывода зарезервирована область 00F8-00FFh. Внешний
дешифратор адреса при обращении к этой зоне подает на сопроцессор сигналы
NPS1#=0 и NPS2=1. На входы CMD0, CMD1 подаются защелкнутые по сигналу ALE биты
А1 и А2 шины адреса. Назначение шинных циклов приведено в табл. 4.

Рис. 4. Расположение выводов
сопроцессора 80287
Таблица 3. Назначение сигналов сопроцессора 80287

В
отличие от 8087 сопроцессор 80287 не обращается к памяти напрямую, оставляя все
заботы адресации основному процессору. Все обмены данными инициируются процессором
по инструкции ESCAPE. Получив и декодировав инструкцию, сопроцессор выставляет
запрос PEREQ, и процессор, установив сигнал подтверждения РЕАСК#, передает
данные в шинных циклах ввода/вывода. По окончании пересылки процессор снимает
сигнал РЕАСК#. Если этот выход соединить с одноименным входом процессора, то
при следующей инструкции WAIT и ряде команд ESCAPE будет генерироваться
исключение 16 (10h). Однако в РС/АТ-286 этот выход заводится на вход вторичного
контроллера прерываний IRQ13, вызывая в случае исключения прерывание 117 (Int
75h). В отличие от сопроцессора 8087, операция WAIT встроена во все инструкции,
относящиеся к сопроцессору, поэтому сопроцессор 287 применения отдельной
инструкции WAIT перед каждой командой не требует.
Таблица 4. Назначение шинных циклов сопроцессора
80287

После
аппаратного сброса сопроцессор устанавливается в реальный режим, в котором
связка 80286/80287 программно совместима с 8086/8087. В защищенный режим
сопроцессор переключается по инструкции FSETPM, из которого, в отличие от
основного процессора 80286, он может вернуться в реальный по инструкции FRSTPM.
Перевод в защищенный режим изменяет форматы административных инструкций,
которые обычно используются только обработчиками исключений, так что на
прикладном уровне 80287 в обоих режимах обратно совместим с 8087.