Управляющие команды модуля обработки операций с плавающей точкой показаны в Таблице 17-8. Команда FSTSW обычно используется для условного ветвления. Остальные команды как правило не используются в вычислениях, они управляют действиями модуля обработки операций с плавающей точкой на системном уровне. Эти действия включают в себя инициализацию модуля обработки операций с плавающей точкой, обработку численных исключений и переключение задач.
Таблица 17-8. Управляющие Инструкции +---------------------------------------------------------------+| Мнемоника | Операция |+---------------------+-----------------------------------------|| | || FINIT/FNINIT | Инициализация FPU || | || FLDCW | Загрузка Управляющего Слова || | || FSTCW/FNSTCW | Сохранить Управляющее Слово || | || FSTSW/FNSTSW | Сохранить Слово Состояния || | || FSTSW AX/FNSTSW AX* | Сохранить Слово Состояния в Регистре AX || | || FCLEX/FNCLEX | Сброс Исключения || | || FSTENV/FNSTENV | Сохранить Окружение || | || FLDENV | Загрузить Окружение || | || FSAVE/FNSAVE | Сохранить Состояние || | || FRSTOR | Восстановить Состояние || | || FINCSTP | Увеличить Указатель Вершины Стека || | || FDECSTP | Уменьшить Указатель Вершины Стека || | || FFREE | Очистить Регистры || | || FNOP | Нет Операция || | || FWAIT | Отчет об ошибках FPU || | |+---------------------------------------------------------------+ * Недоступно для математического сопроцессора 8087.
Как показано в Таблице 17-8, конкретные команды имеют альтернативную мнемонику. Команды, которые инициализируют модуль обработки операций с плавающей точкой, снимают исключения или сохраняют (полностью или частично) операционную среду модуля обработки операций с плавающей точкой, можно представить в двух видах:
Ожидать - эта мнемоника начинается с одного F, например FSTSW. Этот вид проверяет на немаскируемые численные исключения.
Не ожидать - эта мнемоника начинается с FN, например FNSTSW. Этот вид игнорирует немаскируемые численные исключения.
Когда управляющие команды кодируются с использованием мнемоники "не ожидать", ассемблер ASM386/486 не выполняет ESC-команду перед команду WAIT (ожидать), а процессор не тестирует условие возникновения ошибки при команде с плавающей точкой перед выполнением управляющей команды.
В Таблице 17-8 показаны не только команды вида "не ожидать". Все остальные команды с плавающей точкой автоматически синхронизируются процессором. Все операнды передаются перед тем, как следующая команда начнет выполняться. Из-за этой автоматической синхронизации перед неуправляющими командами с плавающей точкой не надо выполнять команду WAIT для того, чтобы все было корректно.
Синхронизация исключений возложена на команду WAIT. Так как модуль обработки операций с плавающей точкой и модуль обработки целочисленных операций работают параллельно, то в случае исключения с плавающей точкой возможно, что процессор будет использовать информацию, необходимую для исправления этой ситуацией, перед тем, как вызвать обработчик этого исключения. Применение команды WAIT или FWAIT в надлежащем месте может предотвратить это. Смотрите Главу 18 для дальнейших пояснений.
Следует также обратить внимание на то, что команды FENI и FDISI сопроцессора 8087 и команда FSETPM сопроцессора 80287 не реализуют никаких функций в процессоре i486. Если эти коды операций обнаруживаются в потоке команд, то процессор i486 не выполняет каких-либо специальных действий и не меняет никаких внутренних состояний. В Главе 25 приведено более полное описание различий между командами с плавающей точкой процессора i486 и арифметических сопроцессоров 8087, 80287 и 387 DX.