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

Программная модель сопроцессора состоит из:

  • Стек сопроцессора (8 регистров по 10 бит) r0, r1, …, r7
  • 3 служебных регистра по 16 бит (регистр состояния SWR, управляющий регистр CWR, регистр тегов TWR)
  • 2 регистра указатели по 48 бит (DPR регистр указатель данных, IPR регистр указатель адреса)


Стек сопроцессора:

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

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

Регистр состояния SWR

SWR format

Регистр 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
СWR format

Регистр управления сопроцессором 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) а < m < Ь. 00 — значение m округляется к ближайшему числу а или Ь; 01 — значение m округляется в меньшую сторону, то есть m = а; 10 — значение m округляется в большую сторону, то есть m = Ь; 11 — производится отбрасывание дробной части т (может использоваться в операциях целочисленной арифметики).


Регистр тегов TWR представляет собой совокупность двухразрядных полей. Каждое двухразрядное поле соответствует определенному физическому регистру стека и характеризует его текущее состояние. Изменение состояния любого регистра стека отражается на содержимом соответствующего этому регистру поля регистра тега.
Возможны следующие значения в полях регистра тега:
00 — регистр стека сопроцессора занят допустимым ненулевым значением;
01 — регистр стека сопроцессора содержит нулевое значение;
10 — регистр стека сопроцессора содержит одно из специальных численных значений (см. ниже), за исключением нуля;
11 — регистр пуст, и в него можно производить запись.

17.07.2015