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

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

МНЕМОНИКА ОПИСАНИЕ КОМАНДЫ
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) - передает содержимое регистра состояния в ячейку памяти, указанную в качестве операнда. FNSTSW AX (FSTSW AX) передает содержимое регистра состояния в регистр АХ основного процессора.

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

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

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

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

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

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

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

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

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

b) C0 C1 C2 C3 - не определены

c) ST = 0

d) ES = 0

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

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

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

15 бит 0 бит  
Регистр управления 0 (смещение от начала)
Регистр состояния
Регистр тэгов
Указатель команды
Указатель операнда 10 старший адрес
       

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

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

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

 


Всего в память передается 94 байта (или 108, если 387 процессор После выполнения команды сопроцессор переходит в нач. сост. как после FINIT
ST(0)

ST(1)
ST(2)
ST(3)
ST(4)
ST(5)
ST(6)
ST(7)

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

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

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

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

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

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

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