操作碼 |
指令 |
說明 |
0F 30 |
WRMSR |
將 EDX:EAX 中的值寫入 ECX 指定的 MSR |
將暫存器 EDX:EAX 的內容寫入 ECX 暫存器指定的 64 位型號專用暫存器 (MSR)。高 32 位從 EDX 複製,低 32 位從 EAX 複製。MSR 中未定義或保留的位總是設定為上次讀取時的值。
此指令必須在特權級別 0 或實地址模式中執行;否則會產生一般保護性異常 #GP(0)。在 ECX 中指定保留的或未實現的 MSR 地址,也會導致一般保護性異常。
使用 WRMSR 指令寫入 MTRR 時,TLB(包括全域性專案)將失效(請參閱“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 3 卷第 3 章中的“轉譯查詢緩衝區 (TLB)”)。(MTRR 是奔騰(R) Pro 處理器上取決於具體實現的功能)。
MSR 控制用於測試、執行跟蹤、效能監視及機器檢查錯誤等功能。在“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 3 卷附錄 B“型號專用暫存器 (MSR)”中,列出使用此指令可以寫入的所有 MSR 及其地址。
WRMSR 指令是序列化指令(請參閱“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 3 卷第 7 章中的“序列化指令”)。
使用此指令之前,應該使用 CPUID 指令確定是否支援 MSR (EDX[5]=1)。
MSR 與使用 WRMSR 指令讀取 MSR 的功能在“英特爾(R) 體系結構”的奔騰(R) 處理器中引入。在早於奔騰處理器的“英特爾(R) 體系結構”處理器上執行此指令時,會導致操作碼無效異常 #UD。
MSR[ECX] EDX:EAX;
無。
#GP(0) - 如果目前特權級別不是 0。如果 ECX 中的值指定保留的或未實現的 MSR 地址。
#GP - 如果 ECX 中的值指定保留的或未實現的 MSR 地址。
#GP(0) - WRMSR 指令在虛 8086 模式中無法識別。