Математичний співпроцесор: відмінності між версіями

[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
виключень з плаваючою
Перенесено до:x87
Рядок 4:
 
Простим «цілочисловим» процесорам для роботи з дійсними числами і математичними операціями потрібні відповідні процедури підтримки та час для їх виконання. Математичний співпроцесор підтримує роботу з ними на рівні примітивів — завантаження, вивантаження дійсного числа (в/із спеціалізованих регістрів) або математична операція над ними виконується однією командою, за рахунок цього досягається значне прискорення таких операцій.
 
== Співпроцесори [[Intel]] сімейства [[x86]] ==
Для таких процесорів як 8086/88, 186/188, 286, 386, 486 були випущені співпроцесори для операцій з рухомою комою, як правило остання цифра у таких співпроцесорів була '''7''' (8087, 187, 287, 387, 487). Для установки співпроцесора на платі комп'ютера передбачалось окреме гніздо.
 
Співпроцесор не є повноцінним процесором, оскільки не вміє виконувати багатьох операцій (наприклад, не вміє працювати з програмою і обчислювати адреси пам'яті), він є всього лише додатком до центрального процесора.
 
Одна зі схем взаємодії центрального процесора і співпроцесора, використана зокрема в [[x86]], реалізована наступним чином:
 
* Співпроцесор підключений до шин центрального процесора, а також має декілька спеціальних сигналів для синхронізації процесорів між собою.
* Частина командних кодів центрального процесора зарезервована для співпроцесора, він стежить за потоком команд, ігноруючи інші команди. Центральний процесор, навпаки, ігнорує команди співпроцесора, займаючись тільки обчисленням адреси в пам'яті, якщо команда припускає до неї звернення. Центральний процесор робить цикл фіктивного зчитування, дозволяючи співпроцесору зчитати адресу з адресної шини. Якщо співпроцесору необхідно додаткове звернення до пам'яті (для читання або запису результатів), він виконує його через захоплення шини.
* Після отримання команди і необхідних даних співпроцесор починає її виконання. Поки співпроцесор виконує команду, центральний процесор виконує програму далі, паралельно з обчисленнями співпроцесора. Якщо наступна команда також є командою співпроцесора, процесор зупиняється і чекає завершення виконання співпроцесором попередньої команди.
* Також існує спеціальна команда очікування (FWAIT), що примусово зупиняє центральний процесор до завершення обчислень у співпроцесорі (якщо для продовження програми необхідні їх результати). В даний час{{коли}} команда використовується лише для обробки виняткових ситуацій при роботі з рухомою комою, робота процесора і співпроцесора синхронізується прозоро для програміста.
 
Починаючи з процесора Intel486DX модуль операцій з рухомоюю комою був інтегрований в центральний процесор і названий FPU. У лінійці Intel486SX модуль FPU вимикався (спочатку у цю лінійку потрапляли процесори з бракованим [[FPU]]). Для процесорів Intel486SX також випускався «співпроцесор» Intel487SX, але, фактично, він був процесором Intel486DX і при його установці процесор Intel486SX вимикався.
 
Незважаючи на інтеграцію, FPU в процесорах i486 являє собою незмінний співпроцесор, виконаний на тому ж кристалі, більше того, схема FPU i486 повністю ідентична співпроцесору попереднього покоління 387DX аж до тактової частоти (у два рази меншою, ніж частота центрального процесора). Справжня інтеграція FPU c центральним процесором почалася тільки в процесорах [[Pentium]] моделі [[MMX]].
 
=== Система команд співпроцесора ===
 
Система включає близько 80 команд. Їх класифікація:
 
* Команди передачі даних
** Дійсні дані
** Цілочисельні дані
** Десяткові дані
** Завантаження констант (0, 1, число Пі, log2 (10), log2 (e), lg (2), ln (2))
** Обмін
** Умовне пересилання ([[Pentium II]] / [[Pentium III|III]])
* Команди порівняння даних
** Дійсні дані
** Цілочисельні дані
** Аналіз
** З нулем
** Умовне порівняння (Pentium II / III)
* Арифметичні команди
** Дійсні дані: додавання, віднімання, множення, ділення
** Цілочисельні дані: додавання, віднімання, множення, ділення
** Допоміжні арифметичні команди (квадратний корінь, модуль, зміна знака, виділення порядку і мантиси)
* Трансцендентні команди
** Тригонометрія: синус, косинус, тангенс, арктангенс
** Обчислення логарифмів і степенів
* Команди управління
** Ініціалізація співпроцесора
** Робота з середовищем
** Робота зі стеком
** Перемикання режимів
 
== Див. також ==