Слово стану SW і слово керування CW пристрою FPU. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Слово стану SW і слово керування CW пристрою FPU.



FPU має два програмно доступних 16-бітових регістри, вміст яких визначає його режими роботи і поточний стан.

15 12 11 10 9 8 7 6 5 4 3 2 1 0

X   X   X   X   RC   PC X X   PM   UM   OM   ZM   DM   IM  

 

CW

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

B   C3   T O P   C2   C1 C0 ES SF   PE   UE   OE   ZE   DE IE  

SW

 

CW – визначає для FPU один з можливих варіантів обробки числових даних. Для кожного варіанту програміст задає маскування особливих випадків, точність обчислень, спосіб заокруглення результатів.

Маски особливих випадків – шість молодших бітів CW:

PM (Precision Mask) – маска точності;

UM (Underflow Mask) – маска антипереповнення;

OM (Overflow Mask) – маска переповнення;

ZM (divide by Zero Mask) – маска ділення на нуль;

DM (Denormalised Mask) – маска ненормалізованого операнда;

IM (Invalid operation Mask) – маска недійсної операції.

Якщо будь-який з цих бітів дорівнює 1, то виникнення особливого випадку не буде викликати переривання процесора (особливий випадок замаскований), а якщо біт містить 0 – FPU активно сигналізує про особливий випадок. Що математично бажано було б одержати в особливому випадку?

Денормалізований операнд – продовжити виконання операції як звичайно;

Ділення на нуль (дільник нуль, а ділене не нуль і не безмежність) – повернути як результат операції безмежність з правильним знаком;

Переповнення – повернути як результат операції найбільше скінченне число або безмежність;

Антипереповнення – повернути денормалізоване число або нуль;

Точність – продовжити операцію як звичайно;

Недійсна операція – найважчий особливий випадок: сюди відносяться всі решта особливих випадків, не виявлених у попередніх випадках і свідчать, як правило, про серйозну помилку в програмі. Без аналізу послідовності кроків, які призвели до одержаної ситуації, неможливо прийти до певного прийнятного висновку. Це відноситься до множення і ділення безмежностей, множення безмежності на нуль, додавання безмежностей з різними знаками, добування квадратного кореня з від’ємного числа, будь-якої операції з не числом, завантаження в не порожній регістр, читання з порожнього регістра і т. д. Найкраще, що можна зробити у випадку “недійсна операція”, це повернути “тихе не число” або цілочислову або десяткову невизначеність. Отже, після виникнення не числа воно не зникає, а поширюється в подальших обчисленнях.

Виявлення особливих випадків: “недійсна операція”, “ділення на нуль”, “денормалізований операнд” відбувається до виконання операції, а решта особливих випадків реєструється тільки після обчислення істинного результату. Якщо виник “ранній” особливий випадок, стек і ОП ще не були модифіковані і містять такі дані, ніби винна команда не виконувалась. Якщо виявиться пізній особливий випадок, то вміст стеку і ОП змінено.

Виникнення особливого випадку відзначається встановленням в 1 відповідного прапорця в слові стану SW, а також біта сумарної помилки es. Видається активний сигнал FERR# помилки з плаваючою крапкою. Далі FPU перевіряє маску в CW і визначає, або потрібно тільки зареєструвати особливий випадок (маска дорівнює 1), або повідомити про це процесор як порушення пристрою FPU (переривання 16) з подальшим викликом обробника даного переривання.

Масковані реакції FPU такі, як ми сказали про них вище – найбільш природні математичні результати. Ці результати можуть брати участь у подальших обчисленнях за винятком особливого випадку – недійсна операція, коли повертається не число. Тому у більшості прикладних програм рекомендується маскувати всі особливі ситуації крім “недійсна операція”.

В FPU такий пріоритет особливих випадків (у порядку спадання): недійсна операція, денормалізований операнд, ділення на нуль, переповнення, антипереповнення, точність.

Керування точністю. Двобітове поле PC (Precision Control) визначає точність обчислень: 24 біти (PC=00), 53 біти (PC=10) і 64 біти (PC=11). За замовчуванням (домовленістю) PC=11. Якщо вибрана менша точність, заокруглення дробового значення зануляє не використовувані праві біти. Керування точністю впливає тільки на команди: fadd, fsub, fmul, fdiv, fsqrt.

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

FPU має чотири режими заокруглення, які вибираються на основі поля RC регістра CW. FPU у випадку неточного результату вибирає два числа, які точно зображуються в ОП і і найближчі до (). Після цього процесор заокруглює (замінює на або у відповідності з режимом заокруглення):

Поле RC Режим заокруглення Дія заокруглення
  Заокруглення д найближчого або , найближче до ; при рівності, вибрати парне число
  Заокруглення до (вниз)
  Заокруглення до (вгору)
  Зрізання до нуля відкинути дробову частину

За замовчуванням заокруглення до найближчого, найточніша і незміщена оцінка результату (не більше половини наймолодшого розряду. Похибка знакозмінна, тому оцінка незміщена).

Зрізання до нуля використовується для цілочислової арифметики.

Заокруглення вгору і вниз називається направленим заокругленням і застосовується в інтервальній арифметиці (один раз вгору, один раз вниз для обчислення верхньої і нижньої меж багатоетапного обчислення).

RC впливає тільки на арифметичні операції.

Біт 12=IC FPU ігнорує. В процесорах 8086 і 80286 цей біт керує інтерпретацією безмежності: проективна (IC=0) або афінна (IC=1). FPU підтримує тільки афінний режим.

Слово стану SW – відображує загальний стан FPU. Його можна зберегти командами: fstsw/fnstsw – збереження слова стану, fstenv/fnstenv – збереження середовища, fsave/fnsave – збереження повного стану або передати в регістр ax командами fstsw ax/fnstsw ax для подальшого аналізу цілочисловим пристроєм.

У sw молодші шість бітів відведені для реєстрації особливих випадків. Прапорці особливих випадків позначаються так:

PE (Precision Error) – помилка точності;

UE (Underflow Error) – помилка антипереповнення;

OE (Overflow Error) – помилка переповнення;

ZE (divide by Zero Error) – помилка ділення на нуль;

DE (Denormalised Error) – помилка ненормалізованого операнда;

IE (Invalid Error) – помилка недійсної операції.

Якщо виникає будь-який з незамаскованих особливих випадків, то FPU установлює в 1 відповідний прапорець і сформує активний вихідний сигнал FERROR# (повідомляючи про переривання 16). Процедура обробки особливого випадку прочитає sw для визначення конкретної причини особливого випадку. FPU ніколи самостійно не зануляє біти особливого випадку. Їх можна установити в нуль тільки командами ініціалізації finit, установка в 0 особливого випадку fclex, завантаження середовища fldenv і відновлення повного стану frstor. Отже програма може виконувати перевірку особливих випадків після групи команд, а не після кожної команди.

Біт 6 порушення стеку sf (stack fault): фіксує помилки в роботі стека регістрів. FPU установлює sf рівним 1, якщо команда викликає переповнення або антипереповнення стека. Коли sf=1 біт коду умови c1 показує переповнення (с1=1) або антипереповнення (с1=0) стека. Порушення стека фіксується також як особливий випадок недійсної операції.

Біт 7 сумарної помилки es (Error Summary) установлюється в 1 при виникненні будь-якого особливого випадку.

Біти с3с2с1с0 подібні до арифметичних прапорців в регістрі eflags. Вони фіксують особливості результатів команд порівняння, перевірки і аналізу. Використовуються для умовних переходів.

Команда с0 с3 с2 с1
fcom, fcomp, fcompp, ftst, fucom, fucomp, fucopp,, ficom, ficomp   Результат порівняння   Результати не порівнювані   Нуль або O/U#
fxam Клас операнда Знак або O/U#
fprem, fprem1 Q2 Q0 0=зведення завершено 1=зведення не завершено Q1 або O/U#
fist, fbstp, frndint, fst, fstp, fadd, fmul, fdiv, fdivr, fsub, fsubr, fscale, fsqrt, fpatan, f2xm1, fyl2x, fyl2xp1     Не визначені   Заокруглення вгору або O/U#
fptan, fsin,fcos, fsincos Не визначені 0=зведення завершено 1=зведення не завершено Заокруглення вгору або O/U# (не визначено, якщо с2=1)
fchs, fabs, fxch, fincstp, fdecstp, fld, fxtract, fild, fbld, fstp, завантаження сталих   Не визначені Нуль або O/U#
fldenv, frstor Кожний біт завантажується з оперативної пам’яті
fldcw, fstenv, fstcw, fstsw, fclex Не визначені
finit, fsave нуль нуль нуль нуль

Таблиця інтерпретації коду умови

O/U# – коли обидва біти ie і sf слова стану установлені, показуючи особливий випадок стека, цей біт розрізняє переповнення (с1=1) і антипереповнення (с1=0).

В таблиці показано дію команд порівняння, перевірки і аналізу на біти коду умови с3с2с1с0.

Команда fstsw ax – передає слово стану в регістр ax, дозволяючи програмі процесора i486 перевірити їх. Команда sahf копіює біти с3с2с1с0 з регістра ah в біти прапорців процесора i486, спрощуючи умовні переходи. Відображення коду умови на біти прапорців показано в наступній таблиці.



Поделиться:


Последнее изменение этой страницы: 2017-01-27; просмотров: 263; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.216.163 (0.008 с.)