Machine-Specific Register — Änderungen 6004 → 6015

Zeile 2: Zeile 2:
  
 
Die '''Machine-Specific Register'''s bzw. '''Model-Specific Register'''s ('''MSR''') sind Prozessorregister. Sie können im Gegensatz zu anderen Registern nur mit den Instruktionen ''rdmsr'' und ''wrmsr'' ([[x86]] und [[x86-64]]) angesprochen werden. Außerdem sind diese Register spezifisch für eine bestimmte Prozessorfamilie/-generation, d.h. sie müssen von folgenden Prozessoren nicht bzw. nicht genauso implementiert werden.
 
Die '''Machine-Specific Register'''s bzw. '''Model-Specific Register'''s ('''MSR''') sind Prozessorregister. Sie können im Gegensatz zu anderen Registern nur mit den Instruktionen ''rdmsr'' und ''wrmsr'' ([[x86]] und [[x86-64]]) angesprochen werden. Außerdem sind diese Register spezifisch für eine bestimmte Prozessorfamilie/-generation, d.h. sie müssen von folgenden Prozessoren nicht bzw. nicht genauso implementiert werden.
 +
 +
== WRMSR/RDMSR ==
 +
Mit folgendem Code kann man auf die MSRs zugreifen:
 +
<c>uint64_t rdmsr(uint32_t msr)
 +
{
 +
  uint32_t lomsr, himsr;
 +
  uint64_t content;
 +
 +
  __asm__ __volatile__ ("rdmsr":"=a"(lomsr),"=d"(himsr):"c"(msr));
 +
 +
  content = himsr;
 +
  content <<= 32;
 +
  content |= lomsr;
 +
  return content;
 +
}
 +
 +
void wrmsr(uint32_t msr, uint64_t value)
 +
{
 +
  uint32_t lomsr, himsr;
 +
 +
  lomsr = value & 0xFFFFFFFF;
 +
  himsr = value >> 32;
 +
  __asm__ __volatile__ ("wrmsr"::"a"(lomsr),"c"(msr),"d"(himsr));
 +
}</c>
 +
 +
== Auswahl einiger MSRs ==
 +
{| {{Prettytable}}
 +
|-
 +
! Nummer !! Name !! Inhalt
 +
|-
 +
| 0x174 || IA32_SYSENTER_CS || CS für [[sysenter]]
 +
|-
 +
| 0x175 || IA32_SYSENTER_ESP || ESP für sysenter
 +
|-
 +
| 0x176 || IA32_SYSENTER_EIP || EIP für sysenter
 +
|-
 +
| 0xC0000080 || IA32_EFER || Erweiterte Features. Beispiel: Bit 0 - Aktiviert syscall/sysret im 64-Bit-Modus
 +
|}
 +
 +
== Weblinks ==
 +
* http://www.intel.com/Assets/PDF/manual/253669.pdf - "Intel Architectures Software Developer's Manual Volume 3B: System Programming Guide" - Anhang B
  
 
[[Kategorie:Glossar]]
 
[[Kategorie:Glossar]]