| FXSAVE |
| Съхраняване на всички среди |
| Общи форми: |
FXSAVE dest |
| |
| Форма |
КОП |
|
I8087 |
I80387 |
B/ME |
| FXSAVE |
0F AE /0 |
|
|
|
|
|
| Действие |
Съхранява в паметта пълното състояние на следните модули на процесора: устройството с плаваща запетая (и насложеното на физически същото място MMX) и устройството на SSE.
Ако флаг OSFXSR в CR4 не е установен, състоянието на SSE може да не се съхрани. Това поведение зависи от реализацията.
Форматът, в който се съхраняват средите, зависи от режима на работа:
| |
Защитен режим |
| 000 |
|
IP.Sel |
IP.Offset |
fOP |
|
TW |
SW |
CW |
| 010 |
MXCSR_MASK |
MXCSR |
|
DP.Sel |
DP.Offset |
| 020 |
|
ST0/MM0 |
| 030 |
|
ST1/MM1 |
| 040 |
|
ST2/MM2 |
| 050 |
|
ST3/MM3 |
| 060 |
|
ST4/MM4 |
| 070 |
|
ST5/MM5 |
| 080 |
|
ST6/MM6 |
| 090 |
|
ST7/MM7 |
| 0A0 |
XMM0 |
| 0B0 |
XMM1 |
| 0C0 |
XMM2 |
| 0D0 |
XMM3 |
| 0E0 |
XMM4 |
| 0F0 |
XMM5 |
| 100 |
XMM6 |
| 110 |
XMM7 |
| 120 |
|
| 130 |
|
| 140 |
|
| 150 |
|
| 160 |
|
| 170 |
|
| 180 |
|
| 190 |
|
| 1A0 |
|
| 1B0 |
|
| 1C0 |
|
| 1D0 |
|
| 1E0 |
|
| 1F0 |
|
| |
Разширен режим, WordSize = 64 |
| 000 |
RIP |
fOP |
|
TW |
SW |
CW |
| 010 |
MXCSR_MASK |
MXCSR |
DP |
| 020 |
|
ST0/MM0 |
| 030 |
|
ST1/MM1 |
| 040 |
|
ST2/MM2 |
| 050 |
|
ST3/MM3 |
| 060 |
|
ST4/MM4 |
| 070 |
|
ST5/MM5 |
| 080 |
|
ST6/MM6 |
| 090 |
|
ST7/MM7 |
| 0A0 |
XMM0 |
| 0B0 |
XMM1 |
| 0C0 |
XMM2 |
| 0D0 |
XMM3 |
| 0E0 |
XMM4 |
| 0F0 |
XMM5 |
| 100 |
XMM6 |
| 110 |
XMM7 |
| 120 |
XMM8 |
| 130 |
XMM9 |
| 140 |
XMM10 |
| 150 |
XMM11 |
| 160 |
XMM12 |
| 170 |
XMM13 |
| 180 |
XMM14 |
| 190 |
XMM15 |
| 1A0 |
|
| 1B0 |
|
| 1C0 |
|
| 1D0 |
|
| 1E0 |
|
| 1F0 |
|
| |
Разширен режим, WordSize = 32 |
| 000 |
|
IP.Sel |
IP.Offset |
fOP |
|
TW |
SW |
CW |
| 010 |
MXCSR_MASK |
MXCSR |
|
DP.Sel |
DP.Offset |
| 020 |
|
ST0/MM0 |
| 030 |
|
ST1/MM1 |
| 040 |
|
ST2/MM2 |
| 050 |
|
ST3/MM3 |
| 060 |
|
ST4/MM4 |
| 070 |
|
ST5/MM5 |
| 080 |
|
ST6/MM6 |
| 090 |
|
ST7/MM7 |
| 0A0 |
XMM0 |
| 0B0 |
XMM1 |
| 0C0 |
XMM2 |
| 0D0 |
XMM3 |
| 0E0 |
XMM4 |
| 0F0 |
XMM5 |
| 100 |
XMM6 |
| 110 |
XMM7 |
| 120 |
XMM8 |
| 130 |
XMM9 |
| 140 |
XMM10 |
| 150 |
XMM11 |
| 160 |
XMM12 |
| 170 |
XMM13 |
| 180 |
XMM14 |
| 190 |
XMM15 |
| 1A0 |
|
| 1B0 |
|
| 1C0 |
|
| 1D0 |
|
| 1E0 |
|
| 1F0 |
|
|
| Флагове |
Особености:
- Полето TW съхранява думата за валидност на регистрите на FPU в съкратен вид: 0 в бит i обозначава празен регистър Ri, а 1 – зает, нула или специална стойност;
- Полето MXCSR_MASK позволява да се определи кои битове от регистър MXCSR са валидни и кои запазени. Запис на единица в запазен флаг предизвиква #GP. Затова приложение или ОС, която използва инструкции FXRSTOR и STMXCSR трябва предварително да маскира невалидните битове.
Полето MXCSR_MASK е недефинирано за Pentium III. Затова преди изпълнение на FXSAVE 512-байтовата област трябва да се нулира. Ако след това стойността на полето MXCSR_MASK е нула, то действителната стойност на маската е 0000FFBFh. Тази маска нулира флага DAZ, който не е дефиниран в Pentium III. Всяка друга стойност задава фактическата маска.
|
| FPU/CPU |
| 8087 |
287 |
387 |
486 |
P |
P-P |
P-II |
P-III |
P-4 |
B/ME |
| |
|
|
|
|
|
• |
• |
• |
|
Инструкцията се смята за част от SSE. Изпълнява се ако CPUID(1) върне EDX{24} = 1.
|
| Изключения |
ОБЩИ +
| Всички режими |
| #GP(0) |
Ако ефективният адрес на операнда не е подравнен на 16 байта |
| #NM |
CR0.TS = 1 |
| #UD |
CR0.EM = 1 |
| #MF |
Ако има чакащи числени изключения |
|