CPUID

Aus Lowlevel
Version vom 8. Dezember 2008, 19:29 Uhr von Be59 (Diskussion | Beiträge) (Intel CPUID.( Ich habe die inteldoku genohmen, ist einfach zu lesen. Kann jemand probieren, ob ich es richtig gemacht habe, habe nämlich AMD))
Wechseln zu:Navigation,

Der CPUID Befehl wird benutzt, um Informationen über die Fähigkeiten eines Prozessors zu erhalten. (Wie zum Beispiel den Herstellernamen, Modelnummer, die Größe des Cache ...)

Wie man CPUID benutzt

Um den CPUID-Befehl auszuführen, schreibt man einfach den ASM-Befehl CPUID in den Code. Die Parameter werden dabei im Register EAX angegeben. Um z.B. den Vendor-ID-String (Herstellername) zu bekommen, ruft man CPUID mit dem Parameter 0x0 in EAX auf.

mov eax, 0x0
cpuid

Natürlich gibt der CPUID-Befehl auch ein Ergebnis zurück. In diesem Fall gibt er einen String zurück, dessen ASCII-Werte in EBX, EDX und ECX liegen. Wenn man den Inhalt dieser drei Register (in dieser Reihenfolge!) hintereinander in den Speicher schreibt, erhält man einen String, die Vendor-ID. Jeder Hersteller hat eigene Vendor-ID. Achtung: Der String ist nicht nullterminiert !

Vendor-ID der einzelnen Hersteller

  • AMD: "AuthenticAMD"
  • Intel: "GenuineIntel"
  • VIA: "CentaurHauls"
  • Transmeta: "GenuineTMx86"
  • Cyrix: "CyrixInstead"
  • Centaur: "CentaurHauls"
  • NexGen: "NexGenDriven"
  • UMC: "UMC UMC UMC "
  • SiS: "SiS SiS SiS "
  • NSC: "Geode by NSC"
  • Rise: "RiseRiseRise"

Spezifische CPUID-Befehle

Intelbefehle

EAX-Inhalt ist eins

Wenn im EAX statt Null eine Eins vorkommt, dann wird bei Intelprozessoren in EAX folgendes ausgegeben:

EAX
Byte Funktion
31 - 28 Reserviert
27 - 20 Erweiterte Familie
19 - 16 Erweitertes Modell
15 - 14 Reserviert
13 - 12 Prozessortyp
11 - 8 Familienkennzeichen / Familiencode
7 - 4 Model
4 - 0 Stepping
EBX
Byte Funktion
31 - 24 APIC ID (Reserviert)
23 - 16 Zähler(?) (Reserviert)
15 - 8 Stücke/Einheiten(?) (Reserviert)
7 - 0 Brand ID (Reserviert)
ECX

Hier soll ein Bytearray sein, aber es wird nicht empfohlen, was daraus zu lesen. Dieses Feld ist ein kommendes Feature. Zudem ist es reserviert.

EDX

Featuresflags, wird noch erweitert.

Hinweise

Es gibt Befehle, die nur für Intel bzw. AMD Prozessoren verfügbar sind. Solche Befehle sollte man nicht ausführen, wenn man nicht weiß von welchem Hersteller die CPU ist! Z.B. sollten CPUID-Befehle, die nur für Intel-CPU´s gelten, nicht auf einer AMD-CPU ausgeführt werden.

Siehe auch

Englischer Artikel über den CPUID-Befehl

Englische Doku von CPUID; mit AMD/INTEL und anderen Prozessoren

Intels CPUID-Spezifikation

AMDs CPUID-Spezifikation