Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KURS_LEKTsIJ_SP_Z_F.rtf
Скачиваний:
32
Добавлен:
16.03.2015
Размер:
1.16 Mб
Скачать

4.5.5.Трансцендентные команды

МНЕМОНИКА

ОПИСАНИЕ

FPTAN

Частичный tg

FPATAN

Частичный arctg

FYL2X

y*log2(x)

FYL2XP1

y*log2(x)

F2XM1

2x-1

FPTANдает в качестве результата два таких числа х и у, что у/х=tg(ST(0)). У - заменяет старое содержимоеST(0), а х включается сверху.

Для модели математического сопроцессора 80287 аргумент команды FPTANдолжен быть нормализован; денормализованные и ненормализованные числа, бесконечность и нечисла недопустимы в качестве аргументов у всех трансцендентных команд. Кроме того, аргумент должен находиться в диапазоне 0<ST(0)</4. Если аргумент недопустим или находится вне диапазона,FPTANдает неправильный результат, не сигнализируя об особом случае (то же самое верно и для других трансцендентных команд). Программист сам должен заботится о допустимости аргумента и приведении его в диапазон. Допустимость может быть проверена с помощью командыFXAM. Для модели математического сопроцессора 80387 и устройствFPUкомандаFPTANвST(1) возвращает тангенс исходного угла, а вST(0) возвращается единица. Сделано так из-за совместимости с сопроцессором 80287.

FPATAN - вычисляет ST(0)=arctg (ST(1)/ST(0)). Два верхних элемента извлекаются из стека, результат включается в стек. Упрощает вычисление остальных тригонометрических функций. Для аргументов должно выполняться следующее условие: 0<ST(1)<ST(0)<для модели математического сопроцессора 80287, с модели математического сопроцессора 80387 ограничений на аргумент нет.

FYL2X - вычисляет функцию ST(0) = ST(1)*log2ST(0). Два операнда извлекаются из стека, а затем результат включается в стек. Условие для аргументовST(0) > 0 должно быть выполнено.

FYL2XP1 - вычисляет функцию ST(0) = ST(1)*log2(ST(0)+1). Должно быть выполнено следующее условие: . Причина появления этой команды - более высокая точность вычисления функцииlog2(1+x) при малых х. Удобна для вычисления обратных гиперболических функций.

F2XM1 вычисляетST(0) = 2ST(0)-1, причемST(0) должно находиться в диапазоне: 0 <ST(0) < 0.5 модели математического сопроцессора 80287. Для модели математического сопроцессора 80387 и устройствFPUусловие для аргумента функции -1 <ST(0) < +1. Вычисление 2х-1 вместо 2хпозволяет избежать потери точности, при х близких к нулю (при этом 2хблизко к 1). Удобна для вычисления гиперболических функций.

Новые трансцендентные команды

Для модели математического сопроцессора 80387 были разработаны новые трансцендентные команды:

FSIN- без операндов. Вычисляет синус действительного числа из вершины стека, результат записывается в вершину стека. Для величины угла нет ограничений.

FSINCOS- без операндов. Одновременно вычисляет синус и косинус угла в вершине стека. Синус - вST(1), косинус- вST(0). Ограничений величины угла нет.

FCOS- без операндов. Вычисляет косинус действительного числа из вершины стека. Результат помещается в новую вершину стека. Ограничений величины угла нет.

4.5.6.Административные команды

Эта группа команд обеспечивает управление режимом работы сопроцессора. Для программиста особенно интересны команды работы с регистрами управления и состояния.

МНЕМОНИКА

ОПИСАНИЕ КОМАНДЫ

FNSTCW(FSTCW)

Запомнить регистр управления

FLDCW

Загрузить регистр управления

FNSTSW(FSTSW)

Запомнить регистр состояния

FNSTSW AX(FSTSW AX)

Запомнить регистр состояния в АХ

FNCLEX(FCLEX)

Сбросить особые случаи

FNINIT(FINIT)

Инициализировать сопроцессор

FNSTENV(FSTENV)

Запомнить среду

FLDENV

Загрузить среду

FNSAVE(FSAVE)

Запомнить полное состояние

FRSTOR

Восстановить полное состояние

FINCSTP

INC указателя стека

FDECSTP

DEC указателя стека

FFREE

Освободить регистр

FNOP

Нет операции FWAIT - ожидание

FSETPM

Установить защищенный режим

FENI(FNENI)

Разрешить прерывания (IEM = 0)

FDISI(FNDISI)

Запретить прерывания (IEM = 1)

FNSTCW(FSTCW) - содержимое регистра управления записывается в ячейку памяти, указанную в качестве операнда.

FLDCW- загружает регистр управления из ячейки памяти, указанной в качестве операнда.

Эти команды применяются для изменения режима работы сопроцессора (можно переопределять режим округления, управления бесконечностью, маскирование особых случаев).

FNSTSW(FSTSW) - передает содержимое регистра состояния в ячейку памяти, указанную в качестве операнда.FNSTSWAX(FSTSWAX) передает содержимое регистра состояния в регистр АХ основного процессора.

FNCLEX(FCLEX) - сбрасывает (устанавливает в нуль) флажки всех особых случаев и битыESиBв регистре состояния.

FNINIT(FINIT) - инициализирует регистры : управления, состояния и тэгов (такое же действие производит аппаратный сигнал сброса):

Регистр управления :

режим управления бесконечностью – для модели математического сопроцессора 80287 – проективный, для последующих моделей - аффинный;

режим округления - округление к ближайшему числу;

режим точности - расширенная точность;

все особые случаи - замаскированы (то есть формируются специальные значения).

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

a) В = 0 (не занят)

b)C0C1C2C3- не определены

c) ST = 0

d) ES = 0

e) флаги особых случаев = 0

Все тэги = 11 (“пустые”)

FNSTENV(FSTENV) - записывает в память содержимое регистров управления, состояния, тэгов и указателей особого случая, начиная с адреса указателя в операнде. Формат информации в памяти следующий :

15 бит

0 бит

Регистр управления

0 (смещение от начала)

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

2

Регистр тэгов

4

Указатель команды

6

Указатель операнда

10 старший адрес

FLDENV- загружает среду, ранее запомненнуюFNSTENV. Эти команды применяются в процедурах обработки особых случаев, чтобы получить доступ к указателям особого случая.

FNSAVE(FSAVE) действует аналогичноFNSTENV, но дополнительно сохраняет в памяти содержимое численных регистров, располагая их после указателя операнда :

Смещение от начала буфера

Всего в память передается 94 байта (или 108, если 387 процессор

После выполнения команды сопроцессор переходит в нач. сост. как после FINIT

ST(0)

14

ST(1)

24

ST(2)

34

ST(3)

44

ST(4)

54

ST(5)

64

ST(6)

74

ST(7)

84

FRSTORвосстанавливает все регистры сопроцессора из памяти. Эта команды в основном применяется для переключения задач ( в защищенном режиме). Обратная ей – командаFSAVE.

FINCSTPиFDECSTP- осуществляют инкремент или декремент указателя стека. Не влияют на регистр тэгов и численные регистры, не эквивалентны командам извлечения или включения в стек.

FFREEST(i) - устанавливают тэг регистраST(i) в состояние “пустой” (11), но содержание численного регистра не изменяют.

FNOP- не производит никакой операции, действует какFSTST(0),ST(0).

FENIиFDISI- не используются с сопроцессора 80387.

FSETPM- переводит сопроцессор в защищенный режим.

Аппаратный сброс переводит основной процессор и сопроцессор в реальный режим. Команды с мнемоникой FNXXXне проверяют незамаскированные особые случаи (если прерывания разрешены) и выполняется немедленно. В таком случае ассемблер автоматически не вставляет перед ней командуFWAIT, то есть не проверяет наличия особого случая сопроцессора. Все остальные команды синхронизируются автоматически.

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