Intel 8087

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Intel 8087
Центральный процессор
Intel C8087.jpg
Математический сопроцессор Intel 8087
Производство: 1980
Разработчик: Intel
Производители:
Частота ЦП: 4—10 MHz
Частота FSB: 4—10 MHz
Технология производства:
3 μm мкм
Наборы инструкций: x86-16, x87
Число ядер: 1

Intel 8087 – первый математический сопроцессор для линейки процессоров 8086 (x87), выпущенный в 1980 году компанией Intel[3][4].

Сопроцессор 8087 был предназначен для увеличения быстродействия при вычислениях с плавающей точкой за счёт ускорения таких операций как сложение, вычитание, деление и извлечение квадратного корня. Он также мог вычислять трансцендентные функции, например экспоненциальную функцию, логарифмы и тригонометрические функции. Прирост производительности от установки сопроцессора составлял от 20% до 500%, в зависимости от специфики задач. Intel 8087 имел производительность около 50000 Флопс[3] и потреблял примерно 2,4 Ватт[4]. Выгода от установки 8087 проявлялась только при выполнении математических операций. Компьютеры, использовавшиеся, например, для обработки текстов, не выигрывали от дополнительных расходов (примерно $150[5]) и увеличения потребляемой мощности.

Продажи 8087 значительно повысились, когда фирмой IBM сокет сопроцессора был включён в материнскую плату IBM PC. Появление сопроцессора привело к созданию стандарта IEEE 754-1985 для арифметики с плавающей точкой. Поздние процессоры Intel, начиная с 80486, имеют встроенный арифметический сопроцессор (за исключением 486SX — для них выпускался сопроцессор 487SX, который можно было не устанавливать).

Разработка и развитие[править | править вики-текст]

Ранее компанией Intel выпускались микросхемы 8231 «Арифметического процессора» и 8232 «Процессора операций с плавающей точкой». Они были разработаны для использования с процессором 8080 или его аналогами и использовали 8-битную шину данных. Основной процессор взаимодействовал с ними через инструкции ввода-вывода, либо через контроллер DMA[6].

Первый сопроцессорор 8087 был выпущен в 1980 году и содержал 45000 транзисторов. Он был изготовлен по техпроцессу 3 мкм. Производство Intel 8087 осуществлялось в Малайзии[4].

Для сопроцессора было введено около 60 новых инструкций, название которых начиналось на «F», для того, чтобы отличать их от целочисленных инструкций Intel 8086. Например, аналоги команд ADD/MUL/CMP, в 8087 выглядели как FADD/FMUL/FCOM. Бинарные кодировки для всех новых инструкций начинались с комбинации битов 11011, десятичного 27, как ASCII символ ESC; такие префиксы инструкций иногда назывались Escape-кодами.

Приложения должны были быть специально написаны для использования инструкций с плавающей точкой. Во время запуска программа должна была определить наличие сопроцессора и использовать его для этих инструкций; в противном случае, инструкции сопроцессора должны были эмулироваться программно[5].

Регистры[править | править вики-текст]

Упрощённая архитектура Intel 8087. Слева - блок управления: буфер данных, регистры статуса и адресации. Справа - блок исполнения: стек регистров, модуль изменения экспонент, модуль программируемого сдвига, арифметический модуль, временные регистры.

Семейство сопроцессоров x87 вместо непосредственно адресуемых регистров как в архитектуре x86, использует восьмиуровневый стек регистров[7], при этом возможно обращаться к любому элементу стека по индексу от st0 до st7, где st0 — вершина стека. Положение вершины стека задается полем ST регистра состояния. Инструкции при выполнении извлекают операнды с вершины стека и проталкивают результаты в стек. Инструкции с двумя операндами типа FADD, FMUL, FCOM могут оперировать как с двумя верхними элементами стека, так и напрямую брать один из операндов из произвольной позиции стека.

Стандарт IEEE для чисел с плавающей точкой[править | править вики-текст]

При создании сопроцессора 8087 компания Intel рассчитывала стандартизировать формат чисел с плавающей точкой для последующих разработок. С исторической точки зрения важность 8087 состоит в том, что он стал основой для стандарта с плавающей точкой IEEE 754. Поскольку стандарт IEEE 754 находился в разработке до 1985 года, сопроцессор 8087 не полностью ему соответствовал, однако уже в сопроцессоре Intel 80387 было достигнуто полное соответствие стандарту. 8087 обеспечивал два основных типа данных с плавающей точкой (32-битный с одинарной точностью и 64-битный с двойной точностью), а также расширенный 80-битный формат для повышения точности больших и сложных расчётов. Помимо этого, 8087 предлагал 80-битный/18-значный двоично-десятичный формат, а также 16, 32 и 64-битные целочисленные типы[7].

Подключение сопроцессора[править | править вики-текст]

Сопроцессор 8087 отличается от более поздних моделей сопроцессоров Intel тем, что он напрямую подключается к шинам адреса и данных. Процессоры 8086 и 8088 при нахождении инструкций, начинающихся с последовательности '11011' передают управление сопроцессору. Сопроцессор содержит такую же очередь инструкций как и процессор (настройка очереди на параметры процессора 8086 или 8088 производится путём анализа сигнала BHE# после аппаратного сброса). Если инструкция требует обмена данными с памятью, процессоры 8088 или 8086 вычисляют их адрес и выполняют фиктивный цикл чтения, игнорируя сами данные. Фактическое чтение данных выполняет сопроцессор. Если требуется чтение более одного слова (байта), сопроцессор запрашивает управление шиной и выполняет чтение оставшейся части операнда, последовательно наращивая адрес[8].

После передачи сопроцессору инструкции основной процессор немедленно приступает к обработке следующей. Поэтому процессоры 8086 или 8088 могут работать параллельно с сопроцессором 8087. Однако, это может привести к двум нежелательным ситуациям:

  • если подряд идут несколько инструкций с плавающей точкой, сопроцессор может быть не готов к приёму очередной инструкции
  • если основной процессор должен обратиться к тем же данным, которые должна изменить инструкция сопроцессора, он может выполнить это обращение раньше, чем закончится инструкция сопроцессора[9]

Для синхронизации процессора и сопроцессора используется инструкция FWAIT, останавливающая работу основного процессора до появления сигнала от сопроцессора о том, что он завершил обработку. Транслятор с языка ассемблера автоматически вставляет эту инструкцию перед каждой инструкцией сопроцессора 8087[10]. В более поздних моделях сопроцессоров необходимость добавлять инструкцию FWAIT перед каждой инструкцией с плавающей точкой отпала, однако инструкция всё ещё нужна для синхронизации процессоров в случае их обращения к одним и тем же данным[11].

Существует риск отказа программы в случае невозможности декодирования инструкции сопроцессором. В более поздних моделях сопроцессоров Intel не использовалось такое подключение к шинам, а инструкции передавались сопроцессору основным процессором. Хотя это приводило к задержке выполнения инструкций, в то же время это позволяло избежать риска отказа программы, поскольку основной процессор проигнорирует инструкцию, которую не принял сопроцессор.

Ссылки[править | править вики-текст]

  1. Shvets, Gennadiy AMD 8087 floating-point unit. CPU World (8 October 2011). Проверено 1 декабря 2011. Архивировано из первоисточника 26 января 2013.
  2. Shvets, Gennadiy Cyrix 8087 floating-point unit. CPU World (8 October 2011). Проверено 1 декабря 2011. Архивировано из первоисточника 26 января 2013.
  3. 1 2 8087. Coprocessor Dot Info(недоступная ссылка — история) (2007). Проверено 1 декабря 2011. Архивировано из первоисточника 7 июня 2008.
  4. 1 2 3 Intel FPU. cpu-collection.de (2011). Проверено 1 декабря 2011. Архивировано из первоисточника 26 января 2013.
  5. 1 2 Scott Mueller, Upgrading and repairing PCs, second edition, Que Books, 1992 ISBN 0-88022-856-3, pages 395-403
  6. Intel Component Data Catalog 1980, Intel catalog no. C-864/280/150K/CP, pages 8-21, 8-28
  7. 1 2 Shvets, Gennadiy Intel 8087 family. CPU World (8 октября 2011). Проверено 1 декабря 2011. Архивировано из первоисточника 1 сентября 2013.
  8. Михаил Гук. Процессоры Intel: от 8086 до Pentium II. — СПб: Питер, 1997. — С. 24. — 224 с. — ISBN 5-88782-398-4.
  9. M. Krishna Kumar. Микропроцессоры и микроконтроллеры/Сопроцессор Замечания к лекциям.
  10. Karen A. Lemone. Assembly Language and Systems Programming for the IBM PC and Compatibles. — Little, Brown and Comp., 1985. — С. 300. — ISBN 0-316-52069-1.
  11. Морс С.П., Алберт Д.Д. Архитектура микропроцессора 80286 = The 80286 architecture. — М.: Радио и связь, 1990. — С. 160. — 304 с. — ISBN 5-256-00466-2.

Дополнительные ссылки[править | править вики-текст]