logo

Главная Система команд x86 Система команд FPU FRSTOR

Система команд x86

Программирование - Архитектура и система команд микропроцессоров x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

FRSTOR

Восстановить контекст FPU

Влияние команды на флаги и форматы команды:

IS

IA

D

Z

O

U

P

*

*

*

*

*

*

*

 

Код

Команда

Описание

Проц.

Пример

DD /4

FRSTOR m94/108byte

Загрузить контекст FPU из m94byte или m108byte

8087

frstor [ecx]

Описание:

Команда FRSTOR загружает новый контекст FPU (среду и регистровый стек) из памяти. Данные в памяти обычно помещаются туда предшествующей командой FSAVE или FNSAVE.

Среда FPU состоит из управляющего слова FPU (CW), слова состояния (SW), слова тэгов (TW) и указателей ошибки для данных и для команды (FDP, FIP).

Формат и расположение загружаемых значений в памяти зависят, от атрибута размера операнда команды и от текущего режима работы процессора (см. рис. 1.15., … 1.18.). Данные для регистров стека FPU, начиная с ST(0) и заканчивая ST(7), занимают 80 байт и размещаются сразу же за образом среды.

Команда FRSTOR должна выполняться в том же режиме работы, что и соответствующая предваряющая ее команда FSAVE или FNSAVE.

Если при загрузке нового контекста в регистр SW помещается значение с установленными флагами исключений, а новое значение в регистре CW не маскирует соответствующие исключения, то в результате загрузки возникнут отложенные исключения, которые инициируют вызов обработчика исключений на следующей команде FPU/MMX/3DNow! (но только в случае исключений, обработка которых откладывается до следующей операции).

Команда FRSTOR не оказывает влияния ни на какие SIMD-регистры.

Операция:

FPUControlWord = SRC(FPUControlWord);

FPUStatusWord = SRC(FPUStatusWord);

FPUTagWord = SRC(FPUTagWord);

FPUDataPointer = SRC(FPUDataPointer);

FPUInstructionPointer = SRC(FPUInstructionPointer);

FPULastInstructionOpcode = SRC(FPULastInstructionOpcode);

ST(0) = SRC(ST(0));

ST(1) = SRC(ST(1));

ST(2) = SRC(ST(2));

ST(3) = SRC(ST(3));

ST(4) = SRC(ST(4));

ST(5) = SRC(ST(5));

ST(6) = SRC(ST(6));

ST(7) = SRC(ST(7));

Особые ситуации защищенного режима:

#GP(0), если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#NM, если CR0.EM = 1 или CR0.TS = 1.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.

Особые ситуации режима реальной адресации:

#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#SS, если любая часть операнда находится вне пространства эффективных адресов в сегменте SS.
#NM, если CR0.EM = 1 или CR0.TS = 1.

Особые ситуации режима V86:

Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.

Замечание:

В процессорах 8087, Intel287, Intel387, Intel486, если программа читает из памяти сохраненный контекст сразу же после сохранения его командой FSAVE/FNSAVE, то она должна выполнить команду FWAIT, чтобы наверняка завершить сохранение.


Входит в группу команд: Система команд FPU




Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Top.Mail.Ru       Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники