Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод упоряд-ПОСЛЕДНЯЯ-МП.doc
Скачиваний:
35
Добавлен:
20.02.2016
Размер:
5 Mб
Скачать

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) в ряді команд

Те ж саме