MONITOR - 設定監視器地址
|
指令 |
說明 |
|
MONITOR EAX, ECX, EDX |
設定硬體要監視的線性地址範圍,並激活監視器。地址範圍應該是寫回記憶體快取型。 |
說明
MONITOR 指令依賴處理器中稱為監視器事件未決標誌的狀態。監視器事件未決標誌或是設定為 1,或是清除;除非通過 MWAIT 指令的行為進行特殊設定,否則它的值並不是體系結構範圍可見的。監視器事件未決標誌由多個事件(包括向監視的地址範圍的寫入)設定,並由 MONITOR 指令復位。MONITOR 指令使用 EAX 中指定的地址設定地址監視硬體,並復位監視器事件未決標誌。硬體檢查儲存的地址範圍可以通過呼叫 CPUID 確定。如需有關設定此地址範圍以避免錯誤喚醒的詳細資訊,請參閱。監視硬體檢測對該地址範圍內的地址進行的儲存,並在檢測到寫入時設定監視器事件未決標誌。監視器事件未決標誌的狀態由 MWAIT 指令使用。其它事件也會設定監視器事件未決標誌。地址範圍必須在寫回快取型記憶體中。只有對監視的地址範圍的寫回記憶體型儲存才會設定監視器事件未決標誌。EAX 的內容是邏輯地址。預設情況下,DS 段用於建立隨後要監視的線性地址。段覆蓋可以同 MONITOR 指令一起使用。ECX 與 EDX 用於同 MONITOR 指令就其它資訊進行通訊。ECX 指定 MONITOR 指令可選的擴充套件。EDX 可能包含提示,且不會更改指令的體系結構行為。對於含“第三代數據流單指令多數據擴充套件指令集”(SSE3) 的英特爾(R) 奔騰(R) 4 處理器,沒有定義擴充套件或提示,ECX 與 EDX 的值應該為零。ECX 與 EDX 的非零值屬於保留值,在 ECX 為保留值時執行 MONITOR 指令,處理器將產生一般保護性錯誤異常。處理器忽略 EDX 中保留位的設定。MONITOR 指令作為載入操作根據其它記憶體事務確定順序。此指令可以在所有的特權級別使用,並且所有的許可權檢查,以及同位元組載入有關的錯誤都會影響它。同載入一樣,MONITOR 指令在頁表中設定 A 位而不是 D 位。MONITOR CPUID 功能標誌(在 EAX=1 的情況下執行 CPUID 時,是 ECX 的位 3)指示處理器是否支援此指令。操作系統或系統 BIOS 可以通過 IA32_MISC_ENABLES MSR 禁用此指令;禁用此指令會清除 CPUID 功能標誌,並導致執行 MONITOR 指令時產生非法操作碼異常。
另請參閱:MONITOR/MWAIT 指導原則。
操作
MONITOR 使用 EAX 的內容(邏輯地址)為監視器硬體設定地址範圍,並復位監視器事件未決標誌。記憶體地址範圍應該在寫回快取型記憶體中。對指定的地址範圍進行儲存時,將設定監視器事件未決標誌。ECX 與 EDX 的內容用於同 MONITOR 指令就其它資訊進行通訊。
異常
無
保護模式異常
#GP(0) - CS、DS、ES、FS 或 GS 段中的記憶體運算元有效地址非法。#GP(0) - ECX 的值不是 0。#SS(0) - SS 段中的地址非法。#PF(錯誤程式碼) - 頁錯誤 (TBD)。#UD - 如果 CPUID 功能標誌 MONITOR 為 0。如果使用 LOCK、REP、REPNE/NZ 及“運算元大小”覆蓋字首。
實地址模式異常
#GP - 如果運算元的任何部分位於 0 到 FFFFH 的有效地址空間之外。
#GP(0) - ECX 的值不是 0。
#UD - 如果 CPUID 功能標誌 MONITOR 為 0。如果使用 LOCK、REP、REPNE/NZ 及“運算元大小”覆蓋字首。
虛 8086 模式異常
#GP - 如果運算元的任何部分位於 0 到 FFFFH 的有效地址空間之外。
#GP(0) - ECX 的值不是 0;
#UD - 如果 CPUID 功能標誌 MONITOR 為 0。
#UD - 如果使用 LOCK、REP、REPNE/NZ 及“運算元大小”覆蓋。#PF(錯誤程式碼) - 頁錯誤。