操作碼 |
指令 |
說明 |
D9 /4 |
FLDENV m14/28byte |
從 m14byte 或 m28byte 中載入 FPU 環境。 |
將完整的 x87 FPU 操作環境從記憶體載入到 FPU 暫存器。源運算元指定記憶體中操作環境數據的第一個位元組。此數據通常由 FSTENV 或 FNSTENV 指令寫入指定的記憶體位置。
FPU 操作環境由 FPU 控制字、狀態字、標記字、指令指針、數據指針以及上一個操作碼組成。“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 1 卷的“圖 7-13”到“圖 7-16”顯示載入的環境在記憶體中的佈局,具體取決於處理器的操作模式(保護模式或真實模式)以及目前的運算元大小屬性(16 位或 32 位)。在虛 8086 模式中,使用真實模式佈局。
FLDENV 指令應該與相應的 FSTENV/FNSTENV 指令在相同的操作模式中執行。
如果在新的 FPU 狀態字中設定一個或多個無掩碼的異常標誌,則執行下一條浮點指令(無等待浮點指令除外,請參閱“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 1 卷第 8 章中標題為“軟體異常處理”的部分)時,將產生浮點異常。要避免在載入新的環境時產生異常,請清除要載入的 FPU 狀態字中的所有異常標誌。
FPUControlWord SRC[FPUControlWord);
FPUStatusWord SRC[FPUStatusWord);
FPUTagWord SRC[FPUTagWord);
FPUDataPointer SRC[FPUDataPointer);
FPUInstructionPointer SRC[FPUInstructionPointer);
FPULastInstructionOpcode SRC[FPULastInstructionOpcode);
載入 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。
#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。
#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。
#NM - 如果 CR0 中的 EM 或 TS 設定為 1。
#PF(錯誤程式碼) - 如果發生頁錯誤。
#AC(0) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。