-----------------------------------------------------------------|Код Команда Число Описание ||операции тактовых || циклов || ||DB DD /6 FSAVE m94/ 154 реальный Сохранение состояния FPU в || 109byte или вирт./ m94byte или m108byte после || 143 защищ.+ проверки условия немаскиру- || минимум 3 емой ошибки с плавающей || для FWAIT точкой. Затем ре-инициализа-|| ция FPU. ||DD /6 FNSAVE m94/ 154 реальный Сохранение состояния FPU в || 109byte или вирт./ m94byte или m108byte без || 143 защищ. проверки условия немаскиру- || емой ошибки с плавающей || точкой. Затем ре-инициализа-|| ция FPU. |----------------------------------------------------------------- Работа команды DEST <- состояние FPU;инициализация FPU; (* Эквивалентно FNINIT *) ОписаниеКоманды сохранения записывают текущее состояние FPU (контекст и регистрыстека) по заданному назначению и затем ре-инициализируют FPU. Контекст FPUсостоит из управляющего слова FPU, слова состояния, слова тега иуказателей ошибки (данных и команд).Макет контекста в памяти зависит одновременно от размера операнда итекущего режима работы процессора. Атрибут USE текущего кодового сегментаопределяет размер операнда: 94-разрядный операнд относится к сегментуUSE16, а 108-разрядный операнд относится к сегменту USE32. На рисунках15-5 - 15-8 показан макет контекста для обоих размеров операндов в режимахреальных адресов и защищенном. (В виртуальном режиме 8086 используетсямакет контекста реального режима). Регистры стека, начиная с ST и кончаяST(7), находятся в 80 байтах, непосредственно следующих за образомконтекста. Изменяемые флаги модуля операций с плавающей точкой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. ПримечанияFSAVE и FNSAVE не сохраняют состояния FPU до тех пор, пока не будутзавершены действия FPU. Таким образом, сохраненный образ отражаетсостояние FPU после выполнения любой ранее декодированной команды.Если программа должна читать образ в памяти состояния, следующего закомандой сохранения, то она должна выдать команду FWAIT, чтобыгарантировать, что сохранение завершено. Команды сохранения обычно используются, когда операционной системенеобходимо выполнить переключение контекста, или обработчику исключениятребуется использовать FPU, либо когда прикладная программа собираетсяпередать в подпрограмму "чистый" FPU.