Управляющие команды
Управляющие команды предназначены для работы с нечисловыми регистрами сопроцессора. Некоторые команды имеют альтернативные варианты. Мнемоники этих команд могут начинаться с 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 записывает в память содержимое всех регистров, кроме численных, в следующем формате:
------------------------¬ ¦ Управляющий регистр ¦ +-----------------------+ ¦ Регистр состояния ¦ +-----------------------+ ¦ Регистр тегов ¦ +-----------------------+ ¦ ¦ +- Указатель команды -+ ¦ ¦ +-----------------------+ ¦ ¦ +- Указатель операнда -+ ¦ ¦ L------------------------
Команда FLDENV предназначена для загрузки регистров, сохраненных ранее командой FNSTENV. Обе эти команды полезны в программах обработки особых случаев.
Команды FNSAVE и FRSTOR действуют аналогично командам FNSTENV и FLDENV, но они дополнительно сохраняют и восстанавливают содержимое численных регистров. Формат области сохранения регистров, занимающей 94 байта, приведен на следующем рисунке:
------------------------¬ ¦ Управляющий регистр ¦ +-----------------------+ ¦ Регистр состояния ¦ +-----------------------+ ¦ Регистр тегов ¦ +-----------------------+ ¦ ¦ +- Указатель команды -+ ¦ ¦ +-----------------------+ ¦ ¦ +- Указатель операнда -+ ¦ ¦ +-----------------------+-------------------------------¬ ¦ ST(0) ¦ +-------------------------------------------------------+ ¦ ST(1) ¦ +-------------------------------------------------------+ ¦ ST(2) ¦ +-------------------------------------------------------+ ¦ ST(3) ¦ +-------------------------------------------------------+ ¦ ST(4) ¦ +-------------------------------------------------------+ ¦ ST(5) ¦ +-------------------------------------------------------+ ¦ ST(6) ¦ +-------------------------------------------------------+ ¦ ST(7) ¦ L--------------------------------------------------------
Команды FINCSTP и FDECSTP, соответственно, увеличивают и уменьшают на 1 указатель стека SP.
Команда FFREE ST(i) помечает численный регистр ST(i) как пустой, записывая в соответствующее поле регистра тегов значение 11.
Команда FNOP не производит никаких действий.
Команда FSETPM переводит сопроцессор в защищенный режим работы. Подробное рассмотрение защищенного режима работы выходит за рамки данной книги.
Содержание раздела