Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 352; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.01 с.) |