WRMSRNS
非序列化写入模型特定登记册
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
NP 0F 01 C6 | WRMSRNS | ZO | 有效 | 有效 | 以 EDX 写入值: EAX 到 MSR 由 ECX 指定. |
实测开销
正在从 arch-data 加载实测数据...
说明
WRMSRNS是一种行为类似WRMSR的指令,只是它不是默认的序列化指令. 它只能在特权级别0或实地址模式执行;否则,生成一般保护例外#GP(0).
该指令将注册EDX:EAX的内容写入ECX注册中指定的64位模型特定注册(MSR). EDX寄存器的内容被复制到所选的MSR的高序32位,EAX寄存器的内容被复制到MSR的低序32位. RAX,RCX,RDX的高序32位被忽略.
与WRMSR不同,WRMSRNS不定义为序列化指令(参见Intel(R)64和IA-32架构软件开发者手册第3A卷第11章中的"序列化指令"). 这意味着软件不应该依赖它将所有缓冲的书写排入内存,然后才能获取和执行下一个指令. 出于执行原因,一些处理器在撰写某些MSR时可能会序列化,尽管这得不到保证.
和WRMSR一样,WRMSRNS将确保在其之前的所有操作都不使用新的MSR值,并确保WRMSRNS之后的所有操作都使用新的值. 这一规则的一个例外是某些商店相关的性能监视器事件,它们只有在被消耗到内存时才会计数商店. 由于WRMSRNS不是一个序列化指令,如果软件使用WRMSRNS来改变此类性能-监视器事件的控制,那么WRMSRMS之前发布的存储可以根据WRMSRNS建立的控制进行计算. 如果需要,软件可以在WRMSRNS前插入SERIALIZE指令.
那些在通过WRMSR(如MTRRs)写入时导致TLB无效的MSR也会在WRMSRNS写入时导致同样的TLB无效.
为了提高性能,软件可以将WRMSR替换为WRMSRNS. 在WRMSR作为序列化指令的代名词的地方,可以使用不同的序列化指令(如SERIALIZE).
行动
MSR[ECX] := EDX:EAX;受影响的旗帜
None.
异常
保护模式
#GP(0) | 如果当前特权级别不是0. 如果指定的 MSR 地址是保留或未执行的 MSR , 如果指定 MSR 中保留的源数据集位, 如果指定 MSR 的源数据包含非日历地址和指定的 MSR 属于以下之一: IA32 BNDCGS, IA32 DS AREA, IA32 GS BASE BASE, IA32 INTRPT SP SSP, IA32 ANA ATE ATE ATE ATE ATETA, IA32 ATE ATE ATETA, IA32 ATE ATE ATE ATE ATE ATETA, IATE ATE ATE ATETA, IATE A, IATI ATE ATE ATI ATET32-A, IA |
#UD | 如果使用 LOCK 前缀 。 |
实地址模式
#GP(0) | 如果指定的 MSR 地址是保留或未执行的 MSR. 如果指定的 MSR 地址是保留或未执行的. 如果源数据集位是保留在指定的 MSR 的位点. 如果源数据集包含一个非日历地址,且指定的 MSR 地址是以下之一: IA32 BNDCGS, IA32 DS AREA, IA32 FSU, IADDDH1 ADD, IA32 ATE ATE ATE ATE ATE-ATETA, IA32 ATE ATE ATETA、IATE ATE-ATEA、IA、IATE ATE ATETA、IA、IATE ATE A、ITE ATE A、ITET32-A。 |
#UD | 如果使用 LOCK 前缀 。 |
虚拟 8086 模式
#GP(0) | WRMSRNS指令在虚拟 8086 模式中不被识别. |
兼容模式
| 与保护模式中的例外相同. |
64 位模式
#GP(0) | 如果当前特权级别不是0. 如果指定的 MSR 地址是保留或未执行的 MSR , 如果指定 MSR 中保留的源数据集位, 如果指定 MSR 的源数据包含非日历地址和指定的 MSR 属于以下之一: IA32 BNDCGS, IA32 DS AREA, IA32 GS BASE BASE, IA32 INTRPT SP SSP, IA32 ANA ATE ATE ATE ATE ATETA, IA32 ATE ATE ATETA, IA32 ATE ATE ATE ATE ATE ATETA, IATE ATE ATE ATETA, IATE A, IATI ATE ATE ATI ATET32-A, IA |
#UD | 如果使用 LOCK 前缀 。 |