Ця стаття не містить посилань на джерела. Ви можете допомогти поліпшити цю статтю, додавши посилання на надійні (авторитетні) джерела. Матеріал без джерел може бути піддано сумніву та вилучено. (травень 2019)

x87 — це спеціальний набір інструкцій для роботи з математичними обчисленнями, є підмножиною архітектури процесорів x86. Таку назву він отримав, тому що початкові окремі математичні співпроцесорні чипи мали назви, що закінчуються на 87. Як і інші розширення базового набору інструкцій процесора, ці інструкції не є строго необхідними для побудови робочої програми, але загальні математичні завдання вони дозволяють виконувати набагато швидше, коли реалізовані апаратно. Наприклад, у наборі інструкцій x87 присутні команди для розрахунку значень синуса або косинуса.

Опис

Всі процесори Intel і AMD, починаючи з 486DX, мають вбудований математичний співпроцесор, і окремого співпроцесора не потребують (за винятком Intel486SX). Тим не менш, термін x87 все ще використовується для виділення тієї частини інструкцій процесора, яка займається обчисленнями з рухомою комою; компілятори можуть використовувати ці інструкції для генерації коду, який працює швидше, ніж той, що використовує виклики до бібліотек для виконання операцій з рухомою комою.

Інструкції x87 сумісні зі стандартом IEEE 754. Однак, x87 виконують операції не в суворій відповідності з форматами IEEE 754, через використання більш широких регістрів. Тому послідовність арифметичних операцій може виконуватися дещо по-іншому на наборі x87 і на процесорі, який суворо дотримується формату IEEE 754.

x87 організовує свої регістри не як масив, як більшість інших архітектур, а як регістровий стек, що працює за принципом зворотного польського запису. Це означає, що в один момент часу для здійснення операцій доступні тільки два верхніх регістри, а доступ до інших регістрів вимагає маніпуляцій зі стеком. Хоча така організація виходить і зручною для програмістів, вона робить трудомістким побудову ефективного коду x87 для компіляторів.

Починаючи з Pentium III, обчислення за допомогою інструкцій SSE здійснюються з одинарною точністю, а в пізніших версіях — з подвійною точністю форматів IEEE 754. Після появи SSE2, використання x87 значною мірою применшується в 64-розрядних архітектурах x86-64 і пов'язаних з нею 64-бітних реалізаціях операційних систем, таких як Microsoft Windows, Mac OS X, Solaris, FreeBSD та Linux, хоча він як і раніше добре підтримується для повної сумісності зі старими програмами.

Співпроцесори сімейства x87

Для таких процесорів як 8086/88, 186/188, 286, 386, 486 були випущені співпроцесори для операцій з рухомою комою, як правило остання цифра у таких співпроцесорів була 7 (8087, 187, 287, 387, 487). Для установки співпроцесора на платі комп'ютера передбачалось окреме гніздо.

Співпроцесор не є повноцінним процесором, оскільки не вміє виконувати багатьох операцій (наприклад, не вміє працювати з програмою і обчислювати адреси пам'яті), він є всього лише додатком до центрального процесора.

Одна зі схем взаємодії центрального процесора і співпроцесора, використана зокрема в x86, реалізована наступним чином:

Починаючи з процесора Intel486DX модуль операцій з рухомоюю комою був інтегрований в центральний процесор і названий FPU. У лінійці Intel486SX модуль FPU вимикався (спочатку у цю лінійку потрапляли процесори з бракованим FPU). Для процесорів Intel486SX також випускався «співпроцесор» Intel487SX, але, фактично, він був процесором Intel486DX і при його установці процесор Intel486SX вимикався.

Незважаючи на інтеграцію, FPU в процесорах i486 являє собою незмінний співпроцесор, виконаний на тому ж кристалі, більше того, схема FPU i486 повністю ідентична співпроцесору попереднього покоління 387DX аж до тактової частоти (у два рази меншою, ніж частота центрального процесора). Справжня інтеграція FPU c центральним процесором почалася тільки в процесорах Pentium моделі MMX.

Система команд співпроцесора

Система включає близько 80 команд. Їх класифікація:

Див. також

Джерела

Ця стаття є заготовкою. Ви можете допомогти проєкту, доробивши її. Це повідомлення варто замінити точнішим.