SMSW - 儲存機器狀態字

操作碼

指令

說明

0F 01 /4

SMSW r/m16

將機器狀態字儲存到 r/m16

0F 01 /4

SMSW r32/m16

將機器狀態字儲存到 r32/m16 的低 16 位;r32 的高 16 位未定義

說明

將機器狀態字(控制暫存器 CR0 的位 0 到 15)儲存到目標運算元。目標運算元可以是 16 位通用暫存器或記憶體位置。

目標運算元是 32 位暫存器時,將暫存器 CR0 的低 16 位複製到該暫存器的低 16 位,暫存器的高 16 位未定義。目標運算元是記憶體位置時,不論運算元的大小如何,暫存器 CR0 都作為 16 位數字寫入記憶體。

SMSW 指令僅在操作系統軟體中有用;不過它不是特權指令,也可以在應用程式中使用。

提供此指令是爲了與英特爾(R) 286 處理器相容。對於要在奔騰(R) Pro、奔騰、Intel486™ 及 Intel386™ 處理器上執行的程式與過程,應該使用 MOV(控制暫存器)指令載入機器狀態字。

操作

DEST CR0[15:0]; (* Machine status word *);

影響的標誌

無。

保護模式異常

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

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

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

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

實地址模式異常

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

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

虛 8086 模式異常

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

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

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

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