Ceea ce spun mai jos se aplica in cazul in care folosesti linux.
In linux e si mai simplu sa accesezi informatia respectiva.
Asta pentru ca kernelul contine deja un device care poate fi folosit sa accesezi MSR-urile.
Pentru asta, accesezi (din aplicatia ta userspace) device-ul montat in /dev/cpu/%d/msr (unde %d e minor numer).
Codul de interes, din kernel, pentru respectivul device este in linux/arch/x86/kernel/msr.c:
http://lxr.linux.no/linux+v2.6.28.3/arch/x86/kernel/msr.cFunctia care citeste un registru MSR este in linux/arch/x86/include/asm/msr.h (native_read_msr_safe(), inline assembly):
http://lxr.linux.no/linux+v2.6.28.3/arch/x86/include/asm/msr.hTu, din aplicatia ta, deschizi si citesti /dev/cpu/%d/msr ca si cand ar fi un fisier normal (folosind functiile normale de acces la fisiere: read, write, lseek, etc). Trebuie doar sa te prinzi cum e structurata informatia acolo. Si te prinzi simplu citind sursele de mai sus. Sau cauti pe net surse care acceseaza respectivul device, sunt destule.
Desigur, in orice moment poti sa iti scrii un modul de kernel sa folosesti chiar tu instructiunea RDMSR, si sa iti pasezi informatia in userspace. Dar doar daca vrei. Ai deja suport in kernel, poti sa il folosesti.
Tot nu inteleg ce adresa cauti.