FXRSTOR - 還原 x87 FPU、MMX™ 技術、數據流單指令多數據擴充套件指令集、第二代數據流單指令多數據擴充套件指令集狀態

操作碼

指令

說明

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;

FXSAVE 與 FXRSTOR 記憶體區域佈局

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

x87 FPU 與 SIMD 浮點異常

無。

保護模式異常

#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 覆蓋字首

虛 8086 模式異常

與“實地址模式”中的異常相同。

#AC - 如果在目前特權級別為 3 時進行未對齊的記憶體引用。

#PF(錯誤程式碼) - 頁錯誤。