RDMSR/WRMSR 指令
RDMSR/WRMSR 指令
MSR 本义是 Model Specific Register, 目前 MSR 寄存器一般都是 64 位大小, 但是有些 MSR 的某些位保留不用。一般每个 MSR 寄存器都有一个整数 ID 用做标识,有时也把 MSR 寄存器的 ID 称为该寄存器的地址。
RDMSR 指令
RDMSR 指令用于读取 MSR 寄存器,首先应该将要读的 MSR 的 ID 放入 ECX 寄存器,然后执行 RDMSR 指令,如果操作成功,返回值会被放入 EDX:EAX 中(在支持intel64架构的处理器中 RCX 的高32位忽略)。MSR的高32位内容存放在 EDX 寄存器中,MSR的低32位内容存放在 EAX 寄存器中(在支持intel64架构的处理器中RDX和RAX的高32位忽略)。如果MSR 中没有64位(有些位没有实现),则EDX:EAX中没有实现的位置则未定义。
该指令必须在 0 层权限或者实地址模式下执行;否则会触发#GP(0)异常。在ECX中指定一个保留的或者未实现的MSR地址也会引发异常。
MSR控制着可测试性、执行跟踪、性能检测和机器错误检查等功能。附录B列出所有能读写的MSR以及它们的地址。注意不同的处理器族有自己不同的MSR.
我们可以在使用本指令前用CPUID指令来检查是否支持MSR。(CPUID.01H:EDX[5]=1).
WRMSR 指令
WRMSR 指令用来写 MSR 寄存器,也是先把要写的 MSR 的 ID 放入 ECX 寄存器,并把要写入的数据放入 EDX:EAX 寄存器中,然后执行 WRMSR指令。

近期评论