Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
FXSAVE
Влияние команды на флаги и форматы команды:
0F AE /0 |
FXSAVE m512byte |
Сохранить контекст FPU/MMX и SIMD в m512byte |
Pentium II |
fxsave [ebx] |
Описание:
Команда FXSAVE осуществляет сохранение в области памяти, задаваемой m512byte, содержимого всех регистров FPU/MMX и SIMD. Эти данные могут затем загружаться обратно в процессор командой FXRSTOR. Пара команд FXSAVE/FXRSTOR используется для быстрого переключения контекста FPU/MMX/SIMD при переключении задач. На рис. 6.5. представлен формат структуры данных, сохранаяемой командой FXSAVE и загружаемой командой FXRSTOR.
Команда FXSAVE сограняет содержимое регистра тэгов TW не так, как это делает команда FSAVE. В FXSAVE все тэги располагаются по порядку их соответствия физическим регистрам FPU, а не регистрам стека FPU.
Команда FXSAVE, в отличие от команд ESC, не вызывает генерации особой ситуации #MF при наличии отложенных исключений FPU. Далее может быть выполнена команда FWAIT для проверки наличия необработанных исключений.
Для процессоров, где отсутствует поддержка расширений потоковой обработки SIMD, а также когда CR4.OSFXSR = 0 процессор не производит сохранения регистров XMM0, … XMM7 и MXCSR по команде FXSAVE, а соответствующие им поля в памяти считаются зарезервированными.
Использование префиксов повторения (F2h, F3h) и префикса размера операнда с командой FXSAVE является зарезервированной недокументированной функцией. Различные модели процессоров по разному реагируют на эту ситуацию. Не рекомендуется применять в программах комбинацию команды FXSAVE и названных префиксов, т.к. в дальнейших моделях процессоров эта функция может быть изменена или исключена. Префикс размера адреса может свободно использоваться, он будет оказывать влияние на формирование адреса области данных, но не на формат самой области, который во всех режимах остается неизменным.
Операция:
m512byte = Контекст FPU/MMX и SIMD = 512byte;
Особые ситуации защищенного режима:
#GP(0), если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#NM, если CR0.EM = 1 или CR0.TS = 1.
#PF(Код ошибки), страничная ошибка.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3 (в некоторых случаях при невыровненной ссылке в память может генерироваться особая ситуация #GP).
#UD при использовании перед командой префикса LOCK.
Особые ситуации режима реальной адресации:
#GP, если любая часть операнда находится вне пространства эффективных адресов.
#NM, если CR0.EM = 1 или CR0.TS = 1.
#UD при использовании перед командой префикса LOCK.
Особые ситуации режима V86:
Такие же, как и в режиме реальной адресации.
#PF(Код ошибки), страничная ошибка.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3 (в некоторых случаях при невыровненной ссылке в память может генерироваться особая ситуация #GP).
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru