-----------------------------------------------------------------|Код Команда Число Описание ||операции тактовых || циклов || ||9B D9 /6 FSTENVm14/ 67 реальный Сохранение контекста FPU в || 28byte или вирт./ m14byte или m28byte после || 56 защищ.+ проверки условия немаскиру- || минимум 3 емой ошибки с плавающей || для FWAIT точкой. Затем маскирование || всех исключений с || плавающей точкой. ||D9 /6 FNSTENVm14/ 67 реальный Сохранение контекста FPU в || 28byte или вирт./ m14byte или m28byte без || 56 защищ. проверки условия немаскиру- || емой ошибки с плавающей || точкой. Затем маскирование || всех исключений || плавающей точкой. |----------------------------------------------------------------- Работа команды DEST <- контекст FPU;CW[0..5] <- 111111B; ОписаниеКоманды сохранения контекста записывают текущий контекст FPU по заданномуназначению и затем маскируют все исключения операций с плавающей точкой.Контекст FPU состоит из управляющего слова FPU, слова состояния, словатега и указателей ошибки (данных и команд).Макет контекста в памяти зависит одновременно от размера операнда итекущего режима работы процессора. Атрибут USE текущего кодового сегментаопределяет размер операнда: 14-разрядный операнд относится к сегментуUSE16, а 28-разрядный операнд относится к сегменту USE32. На рисунках 15-5- 15-8 показан макет контекста для обоих размеров операндов в режимахреальных адресов и защищенном. (В виртуальном режиме 8086 используетсямакет контекста реального режима). Изменяемые флаги модуля операций с плавающей точкойC0, C1, C2, C3 не определены. Исключения числовых операцийОтсутствуют Исключения защищенного режима#GP(0), если результат должен помещаться в сегмент, для которого запрещеназапись; #GP(0) в случае недопустимого исполнительного адреса операндапамяти в сегментах CS, DS, ES, FS или GS; #SS(0) в случае недопустимогоадреса в сегменте SS; #PF(код сбоя) в случае страничного сбоя; #AC дляневыравненной ссылки к памяти при текущем уровне привилегированности,равном 3. Исключения режима реальных адресовПрерывание 13, если какая-либо часть операнда лежит вне пространстваисполнительных адресов от 0 до 0FFFFH; Прерывание 7 при установленном EMили TS в CR0. Исключения виртуального режима 8086Те же исключения, что и для режима реальных адресов: #PF (код сбоя) длястраничных сбоев; #AC для невыравненной ссылки к памяти при текущем уровнепривилегированности, равном 3. ПримечанияFSTENV и FNSTENV не сохраняют контекста FPU до тех пор, пока не будутзавершены действия FPU. Таким образом, сохраненный контекст отражаетсостояние FPU после выполнения любой ранее декодированной команды.Команды сохранения контекста часто используются в обработчиках исключений,поскольку они обеспечивают доступ к указателям ошибки FPU. Контекст обычносохраняется в стеке оперативной памяти. После этого FSTENV и FNSTENVустанавливают все маски исключений в управляющем слове FPU. Этопредотвращает прерывания обработчика исключений вследствие ошибкокоперации с плавающей точкой.FSTENV проверяет условия немаскируемого исключения с плавающей точкой,прежде чем сохранить контекст FPU; FNSTENV этого не делает.