- •Міністерство транспорту та зв'язку України Державний економіко-технологічний університет транспорту Кафедра “Інформаційні системи й технології”
- •Київ-2007
- •1.Завдання Розробити спеціалізовану мікропроцесорну систему у складі *
- •2. Основні функціонально-конструктивні пристрої
- •2.1. Мікропроцесор.
- •2.1.1. Загальні відомості.
- •2.1.2. Призначення виводів мікропроцесора (на прикладі мпс к1810вм86).
- •2.1.3. Структура мікропроцесора
- •2.1.4. Функціонування мікропроцесора
- •2.2Арифметичний співпроцесор.
- •2.2.1. Призначення виводів віс к1810вм87
- •2.2.2. Функціонування арифметичного співпроцесора
- •2.2.3. Спеціальнє використання арифметичного співпроцесора
- •2.3.Спвб:
- •2.3.1. Структура спвб
- •2.3.2Функціонування спвб
- •Поле р визначає пріоритет каналу. •
- •2.3.3. Система команд спвв
- •3. Розрахунок адресного простору пам’яті та портів
- •4. Організація переривань
- •5. Структура однопроцесорної системи
- •7.1. Генератор тактових імпульсів
- •7.2. Буферні регістри й шинні формувачі.
- •7.3. Контролер системної шини
- •7.4. Арбітр шин
- •8.1. Контролер прямого доступу пам'яті.
- •10 Література
- •03049, М. Київ-49, вул. Миколи Лукашевича, 19
2.2.3. Спеціальнє використання арифметичного співпроцесора
Тут коротко описані ситуації, що досить рідко зустрічаються на практиці, але що представляють певний інтерес для користувачів. До них ставляться дії співпроцесора над денормалізованими й ненормалізованими числами, кодами нулів, ± оо й NAN. Крім того, описані стандартні дії співпроцесора при виникненні різних замаскованих виняткових ситуацій.
Денормалізовані числа виникають у результаті обчислень, що приводять до виняткової ситуації антипереповнення (UE = 1), коли вона замаскована (UM=1). Антипереповнення відбувається, якщо порядок результату настільки малий, що не може бути представлений у потрібному форматі. Наприклад, значення порядку -130 викликає антипереповнення, коли результат повинен бути представлений у форматі KB, оскільки найменший уявний порядок дорівнює -126. Звичайно, це значення порядку не викликає антипереповнення при форматі результату DB або ВВ, тому що їх найменші уявні порядки рівні-1 023 і -16383 відповідно.
Незамаскована реакція АСП ВМ87 на антипереповнення виражається в припиненні подальших обчислень і видачі запиту переривання, якщо результат повинен бути записаний на згадку. Якщо приймачем результату є регістр, співпроцесор додає до щирого значення порядку константу 24 576, записує результат і видає запит переривання. Ця константа повертає значення експоненти в уявний формат ВВ і при подальшій обробці переривання її варто відняти для одержання щирого значення порядку.
Масковані антипереповнення дозволяє продовжувати обчислення, не обертаючи уваги на денормалізовані числа. Часто в процесі подальших обчислень виходить нормалізований результат. Щоб переконатися в цьому, досить послу завершення обчислень проаналізувати прапор IE. Якщо 1Е = 0, то кінцевий результат правильний.
Дії співпроцесора й результати цих дій з денормалізованими операндами представлені в табл. 3.15.
Ненормалізовані числа утворяться з денормалізованих чисел і також виникають при замаскованому антипереповненні. Ненормалізовані числа існують тільки у форматі ВВ (див. табл. 3.5), вони можуть мати по рядок, схожий з порядком нормалізованих чисел, але відрізняються від них тим, що перша цифра їхньої мантиси завжди дорівнює «ПРО».
З ненормалізованими числами співпроцесор оперує як з нормалізованими, причому в процесі обчислень результат може нормалізуватися. Наприклад, при Додаванню ненормалізованого числа з більшим нормалізованим числом результат буде нормалізованим. Особливості дій з ненормалізованими операндами представлені в табл. 3.16. Рядом особливостей володіють дії співпроцесора над числами, представленими кодами нулів. Як показано в табл. 3.3, формати цілих чисел містять код +0, у той час як формати речовинних і двоїчно-десяткових чисел включають коди +0 і -0. У табл. 3.17 показані особливості різних дій співпроцесора з нульовими операндами, а також особливості одержання нульових результатів, коли операндами є ненульові значення, позначені через X і Y.
Таблиця 3.15 | |
Дії співпроцесора ВМ 87 |
Результат |
FLD (КВ.ДВ) |
Операнд завантажується як еквівалентне ненормалізоване значення; установлюється прапор DE = 1 |
Арифметичні |
Перед виконанням операції, операнди перетворяться в еквівалентні, ненормалізовані. Установлюється прапор DE = 1 |
Розподіл, дільник денормалізован |
Код невизначеності; встановлюється прапор IE = 1 |
Тільки один формат ВВ включає спеціальний клас значень, які можна назвати псевдо-нулями. Це такі ненормалізовані числа, мантиса яких містить всі нулі, а порядок не нульової (звичайні нулі мають нульовий порядок). Ніякий псевдо-нуль не може мати порядок, що складається із всіх одиниць, тому що він зарезервований для NAN. Псевдо-нульовий результат може бути отриманий у тих випадках, коли два ненормалізованих операнда, що мають у сумі більш ніж 64 старших нульових біта, перемножуються.
Псевдо-нульові операнди обробляються як звичайні ненормалізовані операнди, за винятком випадків виконання команд порівняння й команди FTST; команди FRNDINT; команди розподілу, коли ділене нуль або псевдо-нуль (дільник псевдо-нуль). У перерахованих ситуаціях псевдо-нулі дають ті ж результати, що й звичайні нулі. Коли в якості операндів виступають коди ± оо, результати дій співпроцесора в ряді випадків залежать від режиму роботи співпроцесора (проективний або аффинний). У табл. 3.18 представлені результати операцій ВМ87 у двох зазначених режимах.
На закінчення приведемо опис стандартних дій співпроцесора у відповідь на замасковані виняткові ситуації. У табл. 3.19 перераховуються всі умови, що приводять до виняткових ситуацій, і реакція співпроцесора.
Таблиця 3.16 | |
Дії співпроцесора ВМ 87 |
Результат |
Додавання, вирахування |
Нормалізація операнду й одержання найбільшого нормалізованого значення результату |
Множення |
Не нормалізований |
Розподіл (ненормалізоване ділене) |
>> |
FPREM (ненормалізоване ділене) |
Нормалізований |
Розподіл, FPEEM (ненормалізований дільник) |
Установлюється флаг 1Е=1 |
Порівняння, FTST |
Операнди нормалізуються перед порівнянням |
FRNDINT |
Операнди нормалізуються перед округленням |
FSQRT |
встановлюється флаг IE=1 |
FST, FSTP(КВ,ДВ) |
Якщо не відбулося антипереповнення, встановлюється флаг IE=1, інакше UE=1 |
FSTP(ВB) |
Записується ненормалізованим |
FIST, FISTP, FBSTP |
встановлюється флаг 1Е=1 |
FLD |
Завантажується ненормалізований |
FXCH |
Обмін ненормалізованими операндами |
Трансцендентні операції |
Невизначений, операнди повинні бути нормалізовані |
Дії співпроцесора над кодами NAN, що позначають «не числа», приводять до установки прапора недійсної операції 1Е=1 і запиту переривання. У тих випадках, коли ця виняткова ситуація замаскована, те будь-яка операція з операндом NAN дає як результат той же код NAN. Якщо в операції обоє операнда є NAN, то як результат вибирається код того з них, що має більше абсолютне значення. Інакше кажучи, код NAN, використовуваний як вихідний операнд, не застосовується в процесі обчислень і є результатом. (Виключення становлять команди трансцендентних операцій, які не аналізують свої операнди й NAN дає невизначений результат). Размаскував недійсні операції (1М = 0), програміст може використовувати коди NAN для виклику підпрограми-оброблювача переривання по Ш=1
.
Таблиця 3.17 | |||
Операції/операнди |
Результат |
Операції/операнди |
Результат |
FLD.FBLD |
|
Ділення |
|
±0 |
±0 |
±0/±0 |
IE=1 |
FILD |
|
±X/±X |
ZE=1 |
+0 |
+ 0 |
±0/±X |
+0 |
FST,FSTP |
|
0/ X |
-0 |
±0 |
±0 |
±X/±Y |
+0, UE=1 |
±X1 |
±0 |
±X/ Y |
-0, UE=1 |
FBSTP |
|
FPREM |
|
±0 |
±0 |
±0 MOD ±0 |
IE=1 |
FIST,FISTP |
|
±X MOD ±0 |
l=l |
±0 |
+0 |
±0 MOD ±X |
+0 |
±X (|X|;<1) |
+0 |
±0 MOD X |
IE=1 |
Додавання |
|
+X MOD ±Y |
+0 |
±0 + ±0 |
±0 |
-X MOD ±X |
-0 |
+ 0 + -0 |
*0 |
|
|
±X + Y |
*0 |
FSQRT |
|
±0 + ±x |
(ЗНАК X) 0 |
±0 |
±0 |
Віднімання |
|
Порівняння |
|
+0 - -0 |
+0 |
±0 ? +X |
<(C3C0=0l) |
-0 - +0 |
-0 |
±0 ? ±0 |
=(C3CO=10) |
±0 - ±0 |
*0 |
+ 0 ? -X |
>(C3CO=00) |
±X-±X |
*0² |
FTST |
|
±0-±X |
(знак X) 0 |
±0 |
= (C3C0=10) |
Множення |
|
FCHS |
|
±0 x ±0 |
+ 0 |
±0 |
±0 |
±0 x 0 |
-0 |
FABS |
|
±0 x ±X |
+0 |
±0 |
±0 |
±0 x X |
-0 |
F2XM1 |
|
±X x ±Y |
-0, UE=1 |
±0 |
±0 |
±X x Y |
-0, UE=1 |
FRNDINT |
|
|
|
EXTRACT |
±0 |
|
|
±0 |
Обоє дорівнюють нулю |
|
|
|
|
1) У ряді випадків запису у форматі KB, ДВ, коли флаг UE=1 2) * - знак визначається заданим режимом округлення: позитивний при RC = 00,10,11, негативний при RC = 01. |
Таблиця 3.18 | ||
Операція |
Проективний результат |
Афінний результат |
Ділення | ||
/ |
IE=1 |
IE=1 |
/Х |
|
|
Х/ |
0 |
0 |
FSQRT | ||
+ |
IE=1 |
+ ¥ |
- |
IE=1 |
IE=1 |
FREM | ||
¥ MOD ¥ |
IE=1 |
IE=1 |
±¥ MOD ±X |
IE=1 |
IE=1 |
±Y MOD ± |
*Y |
*Y |
±0 MOD ± |
*0 |
*0 |
FRNDINT | ||
±¥ |
* |
* |
FSCALE | ||
±¥ scale ±¥ |
IE=1 |
IE=1 |
±¥ scale ±X |
*¥ |
*¥ |
±0 scale ±¥ |
*0 |
*0 |
±Y scale ±¥ |
IE=1 |
IE=1 |
EXTRACT | ||
±¥ |
IE=1 |
IE=1 |
Порівняння | ||
? ±¥ |
= |
-¥<+¥ |
±¥ ? ±Y |
? (IE=1) |
-¥<Y<+¥ |
±¥ ? ±0 |
? (IE=1) |
-¥<0<+¥ |
FTST | ||
±¥ |
? (IE=1) |
*¥ |
Додавання | ||
±¥ + ±¥ |
IE=1 |
+¥ |
±¥ + ±¥ |
IE=1 |
IE=1 |
±¥ + X |
*¥ |
*¥ |
Віднімання | ||
- |
IE=1 |
±¥ |
- |
IE=1 |
IE=1 |
- |
*¥ |
*¥ |
Х - |
(Знак Х) |
(Знак Х) |
Множення | ||
±¥ x ±¥ |
Å¥ |
Å¥ |
±¥ x ±¥ |
Å¥ |
Å¥ |
±¥ x ±¥ |
IE=1 |
IE=1 |
Примітка. Х – нульовий або ненульовий операнд; У – ненульовий операнд; * - знак операнда, що не є ; - знак, рівний сумі по модулю два знаків операндів; ? – операнди не порівнювані (С3С0=11) |
Зазначені властивості коду NAN зручно використовувати для спеціальних цілей. Наприклад, програміст може попередньо всі масиви заповнити кодами NAN, причому різним елементам масиву привласнити різні коди, що містять у мантисі куркульок індексу елемента. Якщо прикладна програма в якості операнда-джерела скористається елементом, значення якого не сформоване в процесі попередніх обчислень, то він буде мати код NAN. При незамаскованих недійсних операціях програма – оброблювач переривань може визначити, де й з якого масиву взятий цей елемент (по адресах команди й операнда в ЕР), а також індекс елемента (по коду в мантисі NAN).
Коди NAN дозволяє значно спростити й прискорити процес пошуку помилок у програмі при її налагодженні. Це тим більше корисно, що на ранніх стадіях тестування програми містять багато помилок. Програму – оброблювач переривань для діагностування помилок будують так, щоб при кожному виклику вона запам'ятовувала необхідну діагностичну інформацію, а як результат видавала код NAN, у мантисі якого розміщається код покажчика, що визначає адреса діагностичної інформації. Потім програма що тестується продовжує обчислення, а програма-оброблювач формує різні коди NAN при кожній помилці. Результат виконання програми NAN указує місце розташування діагностичної інформації. Це дозволяє легко виявляти й виправляти помилки, що приводять до різних виняткових ситуацій у процесі налагодження.
Таблиця 3.19 | |
Умови |
Реакція ВМ87 |
Недійсна операція | |
Регістр-джерело пустий (TAG=11) |
Повертає код невизначеності (в форматі ВВ) |
Регістр-приймач заповнений (TAG=11) |
Записує в нього код невизначеності (в форматі ВВ) |
Один або декілька операндів NAN |
Повертає код NAN з великим абсолютним значення |
Один або обидва операнди NAN, один операнд проективний (в команді порівняння FTST) |
Встановлює код „непорівнювані” (С3С0=11) |
Операнди – коди нескінченності з протилежними знаками (афінна арифметика) або обидва операнди (проективна арифметика, знак не грає ролі) – команди додавання і віднімання |
Повертає код невизначеності (в форматі ВВ) |
Множення х 0 або 0 х |
Те ж саме |
Ділення /, 0/0, 0/псевдонуль, дільник не нормалізований або денормалізований |
>> |
Команда FPREM – дільник не нормалізований чи денормалізований |
Повертає код невизначеності (в форматі ВВ), встановлює код „Команда завершена” (С2=0) |
Команда FSQRT оператор не нормалізований чи денормалізований відємне число, що не дорівнює нулю, - (аффінна арифметика), (проектна арифметика) |
Повертає код невизначеності (в форматі ВВ) |
Команди FIВT, FISTP – регістр-джерело пустий, денормалізований чи ненормалізований, NAN, , не може бути представлений в заданому форматі |
Записує код невизначеності (в форматі ВВ) |
Команда FBSTP – регістр-джерело пустий, денормалізований чи ненормалізований, NAN, , перевищує 18 десяткових цифр |
Записує код невизначеності (в форматі ДД) |
Команди FST, FSTP – регістр-джерело містить ненормалізовані значення, а регістр-приймач визначений форматом КВ або ДВ |
Запам’ятовує код невизначеності (в форматі КВ або ДВ) |
Команда FXCN – один або обидва регістри пусті |
Заповнює пустий/пусті регістри кодом невизначеності, виконує обмін |
Денормалізований операнд (DE) | |
Команда FLD – операнд-джерело денормалізований |
Завантажує як звичайний (ніяких специфічних дій) |
Закінчення таблиці 3.19 | |
Умови |
Реакція ВМ87 |
Арифметичні команди - один або обидва оператори денормалізовані |
Перетворює операнд (операнди) в еквівалентне ненормалізоване значення і виконує команду |
Ділення на нуль (ZE) | |
Ділення – дільник дорівнює 0 |
Повертає код зі знаком, що дорівнює сумі по модулю двох операндів |
Переповнення (OE) | |
Арифметичні команди – округлення до ближнього значення або до нуля, а порядок результату більше 16383 |
Повертає код з відповідним знаком і встановлює PE=1 |
Команди FST, FSTP – заокруглення до ближнього значення чи в напрямку нуля, а порядок результата більше 127 (приймач ДВ) |
Те ж саме |
Антипереповннення (UE) | |
Арифметичні команди – порядок результату менше 16382 |
Денормалізує до порядку -16382 (в зміщеному вигляді 00 00), якщо 64 бітова мантиса при цьому містить хоча б одну одиницю, повертає ненормалізоване значення, інакше повертає код 0 |
Команди FST, FSTP – приймач в форматі КВ/ДВ, а порядок результату менше -126/-1022 |
Денормалізує до порядку -126/-1022 (в зміщеному вигляді 00 00), якщо 24 бітова/53 бітова мантиса містить хоча б одну одиницю, , повертає ненормалізоване значення, інакше повертає код 0 |
Неточний результат (PE) | |
Округлення неточне |
Ніяких специфічних дій |
Замаскований прапорець ОЕ (ОМ=1) в ряді команд |
Те ж саме |