Последняя группа команд предназначена для общего управления работой сопроцессора. Команды этой группы имеют особенность — перед началом своего выполнения они не проверяют наличие незамаскированных исключений. Однако такая проверка может понадобиться, в частности, для того, чтобы при параллельной работе основного процессора и сопроцессора предотвратить разрушение информации, необходимой для корректной обработки исключений, возникающих в сопроцессоре. Поэтому некоторые команды управления имеют аналоги, выполняющие те же действия плюс одну дополнительную функцию — проверку наличия исключения в сопроцессоре! Эти команды имеют одинаковые мнемокоды (и машинные коды тоже), различающиеся только вторым символом — символом n:
– мнемокод, не содержащий второго символа n, обозначает команду, которая перед началом своего выполнения проверяет наличие незамаскированных исключений;
– мнемокод, содержащий второй символ n, обозначает команду, которая перед началом своего выполнения не проверяет наличия незамаскированных исключений, то есть выполняется немедленно, что позволяет сэкономить несколько машинных тактов.
|
|
Как уже упоминалось, эти команды имеют одинаковый машинный код. Отличие лишь в том, что перед командами, не содержащими символа n, транслятор ассемблера вставляет команду WAIT. Команда WAIT является полноценной командой основного процессора, и ее при необходимости можно указывать явно. Команда WAIT имеет аналог среди команд сопроцессора — FWAIT. Обеим этим командам соответствует код операции 9bh.
Команда WAIT/FWAIT — это команда ожидания. Она предназначена для синхронизации работы процессора и сопроцессора.
Команда инициализации сопроцессора FINIT/FNINIT. Она инициализирует управляющие регистры сопроцессора определенными значениями.
Следующие две команды работают с регистром состояния SWR.
FSTSW/FNSTSW ах — команда сохранения содержимого регистра состояния SWR в регистре АХ. Эту команду целесообразно использовать для подготовки к условным переходам по описанной при рассмотрении команд сравнения схеме.
FSTSW/FNSTSW приемник — команда сохранения содержимого регистра состояния SWR в ячейке памяти. От рассмотренной ранее команда отличается типом операнда — теперь это ячейка памяти размером два байта (в соответствии с размерностью регистра SWR).
Следующие две команды, работающие с информацией в регистре управления CWR, поддерживают действие записи и чтения содержимого этого регистра.
FSTCW/FNSTCW приемник — команда сохранения содержимого регистра управления CWR в ячейке памяти размером два байта. Эту команду целесообразно использовать для анализа полей маскирования исключений, управления точностью и округления. Следует заметить,что операндом не является регистр АХ, в отличие от команды FSTSW/FNSTSW.
|
|
FLDCW источник — команда загрузки значения ячейки памяти размером 16 битов в регистр управления CWR. Эта команда выполняет действие, противоположное действию команды FSTCW/FNSTCW. Команду FLDCW целесообразно использовать для задания или изменения режима работы сопроцессора.
Следующая команда — команда без операндов FCLEX/FNCLEX — позволяет сбросить флаги исключений в регистре состояния SWR сопроцессора.
Сопроцессор имеет две команды, которые работают с указателем стека в регистре SWR.
FINCSTP — команда увеличения указателя стека на единицу (поле ТОР) в регистре SWR. Команда не имеет операндов.
FDECSTP — команда уменьшения указателя стека (поле ТОР) в регистре SWR. Команда не имеет операндов.
Следующая команда,
FFREE st(i), помечает любой регистр стека сопроцессора как пустой. Это команда освобождения регистра стека ST(i).
В группе команд управления можно выделить подгруппу команд, работающих с так называемой средой сопроцессора. Среда сопроцессора — это совокупность регистров сопроцессора и их значений. Среда сопроцессора может быть частичной или полной. О какой именно среде идет речь, определяется одной из рассмотренных далее команд:
FSAVE/FNSAVE приемник — команда сохранения полного состояния среды сопроцессора в память, адрес которой указан операндом приемник.
FRSTOR источник – команда восстановления полного состояния среды сопроцессора из области памяти, адрес которой указан операндом источник. Сопроцессор будет работать в новой среде сразу после окончания работы команды FRSTOR.