操作碼 |
指令 |
說明 |
0F AE /1 |
FXRSTOR m512byte |
從 m512byte 載入 x87 FPU、MMX™ 技術、“數據流單指令多數據擴充套件指令集”以及“第二代數據流單指令多數據擴充套件指令集”狀態。 |
從源運算元重新載入 x87 FPU、MMX™ 技術、“數據流單指令多數據擴充套件指令集”、“第二代數據流單指令多數據擴充套件指令集”的數據、控制及狀態暫存器。源運算元是 512 位元組記憶體位置。此數據應該先使用 FXSAVE 指令寫入記憶體。FXSAVE 與 FXRSTOR 記憶體區域佈局顯示狀態資訊在記憶體中的佈局。浮點儲存區域中有三個欄位包含保留位,這些位沒有在表中指出:
FOP:低 11 位包含操作碼,高 5 位保留。IP 與 DP 32 位模式:32 位 IP 偏移量。16 位模式:低 16 位是 IP 偏移量,高 16 位保留。
如果 MXCSR 狀態包含無掩碼異常並且設定了相應的狀態標誌,則載入它時不會導致聲言浮點錯誤條件。只有下一次發生此無掩碼異常時,才會導致聲言錯誤條件。
MXCSR 的一些位(位 31-16 與位 6 )定義為保留位或清除位;試圖向這些位寫入非零值將導致一般保護性異常。
FXRSTOR 指令不清除未決的 x87 FPU 異常,這與 FRSTOR 指令不同。要在載入新的操作環境時檢查並觸發異常,請先後使用 FXRSTOR 指令與 FWAIT 指令。
如果未設定 CR4.OSFXSR 位,則不將儲存映像中的“數據流單指令多數據擴充套件指令集”欄位(XMM0-XMM7 與 MXCSR)載入到處理器。這個 CR4 位必須設定,才能執行“數據流數據流單指令多數據擴充套件指令集”。
使用 FXSAVE 儲存並使用 FRSTOR 還原狀態,以及使用 FSAVE 儲存並使用 FXRSTOR 還原狀態,都將導致處理器的狀態無法正確還原。地址大小字首對地址計算的影響跟通常的情況一樣,但它不影響 FXRSTOR 映像的格式。
Load x87 FPU, MMX technology, SSE, and SSE2 state SRC;
15 14 |
13 12 |
11 10 |
9 8 |
7 6 |
5 |
4 |
3 2 |
1 0 |
|
保留 |
CS |
IP |
FOP |
FTW |
FSW |
FCW |
0 | ||
保留 |
MXCSR |
保留 |
DS |
DP |
16 | ||||
保留 |
ST0/MM0 |
32 | |||||||
保留 |
ST1/MM1 |
48 | |||||||
保留 |
ST2/MM2 |
64 | |||||||
保留 |
ST3/MM3 |
80 | |||||||
保留 |
ST4/MM4 |
96 | |||||||
保留 |
ST5/MM5 |
112 | |||||||
保留 |
ST6/MM6 |
128 | |||||||
保留 |
ST7/MM7 |
144 | |||||||
XMM0 |
160 | ||||||||
xmm1 |
176 | ||||||||
XMM2 |
192 | ||||||||
XMM3 |
208 | ||||||||
XMM4 |
224 | ||||||||
XMM5 |
240 | ||||||||
XMM6 |
256 | ||||||||
XMM7 |
272 | ||||||||
保留 |
288 | ||||||||
保留 |
304 | ||||||||
保留 |
320 | ||||||||
保留 |
336 | ||||||||
保留 |
352 | ||||||||
保留 |
368 | ||||||||
保留 |
384 | ||||||||
保留 |
400 | ||||||||
保留 |
416 | ||||||||
保留 |
432 | ||||||||
保留 |
448 | ||||||||
保留 |
464 | ||||||||
保留 |
480 | ||||||||
保留 |
496 |
無。
#GP(0) - CS、DS、ES、FS 或 GS 段中的記憶體運算元有效地址非法,或是試圖將非零值載入到 MXCSR 欄位中的保留位。如果記憶體運算元未對齊 16 位元組邊界,不論是哪一段。
#SS(0) - SS 段中的地址非法。
#PF(錯誤程式碼) - 頁錯誤。
#NM - 如果 CR0.EM 1。
#NM - 如果 CR0 中的 TS 位設定為 1。
#UD - 如果指令帶 LOCK 覆蓋字首
#AC - 如果在目前特權級別為 3 時進行未對齊的記憶體引用。如果啟用 #AC(且 CPL 為 3),則發出 #AC 訊號所表示的含義是不確定的,隨具體版本而異。在不發出 #AC 訊號的所有版本中,將產生一般保護性錯誤,而不是發出訊號。此外啟用 #AC 時,對齊檢查的寬度也隨具體版本而異;例如,對於給定的版本,在發生 2 位元組未對齊時,可能會發出 #AC 訊號,而發生其它未對齊(4、8 或 16 位元組)情況時,則可能會發出 #GP 訊號。
#GP(0) - 如果記憶體運算元未對齊 16 位元組邊界,不論是哪一段。
中斷 13 - 如果運算元的任何部分出現在從 0 到 0FFFFH 的有效地址空間之外。
#NM - 如果 CR0.EM 1。
#NM - 如果 CR0 中的 TS 位設定為 1。
#UD - 如果指令帶 LOCK 覆蓋字首
與“實地址模式”中的異常相同。
#AC - 如果在目前特權級別為 3 時進行未對齊的記憶體引用。
#PF(錯誤程式碼) - 頁錯誤。