Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

x87 - это связанное с плавающей запятой подмножество набора команд архитектуры x86 . Он возник как расширение набора инструкций 8086 в виде дополнительных сопроцессоров с плавающей запятой, которые работали в тандеме с соответствующими процессорами x86. Эти микрочипы имели названия, оканчивающиеся на «87». Это также было известно как NPX (расширение числового процессора ). Как и другие расширения базового набора инструкций, инструкции x87 не являются строго необходимыми для создания рабочих программ, но предоставляют аппаратные и микрокодовые реализации общих числовых задач, что позволяет выполнять эти задачи намного быстрее, чем соответствующий машинный код.рутина может. Набор команд x87 включает в себя инструкции для основных операций с плавающей запятой, таких как сложение, вычитание и сравнение, а также для более сложных числовых операций, таких как, например, вычисление касательной функции и ее обратной.

В большинстве процессоров x86, начиная с Intel 80486 , эти инструкции x87 были реализованы в основном процессоре, но этот термин иногда все еще используется для обозначения этой части набора инструкций. До того, как инструкции x87 стали стандартом для ПК, компиляторам или программистам приходилось использовать довольно медленные вызовы библиотек для выполнения операций с плавающей запятой, метод, который все еще распространен во (недорогих) встроенных системах .

Описание [ править ]

Регистры x87 образуют восьмиуровневую нестрогую структуру стека в диапазоне от ST (0) до ST (7) с регистрами, к которым можно получить прямой доступ любым операндом, используя смещение относительно вершины, а также нажимать и выталкивать. . (Эту схему можно сравнить с тем, как кадр стека может быть как вставлен / извлечен, так и индексирован.)

Есть инструкции для добавления, вычисления и извлечения значений поверх этого стека; унарные операции (FSQRT, FPTAN и т. д.) затем неявно адресуют самый верхний ST (0), тогда как двоичные операции (FADD, FMUL, FCOM и т. д.) неявно адресуют ST (0) и ST (1). Модель нестрогого стека также позволяет двоичным операциям использовать ST (0) вместе с прямым операндом памяти или с явно указанным стековым регистром, ST ( x ), в роли, аналогичной традиционному аккумулятору (комбинированный адресат и левый операнд ). Это также может быть отменено для каждой инструкции с ST (0) в качестве немодифицированного операнда и ST ( x ) в качестве пункта назначения.. Кроме того, содержимым ST (0) можно обмениваться с другим регистром стека с помощью инструкции FXCH ST ( x ).

Эти свойства позволяют использовать стек x87 как семь свободно адресуемых регистров плюс выделенный аккумулятор (или как семь независимых аккумуляторов). Это особенно применимо к суперскалярным процессорам x86 (таким как Pentium 1993 года и позже), где эти инструкции обмена (коды D9C8..D9CF h ) оптимизированы до нулевого штрафа тактовой частоты с использованием одного из целочисленных путей для FXCH ST ( x ) параллельно с инструкцией FPU. Несмотря на то, что это естественно и удобно для программистов на языке ассемблера, некоторые авторы компиляторов сочли сложным создание автоматических генераторов кода.которые эффективно планируют код x87. Такой интерфейс на основе стека потенциально может минимизировать потребность в сохранении временных переменных в вызовах функций по сравнению с интерфейсом на основе регистров [1] (хотя исторически проблемы проектирования в исходной реализации ограничивали этот потенциал [2] [3] ).

X87 обеспечивает двоичную арифметику с плавающей запятой одинарной, двойной и 80-битной двойной расширенной точности в соответствии со стандартом IEEE 754-1985 . По умолчанию все процессоры x87 используют внутреннюю 80-битную двойную расширенную точность (для обеспечения устойчивой точности во многих вычислениях, см. Обоснование конструкции IEEE 754 ). Таким образом, данная последовательность арифметических операций может вести себя несколько иначе по сравнению с FPU строгой одинарной или двойной точности IEEE 754. [4]Поскольку это иногда может быть проблематичным для некоторых получисловых вычислений, написанных с учетом двойной точности для правильной работы, чтобы избежать таких проблем, x87 может быть настроен с использованием специального регистра конфигурации / состояния для автоматического округления до одинарной или двойной точности после каждой операции. С момента появления SSE2 инструкции x87 не так важны, как раньше, но остаются важными как высокоточная скалярная единица для численных вычислений, чувствительных к ошибке округления и требующих 64-битной точности мантиссы и расширенного диапазона, доступных в 80-битный формат.

Производительность [ править ]

Тактовый цикл подсчитывается для примеров типичных инструкций x87 FPU (здесь показаны только версии регистр-регистр). [5]

... B обозначение ( от минимального до максимального) охватывает варианту синхронизации , зависящую от состояния переходного трубопровода и арифметической точности выбранной (32, 64 или 80 бит); он также включает вариации из-за числовых случаев (например, количество установленных битов, ноль и т. д.). Обозначение L → H отображает значения, соответствующие самой низкой (L) и самой высокой (H) максимальным тактовым частотам, которые были доступны.

* Эффективная задержка нулевого тактового сигнала часто возможна за счет суперскалярного выполнения.
§ 8087 5 МГц был оригинальным процессором x87. По сравнению с типичными программно реализуемыми подпрограммами с плавающей запятой на 8086 (без 8087), коэффициенты были бы даже больше, возможно, еще в 10 раз (то есть правильное добавление чисел с плавающей запятой на языке ассемблера может потребовать более 1000 циклов. ).

Производители [ править ]

Компании, разработанные или изготовленные [а] с плавающей запятой блоки , совместимые с Intel 8087 или более поздних моделей включают AMD ( 287 , 387 , 486DX , 5x86 , K5 , K6 , K7 , K8 ), чипсы и технологии (в супер МАТЕМАТИКА сопроцессоры) , Cyrix ( FasMath , Cx87SLC , Cx87DLC и т. Д., 6x86 , Cyrix MII ), Fujitsu (ранний Pentium Mobile и т. Д.),Harris Semiconductor (производил процессоры 80387 и 486DX ), IBM (различные модели 387 и 486 ), IDT ( WinChip , C3 , C7 , Nano и т. Д.), IIT ( 2C87 , 3C87 и т. Д.), LC Technology ( зеленый Сопроцессоры MATH ), National Semiconductor ( Geode GX1 , Geode GXm и т. Д.), NexGen ( Nx587 ), Rise Technology (mP6 ), ST Microelectronics (производство 486DX , 5x86 и т. д.), Texas Instruments (производство процессоров 486DX и т. д.), Transmeta ( TM5600 и TM5800 ), ULSI ( сопроцессоры Math · Co ), VIA ( C3 , C7 и Nano и др.) И Xtend ( 83S87SX-25 и другие сопроцессоры).

Архитектурные поколения [ править ]

8087 [ править ]

8087 был первым математическим сопроцессором для 16-разрядных процессоров , разработанных Intel . Он был построен для работы с микропроцессорами Intel 8088 или 8086 . ( Более ранние процессоры Intel с плавающей запятой 8231 и 8232 , продаваемые для использования с ЦП i8080, на самом деле были лицензионными версиями процессоров AMD Am9511 и Am9512 с 1977 по 1979 год [6] ).

80187 [ править ]

Версия Intel 80187 с тактовой частотой 16 МГц

80187 ( 80C187 ) [7] является математическим сопроцессором для Intel 80186 CPU. Он не может работать с 80188, так как 80188 имеет восьмибитную шину данных; 80188 может использовать только 8087. 80187 не появился одновременно с 80186 и 80188, но фактически был запущен после 80287 и 80387. Хотя интерфейс с основным процессором такой же, как у 8087 , его ядро совпадает с ядром 80387 и, таким образом, полностью соответствует стандарту IEEE 754 и способно выполнять все дополнительные инструкции 80387. [8]

80287 [ править ]

80287 ( i287 ) является математическим сопроцессором для 80286 Intel серии из микропроцессоров . Модели Intel включали варианты с указанными верхними частотными пределами от 6 до 12 МГц. Позже последовали i80287XL с микроархитектурой 387 и i80287XLT, специальная версия, предназначенная для ноутбуков, а также другие варианты.

80287XL на самом деле является 80387SX с 287 распиновкой. Он содержит внутренний множитель 3/2, так что материнские платы, на которых сопроцессор работает на 2/3 скорости ЦП, могли вместо этого запускать FPU с той же скоростью, что и ЦП. Другие модели 287 с производительностью, подобной 387, - это Intel 80C287, построенный с использованием CHMOS III, и AMD 80EC287, изготовленный по технологии AMD CMOS с использованием только полностью статических вентилей.

80287 и 80287XL работают с микропроцессором 80386 и изначально были единственными сопроцессорами, доступными для 80386 до выпуска 80387 в 1987 году. Наконец, они смогли работать с Cyrix Cx486SLC . Однако для обеих этих микросхем 80387 является предпочтительным из-за его более высокой производительности и большей функциональности его набора команд.

  • 6 МГц версия Intel 80287

  • Intel 80287 штамп

  • Intel 80287XL

  • Intel 80287XLT

80387 [ править ]

Изображение кристалла процессора Intel 80387

80387 ( 387 или i387 ) является первым Intel сопроцессор , чтобы быть полностью совместим с IEEE 754-1985 стандарта. Выпущенный в 1987 году, спустя целых два года после чипа 386, i387 отличается значительно большей скоростью по сравнению с предыдущими сопроцессорами Intel 8087/80287 и улучшенными характеристиками его тригонометрических функций. Команды FPTAN и FPATAN 8087 и 80287 ограничены аргументом в диапазоне ± π / 4 (± 45 °), а 8087 и 80287 не имеют прямых инструкций для функций SIN и COS. [9] [ требуется полная ссылка ]

Без сопроцессора 386 обычно выполняет арифметические операции с плавающей запятой с помощью (относительно медленных) программных подпрограмм, реализованных во время выполнения через программный обработчик исключений . Когда математический сопроцессор соединен с 386, сопроцессор выполняет арифметические операции с плавающей запятой аппаратно, возвращая результаты намного быстрее, чем (имитирующий) вызов программной библиотеки.

I387 совместим только со стандартным чипом i386, который имеет 32-битную шину процессора. Уменьшенный позже i386SX, который имеет более узкую 16-битную шину данных , не может взаимодействовать с 32-битной шиной i387. Для i386SX требуется собственный сопроцессор 80387SX , совместимый с более узкой 16-битной шиной данных SX.

  • i387

  • i387SX

  • i387DX

  • Микроархитектура i387 с 16-битным баррель-шифтером и блоком CORDIC

  • i386DX с i387DX

  • Розетка для 80387

80487 [ править ]

i487SX

I487SX (P23N) был продан как блок с плавающей точкой сопроцессора для Intel i486SX машин. Фактически он содержал полноценную реализацию i486DX . При установке в систему i486SX i487 отключил основной ЦП и взял на себя все операции ЦП. I487 принял меры для обнаружения присутствия i486SX и не мог работать без установленного исходного процессора. [10]

80587 [ править ]

Nx587 был последним FPU для x86 должен быть изготовлен отдельно от процессора, в этом случае Nexgen в Nx586 .

См. Также [ править ]

  • MMX
  • SSE , SSE2 , SSE3 , SSSE3 , SSE4
  • AVX
  • 3DNow!
  • SIMD

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

  1. Уильям Кахан (2 ноября 1990 г.). «О преимуществах стека 8087» (PDF) . Неопубликованные заметки по курсу, Отдел компьютерных наук, Калифорнийский университет в Беркли . Архивировано 18 января 2017 года из оригинального (PDF) .
  2. Уильям Кахан (8 июля 1989 г.). «Как обрабатывать переполнение / недостаточное заполнение стека Intel 8087» (PDF) . Архивировано из оригинального (PDF) 12 июня 2013 года.
  3. ^ Джек Woehr (1 ноября 1997). «Разговор с Уильямом Каханом» .
  4. ^ Дэвид Монниа, « Подводные камни проверки вычислений с плавающей запятой» , которые появятся в ACM TOPLAS.
  5. ^ Цифры взяты из технических паспортов соответствующих процессоров, руководств по программированию и руководств по оптимизации.
  6. ^ "Арифметические процессоры: тогда и сейчас - Музей лачуги ЦП" . www.cpushack.com . Проверено 14 апреля 2018 года .
  7. ^ "Коллекция ЦП - Модель 80187" . cpu-info.com . Проверено 14 апреля 2018 года .
  8. ^ "80C187 80-БИТНЫЙ МАТЕМАТИЧЕСКИЙ КОПРОЦЕССОР" (PDF) . datasheetcatalog.org . Ноября 1992 . Дата обращения 11 августа 2020 .
  9. ^ Документация по Borland Turbo Assembler.
  10. ^ Intel 487SX в бесплатном онлайн-словаре вычислительной техники
  • Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 Том 1: Базовая архитектура (PDF) . Intel.

Заметки [ править ]

  1. ^ Компании Fabless разрабатывают микросхемы и полагаются на фабричную компанию в производстве, в то время как фабричные компании могут заниматься проектированием и производством самостоятельно.

Внешние ссылки [ править ]

  • Все, что вы всегда хотели знать о математических сопроцессорах