![](/user_photo/2706_HbeT2.jpg)
- •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. Спеціальні числові значення та особливі обчислювальні ситуації
32. Програмна модель fpu
Програмна модель FPU має стекову архітектуру. Одна з причин це те, що в математичних розрахунках результат поточної операції часто може замінити один або обидва початкових операнди і є операндом наступної команди. Подання арифметичних виразів у зворотному польському записуванні природно зумовлює стекову організацію FPU, який обчислює ці вирази.
Основу програмної моделі складає регістровий стек з восьми 80-бітових регістрів даних R0, R1, R2, R3, R4, R5, R6, R7, які називаються числовими або арифметичними регістрами.
Теги TOP
79 78 64 63 0 1 0 011b
R0 R1 R2 R3 R4 R5 R6 R7 |
S |
E |
M |
|
|
|
St(5) St(6) St(7) St(0) St(1) St(2) St(3) St(4) |
|
|
|
|
||||
|
|
|
|
||||
|
|
|
|
||||
|
|
|
|
||||
|
|
|
|
||||
|
|
|
|
||||
|
|
|
|
15
0
CW
Регістр керування
SW
Регістр стану
Регістр тегів
TW
47 0
IP
Вказівник команди
DP
Вказівник даних
Рис. 1. Програмна модель FPU.
Тут зберігаються числа в формі з плаваючою крапкою в розширеному дійсному форматі, який є єдиним внутрішнім форматом чисел FPU. В будь-який момент часу три бітове поле top в слові стану SW визначає регістр, який є поточною вершиною стека і позначається st(0) або st. Якщо в полі top міститься, наприклад 011b, то вершиною стека є R3 і саме він вказується в командах як st(0) або st. Регістр R4 зразу нижче регістра st і позначається st(1), регістр R2 – тоді буде в самому низу стека і позначається st(7). Іншими словами, регістр st(0) містить останнє розміщене в стек значення, регістр st(1) – передостаннє і т.д. Усі команди FPU розраховані на таку відносну адресацію і навіть мовою асемблера неможливо працювати з фізичними регістрами R0, R1, R2, R3, R4, R5, R6, R7.
Операція записування в стек здійснює декремент поля top і завантажує адресовані дані в нову вершину стека, що призводить до автоматичного перенумерування регістрів. В операції збереження і вибору зі стека в приймач (наприклад , оперативну пам’ять) передається вміст поточної вершини стека, а потім відбувається інкремента поля top. Отже в стандартних стекових операціях поле top виконує функції традиційного вказівника стека.
На відміну від класичного стека, стек FPU має такі відмінності:
-
Стек має кільцеву організацію. Якщо top=000b і відбувається його декремент, то top=111b, а якщо поле top=111b і здійснюється інкремент, то новим вмістом буде 000b. Контроль за використанням стека повинен здійснювати програміст (максимальна кількість розміщень у стек без проміжних вибирань дорівнює 8, а дев’яте розміщення буде на місце елемента, розміщеного в стек першим). Тут FPU зафіксує особливий випадок “порушення стеку” та “недійсна операція”. Перезапис у стек відбудеться, якщо переривання від цих особливих випадків замасковане (заборонене);
-
В числових командах припустиме явне або неявне звернення до регістрів стеку з модифікацією або без неї поля top. Так, в унарних операціях операндом є вміст вершини стека, а результат заміщує операнд. В деяких бінарних операціях операндами є числа в двох верхніх регістрах стеку, а результат розміщується на місце одного з них. Більше того, команда порівняння fcompp порівнює вміст двох верхніх регістрів стека і вилучає його збільшуючи top на 2. У бінарних операціях можна явно вказувати регістри, які містять операнди;
-
FPU має команди, в яких не дотримуються домовленості про стек. Наприклад, команда fst (збереження в оперативній пам’яті) передає вміст вершини стека в ОП, не збільшуючи вмісту поля top. Команда fxch (обмін) забезпечує обмін вмісту вершини стека і будь-якого іншого регістра.
З кожним регістром стека асоціюється двобітовий тег, сукупність яких утворює слово тегів TW. Тег регістра R0 знаходиться в молодших бітах, а тег R7 – для вибору зі стеку у старших бітах. Тег показує, що є у відповідному регістрі і допомагає FPU у виконанні команд:
00b – припустиме ненульове число,
01b – нуль,
10b – спеціальне значення (не число, формат, який не підтримується, нескінченність або ненормалізоване число),
11b – порожній регістр.
Під час ініціалізації FPU завантажує в біти тегів 11b, що означає регістри порожні. Спроба використати порожній регістр для вибору з нього фіксується як особливий випадок “порушення стека” і “недійсна операція”. Спроба завантажити число в не порожній регістр також викликає реєстрацію аналогічних особливих випадків. Простіше використати регістр тегів для інтерпретації вмісту регістрів замість складного декодування фактичних даних. Для співвідношення регістра тегів з відносними регістрами st(0),…, st(7) потрібно використовувати поле top зі слова стану.
Точні значення тегів встановлюються під час виконання команд збереження середовища fstenv і збереження повного стану fsave у відповідності з фактичним вмістом не порожніх регістрів стека. Під час виконання інших команд FPU модифікує слово тегів, тільки показуючи порожній або не порожній регістр стека.
Іншими регістрами в програмній моделі FPU є 16-бітові регістри керування і стану, а також два 48-бітові регістри вказівників команди і даних. Регістри CW і SW ми розглянемо пізніше. IP та DP (вказівники особливих випадків) використовуються в процедурах обробки особливих випадків. Тут автоматично зберігаються пристроєм FPU під час виконання числової команди адреси цієї числової команди і її операнда в оперативній пам’яті (якщо він є). Регістри вказівники IP і DP доступні тільки в командах збереження середовища fstenv, збереження повного стану fsave, завантаження повного стану fldenv і відновлення повного стану frstor.
Середовище FPU – вміст регістрів керування, стану, тегів і обох вказівників (CW, SW, TW, IP, DP). Повний стан: вміст всіх регістрів – середовища FPU і восьми регістрів стека.