Assembler 42

42. Програмна модель співпроцесора

Програмна модель співпроцесора складається з:

Регістровий стек співпроцесора організований за принципом кільця. Це означає, що всі регістри стека з функціональної точки зору абсолютно рівноправні. Стек має плаваючу вершину. Контроль поточної вершини здійснюється апаратно за допомогою трехразрядного поля ТОР регістру SWR. В поле ТОР фіксується номер регістра стека 0 ... 7 (RO. R7), що є поточною вершиною стека.

На рис. показаний приклад, коли поточної вершиною до запису в стек є фізичний регістр R3, а після запису в стек поточної вершиною стає фізичний регістр стека R2.То є в міру записи в стек покажчик його вершини рухається у напрямку до молодшим номерами фізичних регістрів (зменшується на одиницю , якщо вершина збігається з регістром r0, то вершиною стає регістр r7, число поміщається туди). Що стосується логічних номерів регістрів стека ST (0). ST (1), то, як випливає з малюнка, вони «плавають» разом зі зміною поточної вершини стека. Таким чином, реалізується принцип кільця.

Регістр стану SWR

Регістр SWR відображає поточний стан співпроцесора після виконання останньої команди. Далі перераховані поля, з яких структурно складається реєстр SWR

  • Шість прапорів виняткових ситуацій.
  • Біт SF (Stack Fault) - помилка роботи стека співпроцесора. Біт встановлюється в одиницю, якщо виникає одна з трьох виняткових ситуацій - РЕ, UE або IE. Зокрема, його установка коли Ви будете намагатися записи в заповнений стек або, навпаки, спробі читання з пустого стека.
  • Біт ES (Error Summary) сигналізує про сумарну помилку в роботі співпроцесора. Біт встановлюється в одиницю, якщо виникає будь-яка з шести виняткових ситуацій.
  • Чотири біта СО ... СЗ (Condition Code) представляють собою код умови. Вони відображають результат виконання останньої команди співпроцесора.
  • Трехразрядное поле ТОР містить покажчик регістра поточної вершини стека.
  • Біт зайнятості b (0 - вільний, 1 - виконується операція)

Майже половину регістра SWR займають біти (прапори) реєстрації виняткових ситуацій. Виняткова ситуація - особливий тип переривань.
Типи виключень, що фіксуються за допомогою регістра SWR:

  • IE (Invalide operation Error) - недійсна операція;
  • DE (Denormalized operand Error) - денормалізованний операнд;
  • ZE (divide by Zero Error) - помилка ділення на нуль;
  • OE (Overflow Error) - помилка переповнення (виникає в разі виходу порядку числа за максимально допустимий діапазон);
  • UE (Underflow Error) - помилка антипереполнение (виникає, коли результат занадто малий);
  • РЕ (Precision Error) - помилка точності (встановлюється, коли сопроцессору доводиться округляти результат через те, що його точне уявлення неможливо; так, сопроцессору, ніколи не вдасться точно розділити 10 на 3).

При виникненні будь-якого з цих шести типів виключень встановлюється в одиницю відповідний біт в регістрі SWR незалежно від того, чи було замасковано це виняток в регістрі CWR чи ні.

Керуючий регістр CWR

Регістр управління співпроцесором CWR визначає особливості обробки численних даних (рис. 17.4). Він складається:

  • з шести масок винятків;
    призначені для маскування виняткових ситуацій, виникнення яких фіксується за допомогою шести бітів регістра SWR. Якщо якісь біти винятків в регістрі CWR встановлені в одиницю, це означає, що відповідні винятки будуть оброблятися самим співпроцесором. Якщо для будь-якого винятку у відповідному бите масок винятків регістра CWR міститься нульове значення, то при виникненні виключення цього типу буде порушено переривання 16 (10h). Операційна система повинна містити (або програміст повинен написати) обробник цього переривання.
  • поля управління точністю PC (Precision Control);
    призначене для вибору довжини мантиси.
    Можливі значення в цьому полі означають:
    PC = 00 - довжина мантиси 24 біта;
    PC = 10 - довжина мантиси 53 біта;
    PC = 11 - довжина мантиси 64 біта.
    За замовчуванням встановлюється значення поля PC - 11.
  • поля управління округленням RC (Rounding Control).
    дозволяє управляти процесом округлення чисел в ході роботи співпроцесора. Необхідність округлення може виникнути в ситуації, коли після виконання чергової команди співпроцесора виходить непредставімо результат, наприклад періодична дріб 3,333 ... Встановивши одне зі значень в поле RC, можна виконати округлення в необхідну сторону. Нехай m - значення в ST (0) або результат роботи деякої команди, який не може бути точно представлений і тому повинен бути заокруглений; і а і b-значення, які можуть бути представлені в регістрі ST (0) а

Регістр тегів TWR являє собою сукупність двухразрядного полів. Кожне дворозрядне поле відповідає певному фізичному регістру стека і характеризує його поточний стан. Зміна стану будь-якого регістра стека відбивається на вмісті відповідного цього регістру поля регістру тега.
Можливі наступні значення в полях регістра тега:
00 - регістр стека співпроцесора зайнятий допустимим ненульовим значенням;
01 - регістр стека співпроцесора містить нульове значення;
10 - регістр стека співпроцесора містить одне зі спеціальних чисельних значень (див. Нижче), за винятком нуля;
11 - регістр порожній, і в нього можна проводити запис.