关于MSR寄存器地址的问题
、图
--来自于inel手册
在上图,我们可以看到,用红线圈着的register address
起先我认为是那个register address影射到物理内存的地址,但那明显是错的!!
-----------------------------------------------------------------------------------------------------------------------
查了一下,在AMD和intel手册中都没有看到对msr地址的解释,倒是有rdmsr和wrmsr指令与msr有关,查了一下用法
]RDMSR 0F 32 不影响标志位 把ECX指定的模型专用寄存器内容送EDX:EAX RDMSR
WRMSR 0F 30 不影响标志位 把EDX:EAX的内容写入ECX指定的模型专用寄存器 WRMSR
再看,下面的一段代码,摘自---pediy
所以我想,那个msr的地址,是来对ecx的配置!里面的值对应着相应的msr。
以上只是本人的猜测,如各位知道的话,请不啬赐教
msr.jpg (52.63 KB, 下载次数: 25)
--来自于inel手册
在上图,我们可以看到,用红线圈着的register address
起先我认为是那个register address影射到物理内存的地址,但那明显是错的!!
-----------------------------------------------------------------------------------------------------------------------
查了一下,在AMD和intel手册中都没有看到对msr地址的解释,倒是有rdmsr和wrmsr指令与msr有关,查了一下用法
]RDMSR 0F 32 不影响标志位 把ECX指定的模型专用寄存器内容送EDX:EAX RDMSR
WRMSR 0F 30 不影响标志位 把EDX:EAX的内容写入ECX指定的模型专用寄存器 WRMSR
再看,下面的一段代码,摘自---pediy
- //coded by greatcsk
- //开启BTS
- mov ecx,MSR_DEBUGCTL
- mov eax,0x1c
- WRMSR
- //关闭BTS
- mov ecx,MSR_DEBUGCTL
- xor eax,eax
- WRMSR
所以我想,那个msr的地址,是来对ecx的配置!里面的值对应着相应的msr。
以上只是本人的猜测,如各位知道的话,请不啬赐教
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
AMD / Intel 的 manual 确实没有对 MSR 寄存器进行解释,
Intel 的文档甚至没有一节是对 MSR 进行过描述。
一般的应用程序不会用到,连 OS 也甚少使用 MSR,只有一些特殊应用才使用 MSR,如:一些超频软件。
大量应用 MSR 的只有在 BIOS 场合,BIOS 是需要和 MSR 打交道的。
而且 MSR 与 processor 太相关了。
---------------------------------------------------------
我估计,因此并没进行描述的必要。
----------------------------------------------------------------------------------------------
对于 MSR 寄存器可以理解为 MSR 寄存器堆或 MSR 寄存器组
MSR 寄存器组中的 每个 64 位 MSR 寄存器有一个 ID 值(编号)
那么,读/写 MSR 寄存器 就需要提供它的 ID(编号)
ID 值放在 ecx 寄存器进行索引。
edx:eax 就存放着:读出来以及要写进去的 64 位值
看来,也只能先那么理解了
学习下
寄存器编址,与寄存器在内存的映射,是两回事吧?
可外部使用的寄存器,其编址是供指令编码用的。譬如,有8个寄存器,依次编号为000-111,则在指令里就可以安排3位的寄存器域。
内部使用的寄存器,其编址是供微指令编码用的,道理类似。
有些CPU(好像MCS-51也是),寄存器可以映射到内存,它就有一个内存地址。
我觉得也是这样的,试了一下,没有出现GP错误,应该是正确的。Intel文档中对此语焉不详。