Anonymous user
Model Specific Registers: Difference between revisions
Jump to navigation
Jump to search
m
Minor cleanup
[unchecked revision] | [unchecked revision] |
m (Fixed link) |
m (Minor cleanup) |
||
Line 1:
Processors from the P6 family onwards (including
These '''MSRs''' are accessed using special instructions such as RDMSR (Read MSR), WRMSR (Write MSR), and RDTSC.
== Accessing Model Specific Registers ==
Each MSR
<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;
Line 15 ⟶ 19:
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>
===Other
==See Also==
|