Эта группа команд обеспечивает управление режимом работы сопроцессора. Для программиста особенно интересны команды работы с регистрами управления и состояния.
МНЕМОНИКА | ОПИСАНИЕ КОМАНДЫ |
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, но дополнительно сохраняет в памяти содержимое численных регистров, располагая их после указателя операнда :
|
| |||
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, то есть не проверяет наличия особого случая сопроцессора. Все остальные команды синхронизируются автоматически.