Сопроцессор с плавающей точкой 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Сопроцессор с плавающей точкой



Здесь мы коснемся основных положений работы арифметического сопроцессора.

Арифметический сопроцессор работает со своим набором команд и своим набором регистров. Однако выборку команд сопроцессора осуществляет процессор.

Арифметический сопроцессор выполняет операции со следующими типами данных:

· целое слово (16 бит),

· короткое целое (32 бита),

· длинное слово (64 бита),

· упакованное десятичное число (80 бит),

· короткое вещественное число (32 бита),

· длинное вещественное число (64 бита),

· расширенное вещественное число (80 бит).

При выполнении операции сопроцессором, процессор ждет завершения этой операции. Другими словами, перед каждой командой сопроцессора ассемблером автоматически генерируется команда, проверяющая, занят сопроцессор или нет. Если сопроцессор занят, процессор переводится в состояние ожидания. Иногда программисту требуется вручную ставить команду ожидания (WAIT) после команды сопроцессора.

Сопроцессор имеет восемь 80-битных рабочих регистров, представляющих собой стековую кольцевую структуру. Регистры называются R0,R1,... R7, но доступ к ним напрямую невозможен. Каждый регистр может занимать любое положение в стеке. Название стековых (относительных) регистров - ST(0), ST(1), ST(2), ST(3), ST(4), ST(5), ST(6), ST(7).

Регистр состояния. По его флагам можносудить о результате выполненной операции. Биты регистра состояния:

· 0-й бит, флаг недопустимой операции.

· 1-й бит, флаг денормализованной операции.

· 2-й бит, флаг деления на ноль.

· 3-й бит, флаг переполнения.

· 4-й бит, флаг антипереполнения.

· 5-й бит, флаг неточного результата.

· 6-й бит, ошибка стека.

· 7-й бит, общий флаг ошибки.

· 8,9,10-й, флаги условий.

· 11,12,13-й, число, показывающее, какой регистр является вершиной.

· 14-й бит, условный флаг.

· 15-й бит, флаг занятости.

Регистр управления содержит в себе биты, влияющие на выполнение команд сопроцессора. Биты регистра управления:

· 0-й бит, маска недействительной операции.

· 1-й бит, маска денормализованного операнда.

· 2-й бит, маска деления на ноль.

· 3-й бит, маска переполнения.

· 4-й бит, маска антипереполнения.

· 5-й бит, маска неточного результата.

· 6,7-й бит, резерв.

· 8-9-й биты, управление точностью.

· 10,11-й биты, управление округлением.

· 12-й, управление бесконечностью.

· 13,14,15-й, резерв.

Регистр тэгов содержит 16 бит, описывающих содержание регистров сопроцессора: по два бита на каждый рабочий регистр. Тэг говорит о содержимом регистре данных. Вот значение тэгов: 00 - действительное ненулевое число, 01 - истинный нуль, 10 - специальные числа, 11 - отсутствие данных.

При вычислении с помощью команд сопроцессора большую роль играют исключения или особые ситуации. Типичной особой ситуацией является деление на 0. Биты особых ситуаций хранятся в регистре состояний. Учет особых ситуаций необходим для получения правильных результатов.

Список особых ситуаций.

· Неточный результат (округление).

· Недействительная операция.

· Деление на ноль.

· Антипереполнение (слишком маленький результат).

· Переполнение (слишком большой результат).

· Денормализованный операнд.

После обзора команды будут рассмотрены подробно.

Категория Подкатегория Команды
Управление сопроцессором Инициализация FINIT
Работа со средой FSAVE, FSTENV, FLDENV, FCLEX, FLDCW, FSTCW, FSTSW, FRSTOR
Работа со стеком FINCSTP, FDECSTP, FFREE,
Вспомогательные FNOP, FWAIT
Передача данных Вещественные числа FLD, FST, FSTP
Целые числа FILD, FIST
Десятичные числа FBLD, FBST, FBSTP
Загрузка констант 0, 1, число PI, Log2(10), Log2(e), Log10(2), LN(2)
Обмен FXCH
Сравнение данных Вещественные числа FCOM, FCOMP, FCOMPP, FUCOMP, FUCOMPP
Целые числа FICOM, FICOMP
Анализ FTST, FXAM
Арифметические Вещественные числа FADD, FADDP, FSUB, FSUBP, FSUBR, FSUBRP, FMUL, FMULP, FDIV, FDIVP, FDIVR, FDIVRP
Целые числа FIADD, FISUB, FISUBR, FIMUL, FIDIV, FIDIVR
Вспомогптельные FABS, FCHS, FSQRT, FSCALE, FPREM, FPREM1, FRNDINT
Трансцендентные Тригонометрия Синус, Косинус, Синус + Косинус, Тангенс, Арктангенс
Логарифмы и степени 2 в степени X минус 1, Y*Log2(X), Y*Log2(X+1)

Инициализация. Перед использованием любых команд математического сопроцессора необходимо выполнить его инициализацию командой FINIT (Floating-point INITialisation a device FPU). Алгоритм работы команды выглядит следующим образом:

· В регистр управления (cwr) помещается число 37h, означающее, что округление будет выполняться до ближайшего целого (поле гс = 0).

· Биты с нулевого по пятый устанавливаются в 1, что означает маскирование всех исключений.

· Поле управления точностью устанавливается для работы с максимальной точностью в 64 бит (рс =11).

· Регистр состояния (swr) обнуляется, а это означает, что исключения отсутствуют и физический регистр R0 регистрового стека становится вершиной стека st(O).

· В регистр тегов (twr) заносятся единицы, а это означает, что все регистры сопроцессора считаются пустыми.

· Регистры указателей данных (dpr) и команд (ipr) обнуляются.

Команда Описание
FINIT Floating-point INITializing a device FPU Инициализация сопроцессора.  

Работа со средой.

Команда Описание
FSAVE приемник Floating-point SAVE fpu state. Сохранение состояния оборудования и файла регистров в памяти.  
FSTENV источник Floating-point STore ENVironment. Сохранение состояния оборудования (источника - SR, CR, TAGW, FIP, FDP) в памяти.  
FLDENV источник Floating-point LoaD ENVironment. Загрузка состояния оборудования (источника - SR, CR, TAGW, FIP, FDP) из памяти.  
FRSTOR src Floating-point ReSTORe fpu state. Восстановление состояния оборудования и файла регистров в памяти.  
FCLEX Floating-point CLear EXception. Сброс исключений.  
FLDCW источник Floating-point LoaD Control Word. Загрузка управляющего слова (16 бит) из источника в регистр управления SWR  
FSTCW приемник Floating-point STore Control Word. Сохранение управляющего слова в приемнике.  
FSTSW приемник Floating-point STore Status Word. Запись слова состояния из регистра управления SWR в приемник (регистр или память).  
         

Работа со стеком.

Команда Описание
FINCSTP Floating-point INCrement Stack Top Pointer. Инкремент указателя стека.  
FDECSTP Floating-point DECrement Stack Top Pointer. Декремент указателя стека.  
FFREE ST(i) Floating-point FREE fpu stack register. Показать регистр ST(i) как свободный.  

Вспомогательные.

FNOP Floating-point No Operation. Холостая операция сопроцессора.
FWAIT Floating-point WAIT. Ожидание процессором завершения текущей операции сопроцессором.

Команды передачи данных. Команды передачи данных передают данные между регистрами стека и памятью. Эти команды можно разделить на группы:

· вещественные числа (с плавающей точкой);

· целые числа;

· десятичных числа;

· загрузка констант;

· обмен;

· условные пересылки.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 186; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.143.4.181 (0.011 с.)