Процессор i486, работающий в режиме реальных адресов, будет выполнять программы процессора 8087 без существенной модификации. Тем не менее, за счет различий в обработке числовых исключений в процессоре i486 и 8087 NPX, процедуры обработки исключений скорее всего должны будут измениться. В этом разделе дается подробное описание того, как программы процессора 8087 можно поставить на процессор i486.
Процессору 8087 требуется контроллер прерывания (8259А) для прерывания CPU при возникновении немаскированного исключения. Следовательно, все команды в обработчиках числовых прерываний процессора 8087, ориентированные на этот контроллер, должны быть уничтожены.
Команды FENI/FNENI и FDISI/FNDISI процессора 8087 не выполняют никакой полезной работы на процессоре i486. Если процесссор i486 обнаружит в потоке команд один из этих кодов операций, он будет проигнорирован - ни одно из внутренних состояний процессора не будет изменено. Если программа процессора 8087 будет выполняться на процессоре i486, процедуры обработки исключений, содержащие эти команды, вряд ли будут полностью переносимы.
В реальном и защищенном режимах (исключая виртуальный режим процессора 8086) вектор прерывания 16 должен указывать на процедуру обработки числового исключения. В виртуальном режиме процессора 8086 монитор V86 может быть запрограммирован с различным размещением векторов прерываний для числовых исключений.
Адрес программы ESC, записанный в процессоре i486, включает некоторые начальные префиксы перед кодом операции ESC. Соответствующий адрес в системе 8086/8087 не включает начальных префиксов.
В защищенном режиме процессора i486 (исключая виртуальный режим процессора 8086) формат хранимой команды и адресных указателей отличается от форматов, принятых в системе 8087. Код операции команды не сохраняется в защищенном режиме - при необходимости обработчики исключений должны восстанавливать его из памяти.
Прерывание 7 будет существовать в процессоре i486 при выполнении команд ESC, при установленных TS (переключение задачи) или EM (эмуляция) в MSW (TS = 1 или EM = 1). При установленном TS коанда WAIT тоже вызовет прерывание 7. Для обработки этих ситуаций в программу процессора i486 следует включить обработчик исключений.
При попадании начального адреса числового операнда вне размера сегмента возникнет прерывание 13. Для сообщения об этой ошибке следует включить обработчик исключения.
Все числовые команды процессора i486 за исключением команд управления FPU синхронизируются автоматически - процессор автоматически ждет перед выполнением следующий команды ESC, пока все операнды будут переданы. Для осущесттвления этой синхронизации не требуется явных команд WAIT. Для сопроцессора 8087, используемого с процессорами 8086 и 8088, явные команды WAIT требуются перед каждой числовой командой для осуществления синхронизации. Хотя программы с явными командами WAIT для процессора 8087 выполнятся правильно на процессоре i486 без реассемблирования, эти команды не нужны.
Поскольку процессору i486 не требуются команды WAIT перед каждой числовой операцией, ассемблер ASM386/486 не генерирует эти команды автоматически. Ассемблер же ASM86 перед каждой командой ESC ставит команду WAIT. Хотя числовые процедуры, сгенерированные с использованием ассемблера ASM86, будут выполняться на процессоре i486 правильно, реассемблирование с использованием ASM386/486 даст, возможно, более компактный код и более быстрое выполнение.
Команды управления для FPU процессора i486 могут быть кодированы как с использованием формы мнемоники WAIT, так и формы No - WAIT. Формы WAIT этих команд вызовут в ассемблере ASM386/486 постановку команды WAIT перед каждой командой ESC, как это сделал бы ассемблер ASM86.
Адрес операнда памяти, записываемый командами FSAVE или FSTENV, будет неопределен, если предыдущая команда ESC не ссылалась на память.
Поскольку процессор i486 по возможности автоматически нормализует нено- рмализованные числа, программа процессора 8087, использующая отдельно ис- ключение денормализации для нормализации денормализованных операндов, может выполнятся на процессоре i486 при маскировании исключения денормализации. В этом случае обработчик исключения денормализации процессора 8087 не будет использоваться на процессоре i486. Числовая программа будет выполня- ться быстрее, если процессор i486 будет выполнять нормализацию денормали- зованных операндов.