Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
асм.docx
Скачиваний:
16
Добавлен:
27.10.2018
Размер:
644.06 Кб
Скачать

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 має такі відмінності:

  1. Стек має кільцеву організацію. Якщо top=000b і відбувається його декремент, то top=111b, а якщо поле top=111b і здійснюється інкремент, то новим вмістом буде 000b. Контроль за використанням стека повинен здійснювати програміст (максимальна кількість розміщень у стек без проміжних вибирань дорівнює 8, а дев’яте розміщення буде на місце елемента, розміщеного в стек першим). Тут FPU зафіксує особливий випадок “порушення стеку” та “недійсна операція”. Перезапис у стек відбудеться, якщо переривання від цих особливих випадків замасковане (заборонене);

  2. В числових командах припустиме явне або неявне звернення до регістрів стеку з модифікацією або без неї поля top. Так, в унарних операціях операндом є вміст вершини стека, а результат заміщує операнд. В деяких бінарних операціях операндами є числа в двох верхніх регістрах стеку, а результат розміщується на місце одного з них. Більше того, команда порівняння fcompp порівнює вміст двох верхніх регістрів стека і вилучає його збільшуючи top на 2. У бінарних операціях можна явно вказувати регістри, які містять операнди;

  3. 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 і восьми регістрів стека.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]