7.1.11. Математический сопроцессор 8087

 

Сопроцессор 8087, официально (фирмой Intel) называемый NPX (Numeric Processor extension), предназначен для расширения вычислительных возможностей центрального процессора 8086/8088, 80186/80188. Его применение к системе команд 8086 добавляет 68 мнемоник, включающих арифметические, тригонометрические, экспоненциальные и логарифмические инструкции. Сопроцессор поддерживает 7 типов данных: 16-, 32-, 64-битные целые числа; 32-, 64-, 80-битные числа с плавающей точкой и 18-разрядные числа в двоично-десятичном формате. Формат чисел с плавающей точкой соответствует стандарту IEEE 754. Сопроцессор выполняет математические операции аппаратно с производительностью, превосходящей их программную эмуляцию основным процессором более чем в 100 раз. Иногда его обозначают как FPU (Floating Point Unit — процессор чисел с плавающей точкой), что не охватывает иные типы данных, или NPU (Numeric Processing Unit — числовой процессор), что не подчеркивает его принципиальную зависимость от центрального процессора. С программной точки зрения связка CPU+NPX выглядит как единое целое, где CPU осуществляет общее управление процессом и отработку команд основного набора, а NPX исполняет только свои специфические команды.

Аппаратный интерфейс и расположение выводов практически повторяет процессор 8086/8088, работающий в максимальном режиме (рис. 7.26). Одноименные выводы (кроме RQ/GT1) сопроцессора и основного процессора соединяются между собой. Для обеспечения синхронизации вывод BUSY, сигнализирующий о занятости сопроцессора выполнением инструкции, соединяют со входом TEST

CPU. Выход INT (Interrupt) используется для сигнализации (высоким уровнем) о возникновении немаскированного исключения, возникающего во время выполнения инструкции. Исключением (exception) называют особые условия, которые могут возникнуть в результате вычислений. В PC сигнал INT через логическую схему поступает на вход NMI CPU и вызывает немаскируемое прерывание (вектор 2).

Рис. 7.26. Расположение выводов сопроцессора 8087

 

Сопроцессор, отслеживая сигналы состояния CPU (S[0:2] и QSO, QS1), вместе с ним просматривает и декодирует инструкции. Сопроцессор имеет внутреннюю очередь инструкций, работающую по той же логике, что и очередь CPU. ХРХ 8087 может работать как с 8086, так и с 8088, имеющими различные параметры очереди и разрядность передаваемых данных. Настроиться на конкретный тип CPU позволяет проверка состояния сигнала BHE#/S7 непосредственно после аппаратного сброса (сигнала RESET). Любая команда, предназначенная для сопроцессора, является двухбайтной инструкцией ESCAPE (первый байт имеет двоичный код ИОИххх, второй байт вместе с битами ххх уточняет команду), за которой может следовать 1 или 2 байта смещения. Эти команды CPU и NPX отрабатывают одновременно. Если команда подразумевает обмен данными с памятью, CPU вычисляет их адрес и выполняет шинный цикл фиктивного чтения первого слова (для 8088 — байта), но игнорирует считанные данные. Если должно выполняться считывание из памяти, эти данные реально считываются сопроцессором, который фиксирует во внутреннем регистре и значение текущего адреса. Если команда подразумевает считывание более, чем одного слова (байта) данных, сопроцессор по линии RQ/GTO запрашивает управление локальной шиной и, получив его, продолжает загрузку оставшейся части операнда, последовательно увеличивая адрес. Если требуется запись в память, то сопроцессор во время фиктивного чтения только перехватывает значение физического адреса памяти, а реальную запись производит начиная с этого адреса, получив управление шиной. Таким образом, сопроцессор разгружается не только от разборки «чужих» команд, но и от всех хитростей формирования физического адреса, принятых в 8086. После отработки всех циклов передачи (часть из которых может выполняться сопроцессором во время захвата шины) процессор переходит к выполнению следующей инструкции. После вычислительной инструкции, исполняемой сопроцессором, должна следовать команда WAIT (или FWAIT, что одно и то же), по которой процессор дожидается низкого уровня сигнала на входе TEST# (CPU) — выходе BUSY (NPX). Сигнал занятости BUSY вырабатывается сопроцессором на время выполнения вычисления, чем и обеспечивается его синхронизация. Команду WAIT целесообразно вводить не сразу после команды вычисления, а непосредственно перед тем, как потребуются результаты вычислений — тогда процессор и сопроцессор могут некоторое время работать параллельно.

 

 

 

 

HotLog

Заказчику web дизайна и программирования - каталог сайтов, обзор дизайн студий