LDMXCSR - 載入數據流單指令多數據擴充套件指令集控制/狀態

操作碼

指令

說明

0F,AE,/2

LDMXCSR m32

從 m32 載入“數據流單指令多數據擴充套件指令集”控制/狀態字。

說明

MXCSR 控制/狀態暫存器用於啟用掩碼/無掩碼異常處理、設定取整模式、設定清除為零模式以及檢視異常狀態標誌。下圖顯示 MXCSR 中各個欄位的格式與編碼:

31-16

15

 

 

 

 

10

 

 

 

 

5

 

 

 

 

0

保留

FZ

RC

RC

PM

UM

OM

ZM

DM

IM

保留

PE

UE

OE

ZE

DE

IE

復位時 MXCSR 的預設值是 0x1f80。

位 5-0 表示是否檢測到“數據流單指令多數據擴充套件指令集”異常。它們是“粘性”標誌,可以通過使用 LDMXCSR 指令向這些欄位寫入零加以清除。如果 LDMXCSR 指令清除掩碼位並設定相應的異常標誌位,則不會立即產生異常。僅當執行下一條會導致此類異常的“數據流單指令多數據擴充套件指令集”指令時,才會發生異常。“數據流單指令多數據擴充套件指令集”對於每個異常僅使用一個異常標誌。對於壓縮數據型別中的異常,不提供單獨的報告。在相同的指令中發生多個完全相同的異常情況下,將更新關聯的異常標誌,以指出至少發生其中一種情況。復位時這些標誌都將清除。

位 12-7 配置數值異常掩碼。如果設定異常型別對應的位,則遮蔽該異常型別;如果該位清除,則取消掩碼。復位時將設定這些啟用位,表示遮蔽所有數值異常。

位 14-13 給取整控制編碼,提供普通就近模式的取整、定向取整以及截尾取整。取整控制影響算術指令與某些轉換指令。RC 的編碼如下所示:

取整模式

RC 欄位

說明

就近取整(偶數)

00B

取整結果最接近無限精確的結果。如果兩個值近似,則結果是偶數值(即最低有效位為零的值)。

向下取整(向負無窮大)

01B

取整結果接近但不大於無限精確的結果

向上取整(向正無窮大)

10B

取整結果接近但不小於無限精確的結果

向零取整(截斷)

11B

取整結果的絕對值接近但不大於無限精確的結果。

復位時取整控制設定為就近取整。

位 15 (FZ) 用於打開“清除為零”模式(位設定為 1)。發生下溢時,打開“清除為零”模式時具有以下效果:

IEEE 規定的下溢掩碼響應是傳遞非規格化結果(即逐漸下溢);因此“清除為零”模式與 IEEE 754 標準不相容。提供它主要是出於效能方面的考慮。在經常發生下溢的應用程式中,稍微損失一點精度可以換來更快的執行速度。取消下溢異常掩碼的優先順序高於“清除為零”模式。這種安排表示,不論是否啟用“清除為零”,在取消下溢異常的掩碼時,處理器都會為產生下溢情況的“數據流單指令多數據擴充套件指令集”指令啟用異常處理程式。

MXCSR 的其它位(位 31-16 與位 6)定義為保留位並處于清除狀態;試圖使用 FXRSTOR 或 LDMXCSR 指令向這些位寫入非零值,將導致一般保護性異常。

線性地址對應于引用的記憶體數據的最低有效位元組。

操作

MXCSR m32;

C++ 編譯器等價內部函式

_mm_setcsr(unsigned int i)

將控制暫存器設定為指定的值。

異常

一般保護性錯誤 - 如果將非零值載入到保留位。

數值異常

無。

保護模式異常

#GP(0) - CS、DS、ES、FS 或 GS 段中的記憶體運算元有效地址非法。

#SS(0) - SS 段中的地址非法。

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

#UD - 如果 CR0.EM 1。

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

#AC - 未對齊的記憶體引用。要啟用 #AC 異常,必須滿足三個條件(CR0.AM 設定為 1;EFLAGS.AC 設定為 1;目前的 CPL 是 3)。#UD - 如果 CR4.OSFXSR(位 9) 0。 #UD - 如果 CPUID.XMM(EDX 位 25) 0。

實地址模式異常

中斷 13 - 如果運算元的任何部分出現在從 0 到 0FFFFH 的有效地址空間之外。

#UD - 如果 CR0.EM 1。

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

#UD - 如果 CR4.OSFXSR(位 9) 0。 #UD 如果 CPUID.XMM(EDX 位 25) 0。

虛 8086 模式異常

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

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

#AC - 未對齊的記憶體引用。

註釋

配合 Repeat 字首 (F3H) 使用 LDMXCSR 屬於保留用法。不同的處理器版本處理此字首的方式可能會有所不同。配合此字首使用 LDMXCSR 可能會同將來的處理器不相容。