1.介绍
MSR是CPU的一组64位寄存器,每个MSR都有它的地址值(如下图所示),可以分别通过RDMSR 和WRMSR 两条指令进行读和写的操作。
 
 如图中为8个P-state寄存器,地址分别为0xC001 0064 ~ 0xC001 006B,每个寄存器64bit。
2.读取MSR
MSR的读取,使用rdmsr指令:
- 先向ECX寄存器,写入欲访问MSR地址;
- 再执行rdmsr指令;
- 寄存器数据(64位)被读取到EDX和EAX寄存器。
高32位放在EDX寄存器,低32位放在EAX寄存器。
mov ecx,176H   // IA32_SYSENTER_EIP 寄存器的地址
rdmsr           // 读MSR内容到 EDX:EAX 寄存器
3.写入MSR
MSR的写入,使用wrmsr指令:
- 先向ECX寄存器,写入欲访问MSR地址;
- 再向EDX和EAX寄存器,写入数据(64位);
- 最后执行wrmsr指令。
高32位放在EDX寄存器,低32位放在EAX寄存器。
mov rcx,176H
mov rdx,KERNEL_SERVICE_ENTRY
mov rax,rdx
shr rdx,32        ;拆分到EDX:EAX 放入 64 位的值
wrmsr






![[LeetCode 1237]找出给定方程的正整数解](https://img-blog.csdnimg.cn/b8043f26031e4bb8b619914066bfb75a.png)




![[软件工程导论(第六版)]第1章 软件工程学概述(复习笔记)](https://img-blog.csdnimg.cn/d7ebf6aee30a420683fc221b2feb252b.png)







