Сопроцессор 8087 обрабатывает команды с плавающей точкой,
контролируя команды, выполняемые процессором 8088. Арифметический
сопроцессор "смотрит" на команды, выполняемые процессором 8088.
Когда сопроцессор 8087 "видит" команду, котрую он должен выполнить,
он начинает ее обработку. Микросхема 8087 выполняет свои числовые
операции параллельно с микропроцессором 8088. То есть, пока
микросхема 8087 выполняет арифметическую команду, микропроцессор
8088 может продолжать выполнять свои команды. Тем самым возникает
истинная параллельность работы; микропроцесоор 8088 может выполнять
команду, пока сопроцессор 8087 выполняет другую команду. В
частности, это имеет значение в случае, когда команда сопроцессора
8087 занимает много времени, что характерно для некоторых команд с
плавающей точкой.
Поскольку два процессора могут работать параллельно, необходима
некоторая синхронизация межлу ними. Эту работу выполняет команда
WAIT микропроцессора 8088. Микросхема 8087 подключена к
микропроцессору 8088 таким образом, что когда процессор числовой
обработки занят (выполняет команду плавающей точки), вход TEST
микропроцессора 8088 неактивен. Команда WAIT останавливает
обработку команд в микропроцессоре 8088 до тех пор, пока вход TEST
не станет активен, сигнализуя о завершении команды сопроцессора
8087. Таким образом, при работе микропроцессора 8088 можно
гарантировать, что микросхема 8087 завершит свою работу до того,
как микропроцессор 8088 выберет на выполнение следующую команду.
Это также предотвращает выборку данных до завершения исполнения
команды.
Процессор и сопроцессор связаны только по внешним линиям
управления, таким как вход TEST. Микропроцессор 8088 не может
читать внутренние регистры микросхемы 8087, и наоборот. Все
данные, передаваемые между ними, должны быть помещены в память, к
которой оба процессора имеют доступ. Но из-за того, что регистры
адресации находятся в микропроцессоре 8088, микросхеме 8087 трудно
эффективно адресовать память, используя те же способы адресации,
которые используют микропроцессор 8088. Чтобы позволить микросхеме
8087 адресовать память с помощью способов адресации микропроцессора
8088, существует взаимодействие двух процессоров при выполнении
команд плавающей точки.
Набор команд микропроцессора 8088 содержит команду ESC, которая
сама по себе не выполняется в микропроцессоре 8088. В системах без
сопроцессора 8087 команда ESC идентична команде NOP - за
исключением того что для ее выполнения требуется большн времени.
Все команды ESC имеют встроенную адресную информацию, а именно, для
вычисления адреса, они используют байт mod=r/m. Несмотря на то,
что команда ESC действует как команда NOP, микропроцессор 8088
выполняет вычисление исполнительного адреса, а заетм выполняет
чтение памяти по результирующему адресу, хотя и не производит
никаких действий с данными. Если байт mod=r/m определяет регистр,
а не память микропроцессора 8088, никакого чтения памяти не
происходит.
Тем временем микросхема 8087 "наблюдает" за последовательностью
команд, выполняемых микропроцессором 8088. Когда микропроцессор
выполняет команду ESC, микросхема 8087 распознает эту команду, как
свою собственную. Затем микросхема 8087 ждет, пока микропроцесоор
8088 выполнить фиктивное чтение памяти. Когда адрес памяти
оказывается на системной шине, микросхема 8087 "захватывает" его, и
начиная с этого момента знает, где находятся данные в памяти, не
вычисляя при этом адреса. Микропроцессор 8088 вычисляет адрес, а
микросхема 8087 выполняет остальную часть команд. Теперь
микросхема 8087 может "похищать" некоторые циклы памяти для чтения
или записи данных, а микропроцесоор 8088 в это время продолжает
работу.
Микросхема 8087 добавляет арифметические возможности в систему,
но не замещает ни одну команду микропроцессора 8088. Команды ADD,
SUB, MUL и DIV, описанные в гл.4, выполняются микропроцессором
8088, а арифметический сопро- цессор 8087 выполняет дополнительные,
более эффективные команды арифметической обработки. С точки зрения
программиста, система с установленной в ней микросхемой 8087 должна
выглядеть, как единый процессор с большим набором команд, чем
простой микропроцессор 8088. Лишь в немногих местах надо помнить,
какой процессор какую команду выполняет. Только тогда, когда
микропроцессор 8088 должен непосредственно использовать результат
работы микросхемы 8087 и требуется синхронизирующая команда WAIT,
различать процессоры становится необходимо.
Когда вы используете Макроассемблер фирмы IBM, возникает
проблема при написании программ, использующих набор команд
микросхемы 8087. Чтобы использовать эту микросхему, нужно
сформировать ее команды, используя коды операций WAIT и ESC.
Наилучший способ сделать это - написать набор макрокоманд, которые
позволяют писать команды микросхемы 8087. В гл.6 были приведены
некоторые макрокоманды, необходимые для написания команд
сопроцессора 8087. Если вы собираетесь программировать микросхему
8087, вам нужно дописать примеры гл.6 для полного набора команд
сопроцессора 8087.