1,064 views
首页 > 内核编程 > RDMSR/WRMSR 指令

RDMSR/WRMSR 指令

2010年5月25日

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指令。

内核编程

  1. 目前还没有任何评论.
  1. 目前还没有任何 trackbacks 和 pingbacks.