Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Слово стану SW і слово керування CW пристрою FPU.
FPU має два програмно доступних 16-бітових регістри, вміст яких визначає його режими роботи і поточний стан. 15 12 11 10 9 8 7 6 5 4 3 2 1 0
CW 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
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 впливає тільки на арифметичні операції. Біт 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. Вони фіксують особливості результатів команд порівняння, перевірки і аналізу. Використовуються для умовних переходів.
Таблиця інтерпретації коду умови 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 с.) |