查看“Model Specific Registers”的源代码
←
Model Specific Registers
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
P6系列以后的处理器(包括PentiumPro、Pentium II、III、4和Intel Core)有一组寄存器,允许配置与操作系统相关的内容,如内存类型范围、syscenter/sysexit、本地APIC等。 可以使用RDMSR(读MSR)、WRMSR(写MSR)和RDTSC等特殊指令访问这些'''MSRs'''。 == 访问特定模型寄存器(Model Specific Registers) == RDMSR和WRMSR指令组访问的每个MSR都由一个32位整数标识。 MSR是64位宽的。 你的处理器上是否存在msr由 [[CPUID]] 指示。01h:EDX [位5]。 <source lang="c"> const uint32_t CPUID_FLAG_MSR = 1 << 5; bool cpuHasMSR() { uint32_t a, d; // eax, edx cpuid(1, &a, &d); return d & CPUID_FLAG_MSR; } void cpuGetMSR(uint32_t msr, uint32_t *lo, uint32_t *hi) { asm volatile("rdmsr" : "=a"(*lo), "=d"(*hi) : "c"(msr)); } void cpuSetMSR(uint32_t msr, uint32_t lo, uint32_t hi) { asm volatile("wrmsr" : : "a"(lo), "d"(hi), "c"(msr)); } </source> ===访问MSR的其他方式=== <code>rdmsr</code> and <code>wrmsr</code> 是特权指令. 但是,有一些MSR可以使用特殊指令从非特权代码访问。 例如, <code>rdtsc</code> 指令是读取时间戳计数器的非特权指令,它实际上位于MSR(索引10h)中。 ==额外x86_64寄存器== AMD添加了 [[CPU_Registers_x86-64#IA32_EFER|EFER]]寄存器,用于控制特定的长模式功能。 此后,它被英特尔采用。 {| |Bit 0 |System Call Extensions (SCE) |- |Bits 1-7 |Reserved |- |Bit 8 |Long Mode Enable (LME) |- |Bit 9 |Reserved |- |Bit 10 |Long Mode Active (LMA) |- |Bit 11 |No-Execute Enable (NXE) |- |Bit 12 |Secure Virtual Machine Enable (SVME) |- |Bit 13 |Long Mode Segment Limit Enable (LMSLE) |- |Bit 14 |fast FXSAVE/FXSTOR (FFXSR) |- |Bit 15 |Translation Cache Extension (TCE) |- |Bits 16-63 |Reserved |} 到目前为止,最有趣的是SCE位,因为它启用<code>syscall</code>指令。 == 另见 == ===文章=== *[[CPUID]] *[[CPU Registers x86]] *[[CPU Registers x86-64]] ===外部链接=== *http://sandpile.org/x86/msr.htm for documented MSRs *https://github.com/xen-project/xen/blob/master/xen/include/asm-x86/msr-index.h for MSRs relevant to Xen emulation (including Intel's 0x35) [[Category:x86 CPU]] [[de:Model-Specific_Register]]
返回至“
Model Specific Registers
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
变体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息