- •2. Структура регістра eflags
- •3. Організація оперативної пам’яті. Сегментована модель оперативної пам’яті. Формування адреси в реальному режимі
- •4. Формати і типи даних. Формат машинних команд. Система переривань
- •5. Десяткова арифметика. Форми зображення десяткових чисел
- •7. Ділення ascii-чисел.
- •6. Директиви сегментації. Директиви proc і endp
- •7. Опис простих типів мовою асемблера
- •10. Синтаксис команд мовою асемблера
- •11. Команди передач даних
- •Xchg ax, data1; (data2) в data1, (ax) – початковий стан
- •12. Стекові передачі даних
- •13. Передачі адресних об’єктів, команди введення-виведення і передачі прапорців
- •14. Команди передачі даних movXx. Команда setCc. Команда xlat
- •15. Команди додавання, віднімання і порівняння
- •Inc reg/mem; Розмір 8/16/32.
- •16. Команди множення і ділення
- •20. Команди логічних операцій. Команди зсувів
- •22. Команди операцій з двійковими ланцюжками
- •23. Команди передачі керування (безумовні переходи)
- •24. Команди умовних переходів і команди керування циклами
- •26. Команди переривань і повернення з переривань
- •Загальні поняття.
- •Використання префіксів в ланцюжкових командах.
- •Команда movs.
- •Команда cmps.
- •Команда scas.
- •Команда lods.
- •Команда stos.
- •Команди введення/виведення ланцюжків.
- •29. Команди керування процесором
- •Команди, які впливають на прапорці.
- •Команди синхронізації.
- •Системні команди
- •31. Формати даних, які підтримуються fpu
- •Параметри для трьох форматів в таблиці
- •32. Програмна модель fpu
- •33. Слово стану sw і слово керування cw пристрою fpu.
- •Відповідність між кодом умови і прапорцями
- •34. Команди передач даних fpu: завантаження, збереження, збереження з вибором зі стека, обміну, завантаження сталих.
- •35. Арифметичні команди fpu: додавання, віднімання, множення, ділення.
- •36. Додаткові арифметичні команди fpu.
- •37. Команди порівняння fpu
- •38. Команди трансцендентних функцій. Алгоритми обчислення значень функцій і та логарифмів за будь-якою основою.
- •39. Команди керування пристроєм fpu
- •40. Спеціальні числові значення та особливі обчислювальні ситуації
40. Спеціальні числові значення та особливі обчислювальні ситуації
До спеціальних числових значень відносяться: денормалізовані дійсні числа, нулі, нескінченності, не числа, невизначеність, не підтримувані формати.
Денормалізовані дійсні числа мають: знак – будь-який, характеристика – всі нулі, мантиса – принаймні старший біт дорівнює нулеві, але мантиса не дорівнює нулю. Ці числа менші мінімального нормалізованого числа для кожного з форматів (ОТ, ПТ, РТ).
Нуль (ще кажуть істинний нуль). Значення нуль у дійсних (ОТ, ПТ, РТ) і десятковій формах є знакове, тобто знаковий біт s або 0, або 1, а в двійковій (цілі числа) нуль завжди додатній (знаковий біт s – 0). В обчисленнях знак нуля не враховується. В дійсних формах нуль зображується так: s 00…0 00…0 (знак s – 0 або 1, характеристика – нулі, мантиса – нулі).
Нескінченність (безмежність). Дійсні форми підтримують знакові зображення безмежностей. Їх коди: s 11…1 1.00…0. Знаки безмежностей враховуються і можливі порівняння. Безмежності інтерпретуються в афінному розумінні, тобто .
Не числа – представники класу спеціальних значень. Вони мають: знак будь-який, характеристика – всі одиниці, мантиса – будь-яка, за винятком 1.00…0 (така мантиса в ).
Невизначеність – FPU формує спеціальне не число, яке називається дійсною невизначеністю, як реакцію на замаскований особливий випадок – не дійсна операція. Це не число має: знак (від’ємний знак), характеристику – 11…1 і мантису – 1.10…0. Таке спеціальне не число передбачене для випадку, коли відповідь – не знаю ( наприклад, ділення безмежність на нуль). Інші не числа створюються або програмістом, або одержуються зі значень, визначених програмістом, і використовуються для прискорення налагодження програм.
Не підтримувані формати. Формат РТ має багато двійкових наборів, які не попадають ні в один з розглянутих класів. Сюди відносяться: псевдо не числа (знак – будь-який, характеристика – 11…1, мантиса – старший біт дорівнює 0, а решта бітів будь-які двійкові набори), псевдо нескінченність (знак – будь-який, характеристика – 11…1, мантиса – 00…0), не нормалізовані – ( знак – будь-який, від 11…10 0.11…11 до 00…01 0.00…00), псевдо денормалізовані – (знак – будь-який, характеристика – всі нулі, мантиса від 1.00…0 до 1.11… 1).
Особливі випадки: точність, антипереповнення, переповнення, ділення на нуль, денормалізований операнд, недійсна операція.
У випадку виникнення особливих випадків, які не замасковані (маски особливих випадків в регістрі CW), FPU активно сигналізує про особливий випадок, що може призвести до виклику обробника особливої ситуації, що, як правило, зумовить аварійне завершення програми, в якій вона з’явилася. Якщо особлива ситуація замаскована, то FPU діє за правилами, описаними нижче:
денормалізований операнд (найменша характеристика і ненульова мантиса) – продовжує виконання операції як звичайно;
ділення на нуль – (дільник =0, ділене не нуль і не безмежність) повернути як результат операції безмежність з правильним знаком;
переповнення (результат операції надто великий для зображення у форматі приймача) – повернути як результат операції найбільше скінченне число або нескінченність;
антипереповнення (істинний результат операції не дорівнює 0, але надто малий для подання у форматі приймача. Або, якщо антипереповнення замасковане, денормалізація викликає втрату значимості) – повернути як результат операції денормалізоване число або нуль;
точність (істинний результат операції точно не зображуваний у форматі приймача або результат заокруглюється у відповідності з режимом заокруглення) – продовжити операцію як звичайно.
Найважчим є особливий випадок недійсна операція: сюди відносяться всі помилкові ситуації, не виявлені розглянутими вище особливими випадками, що, як правило, свідчить про помилку в програмі. Найкраще що можна зробити в цьому випадку, повернути тихе не число (знак – будь-який, характеристика – всі одиниці, мантиса від 0.11…11 до 0.10…00) або невизначеність. Такий результат забезпечить поширення цієї ситуації в подальших обчисленнях.