logo
несколько программ / bsp33

Управляющие команды

Управляющие команды предназначены для работы с нечисловыми регистрами сопроцессора. Некоторые команды имеют альтернативные варианты. Мнемоники этих команд могут начинаться с FN или с F. Первый вариант соответствует командам "без ожидания". Для таких команд процессор не проверяет, занят ли сопроцессор выполнением команды, то есть бит занятости B не проверяется. Численные особые случаи также игнорируются.

Варианты команд "с ожиданием" действуют также, как и обычные команды сопроцессора.

Приведем список управляющих команд сопроцессора:

FNSTCW (FSTCW) Записать управляющее слово

FLDCW Загрузить управляющее слово

FNSTSW (FSTSW) Записать слово состояния

FNSTSW AX (FSTSW AX) Записать слово состояния в AX,

нет в сопроцессоре 8087

FNCLEX (FCLEX) Сбросить особые случаи

FNINIT (FINIT) Инициализировать сопроцессор

FNSTENV (FSTENV) Записать среду

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

FNSAVE (FSAVE) Записать полное состояние

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

FINCSTP Увеличить указатель стека на 1

FDECSTP Уменьшить указатель стека на 1

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

FNOP Холостая команда, нет операции

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

Команда FNSTCW записывает содержимое управляющего регистра в оперативную память.

Команда FLDCW загружает управляющий регистр данными из оперативной памяти и обычно используется для изменения режима работы сопроцессора.

Команда FNSTSW записывает содержимое регистра состояния в оперативную память. Команда FNSTSW AX записывает содержимое этого регистра в регистр AX центрального процессора для его последующего анализа командами условных переходов.

Сопроцессор 8087 не имеет варианта команды FSTSW AX, поэтому приходится вначале записывать регистр состояния в память, а затем в регистр флагов процессора 8086.

Команда FNCLEX сбрасывает флаги особых случаев в регистре состояния сопроцессора. Кроме того, сбрасываются биты ES и B.

Команда FNINIT инициализирует регистр состояния, управляющий регистр и регистр тегов в соответствии со следующей таблицей:

Регистр

Режим работы

Управляющий

Проективная бесконечность, округление к ближайшему, расширенная точность, все особые случаи замаскированы

Состояния

B=0 (бит занятости сброшен), код условия не определен, ST=ES=0, флаги особых случаев установлены в нуль

Тегов

Все поля регистра тегов содержат значение 11 (пустой регистр)

Команда FNSTENV записывает в память содержимое всех регистров, кроме численных, в формате, показанном на рис. 10.18.

Рис. 10.18. Формат записи в память содержимого всех регистров командой FNSTENV

Команда FLDENV предназначена для загрузки регистров, сохраненных ранее командой FNSTENV. Обе эти команды полезны в программах обработки особых случаев.

Команды FNSAVE и FRSTOR действуют аналогично командам FNSTENV и FLDENV, но они дополнительно сохраняют и восстанавливают содержимое численных регистров. Формат области сохранения регистров, занимающей 94 байта, приведен на рис. 10.19.

Рис. 10.19. Формат записи в память содержимого всех регистров командами FNSAVE и FRSTOR

Команды FINCSTP и FDECSTP увеличивают и уменьшают на 1 указатель стека SP, соответственно.

Команда FFREE ST(i) помечает численный регистр ST(i) как пустой, записывая в соответствующее поле регистра тегов значение 11.

Команда FNOP не производит никаких действий.

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