FSTSW/FNSTSW - 儲存 x87 FPU 狀態字

操作碼

指令

說明

9B DD /7

FSTSW m2byte

檢查未決的無掩碼浮點異常之後,將 FPU 狀態字儲存到 m2byte

9B DF E0

FSTSW AX

檢查未決的無掩碼浮點異常之後,將 FPU 狀態字儲存到 AX 暫存器。

DD /7

FNSTSW* m2byte

將 FPU 狀態字儲存到 m2byte,不檢查未決的無掩碼浮點異常。

DF E0

FNSTSW* AX

將 FPU 狀態字儲存到 AX 暫存器,不檢查未決的無掩碼浮點異常。

說明

將 FPU 狀態字的當前值儲存到目標位置。目標運算元可以是雙位元組的記憶體位置或 AX 暫存器。在儲存狀態字之前,FSTSW 指令檢查並處理未決的無掩碼浮點異常,FNSTSW 指令則不會。

FNSTSW AX 形式的指令主要用於條件分支(例如,用在 FPU 比較指令、FPREM、FPREM1 或 FXAM 指令之後),分支的方向取決於 FPU 條件程式碼標誌的狀態。(請參閱“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 1 卷第 7 章中標題為“根據 FPU 條件程式碼進行的分支與條件移動”的部分)。在不使用中斷的環境中,還可以使用此指令啟用異常處理程式(通過檢查異常標誌)。執行 FNSTSW AX 指令時,處理器會在執行其它指令之前更新 AX 暫存器。這樣,就可以確保 AX 暫存器儲存的狀態是 FPU 指令完成之前的狀態。

英特爾(R) 體系結構相容性

在 MS-DOS* 操作系統相容模式中操作奔騰(R) 或 Intel486™ 處理器時,FNSTSW 指令(在特殊的情況下)可能會在執行(以便處理未決的 FPU 異常)之前中斷。如需有關這些情況的說明,請參閱“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 1 卷附錄 D 中標題為“無等待 FPU 指令可以在視窗中發生 FPU 中斷”的部分。在奔騰 Pro 處理器上,FNSTSW 指令不能以此方式中斷。

操作

DEST FPUStatusWord;

影響的 FPU 標誌

C0、C1、C2 及 C3 未定義。

浮點異常

無。

保護模式異常

#GP(0) - 如果目標位於不可寫的段。如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。如果 DS、ES、FS、或 GS 暫存器用於訪問記憶體,並且它包含空的段選擇器。

#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。

#NM - 如果 CR0 中的 EM 或 TS 設定為 1。

#PF(錯誤程式碼) - 如果發生頁錯誤。

#AC(0) - 如果啟用對齊檢查並在目前特權級別為 3 時進行未對齊的記憶體引用。

實地址模式異常

#GP - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。

#SS - 如果記憶體運算元有效地址超出 SS 段限制。

#NM - 如果 CR0 中的 EM 或 TS 設定為 1。

虛 8086 模式異常

#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。

#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。

#NM - 如果 CR0 中的 EM 或 TS 設定為 1。

#PF(錯誤程式碼) - 如果發生頁錯誤。

#AC(0) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。