CPUID

Aus Lowlevel
Wechseln zu: Navigation, Suche

Der CPUID-Befehl liefert, sofern er denn von der CPU unterstützt wird, Informationen zu zahlreichen Fähigkeiten der CPU, wie zum Beispiel den Herstellernamen, die Modellnummer oder die Größe des Caches.


Hinweis:

In den nachfolgenden Tabellen werden gelegentlich Tabellenzellen mit blauem oder grünen Hintergrund auftauchen.

Diese deuten einen herstellerspezifischen Eintrag an. Auf anderen Prozessoren sind diese Einträge reserviert!

So sehen die herstellerspezifischen Tabellenzellen aus:

Farbe Bedeutung
Blau Dieser Eintrag gilt ausschließlich für Intel-Prozessoren. Auf AMD-Prozessoren ist dieser Eintrag reserviert!.
Grün Dieser Eintrag gilt ausschließlich für AMD-Prozessoren. Auf Intel-Prozessoren ist dieser Eintrag reserviert!.

Hinweis:

Manchmal folgen in der Beschreibung eines Registers auch zwei Tabellen. Die erste Tabelle ist dann zur schnellen Übersicht gedacht, die zweite Tabelle beschreibt die Funktion der Einträge.


Wie man CPUID benutzt

Bevor man munter versucht, mit dem CPUID-Befehl Informationen auszulesen, sollte man ersteinmal prüfen, ob die CPU den Befehl überhaupt unterstützt. Dazu testet man, ob das ID-Flag gesetzt und gelöscht werden kann.

Aussehen kann das zum Beispiel so: <asm>; Lade Flags nach ECX und EAX pushfd pop ecx mov eax, ecx

Invertiere das ID-Flag

xor eax, 0x200000

Lade EAX nach EFLAGS

push eax popfd

Wenn CPUID unterstützt wird, wird das geänderte ID-Flag übernommen
Ansonsten wird bleibt das alte ID-Flag bestehen
Lade Flags nach EAX

pushfd pop eax

Vergleiche vorher(ECX) und nachher(EAX)
Wenn beide gleich sind, wird CPUID nicht unterstützt

xor eax, ecx je cpuid_unsupported jmp cpu_supported </asm>


Um den CPUID-Befehl auszuführen, verwendet man einfach den Assemblerbefehl CPUID. Die Funktionsnummer der CPUID-Funktion wird dabei im EAX-Register übergeben. Die Rückgabewerte werden in den Registern EAX, EBX, EDX und ECX abgelegt.

Um zum Beispiel den Vendor-ID-String, also den Herstellernamen, auszulesen, ruft man CPUID mit der Funktionsnummer 0x00000000 auf. <asm> mov eax, 0x00000000  ; xor eax, eax bewirkt das selbe und ist schneller cpuid  ; Der Vendor-ID-String befindet sich nun in (in dieser Reihenfolge), EBX, EDX, ECX </asm> Ein AMD-Prozessor hätte jetzt folgende Registerwerte: EBX="Auth", EDX="enti", ECX="cAMD"
Ein Intel-Prozessor hätte jetzt folgende Registerwerte: EBX="Genu", EDX="ineI", ECX="ntel"

Standardfunktionen

Die Standardfunktionsnummern beginnen bei 0. Die größtmögliche Funktionsnummer, die von der jeweiligen CPU unterstützt wird, befindet sich nach dem Aufruf von Funktion 0 im EAX-Register. Die Standardfunktionen sind nicht herstellerspezifisch, sondern sollen für alle CPUs gleich sein.

Funktion 0x0000_0000

CPUID-Funktion Nr. 0x00 gibt die höchste vom Prozessor unterstützte Funktionsnummer im EAX-Register und die Vendor-ID in den Registern EBX, EDX und ECX(in dieser Reihenfolge) zurück.

Achtung!

Der String ist nicht nullterminiert!

EAX - Höchste Standardfunktion

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Höchste unterstützte Standardfunktion

EBX - Vendor

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Bytes 0 - 3 des Vendor-ID-Strings

ECX - Vendor

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Bytes 8 - 11 des Vendor-ID-Strings

EDX - Vendor

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Bytes 4 - 7 des Vendor ID-Strings

Vendor-ID-Strings

Eine Liste der möglichen Vendor-ID-Strings

Vendor-ID-String Hersteller
"AuthenticAMD" AMD
"CentaurHauls" Centaur
"CyrixInstead" Cyrix
"GenuineIntel" Intel
"NexGenDriven" NexGen
"Geode by NSC" National Semiconductor
"RiseRiseRise" Rise
"SiS SiS SiS " SiS
"GenuineTMx86" Transmeta
"UMC UMC UMC " UMC
"VIA VIA VIA " VIA

Funktion 0x0000_0001

EAX - Prozessor

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Erweiterte Familie Erweitertes Modell Typ Familie Modell Stepping

EBX - Sonstiges

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
APIC ID Anzahl logischer Prozessoren CLFLUSH-Size Brand ID

Achtung!

APIC ID ist nur gültig wenn das APIC-Flag gesetzt ist.
Die Anzahl der logischen Prozessoren ist nur bei gesetztem Hyper-Threading-Flag gültig.
CLFLUSH-Size gibt die Größe einer Cache line in 8-Byte-Blöcken an. Das Feld ist nur gültig in Verbindung mit einem gesetzten CFLUSH-Flag.

ECX - Featureflags

Dies sind die Featureflags. Wenn ein Bit gesetzt (=1) ist, dann wird das entsprechende Feature unterstützt.

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RDRAND F16C AVX OSXSAVE XSAVE AESNI POPCNT MOVBE x2APIC SSE4.2 SSE4.1 DCA PDCM xTPR CX16 FMA CNXT-ID SSSE3 TM2 EST VMX SMX DS-CPL MONITOR DTES64 PCLMULQDQ SSE3
Bit Funktion
31
30 Unterstützt den RDRAND Befehl
29 Unterstützt Befehle zum Konvertieren in/von 16-bit Floating-Points
28 Unterstützt AVX
27 Zeigt an, dass das Betriebssystem die Befehle XSETBV und XGETBV aktiviert hat, um auf das XFEATURE_ENABLE_MASK Register (XCR0) zuzugreifen und die erweiterten Zustandsfeatures XSAVE und XRSTOR zu nutzen
26 Unterstützt die erweiterten Zustandsfeatures XSAVE und XRSTOR, die Befehle XSETBV und XGETBV und implementiert das XFEATURE_ENABLE_MASK Register (XCR0)
25 Unterstützt AESNI-Befehle
24
23 Unterstützt den POPCNT Befehl
22 Unterstützt den MOVBE Befehl
21 Unterstützt x2APIC-Features
20 Unterstützt SSE4.2
19 Unterstützt SSE4.1
18 Unterstützt das prefetchen von Daten von einem in den Speicher gemappten Gerät
17
16
15 Unterstützt das Performance Capabilities MSR (IA32_PERF_CAPABILITIES, MSR 0x345)
14 Unterstützt die Möglichkeit, das Senden von Task Priority Messages abzuschalten, indem Bit 23 im IA32_MISC_ENABLE MSR gesetzt wird
13 Unterstützt den CMPXCHG16B Befehl
12 Unterstützt FMA3-Befehle
11
10 Der L1-Cachemodus kann vom Bios entweder auf adaptive oder auf shared gesetzt werden
9 Unterstützt SSSE3
8 Implementiert den "Thermal Monitor 2 thermal control circuit" (TCC)
7 Unterstützt Enhanced Intel SpeedStep und implementiert das IA32_PERF_STS-Register und das IA32_PERF_CTL-Register
6 Unterstützt Intel Trusted Execution
5 Unterstützt VMX
4 Unterstützt die Erweiterungen des Debug-Speicher-Features um durch CPL qualifizierten Branch-Message-Speicher zu nutzen
3 Unterstützt den MONITOR-Befehl und den MWAIT-Befehl
2 Kann den Verlauf der 64-Bit-Branch in/von Adressen in einen Buffer schreiben
1 Unterstützt PCLMULQDQ-Befehl
0 Unterstützt SSE3

EDX - Featureflags

Dies sind die Featureflags. Wenn ein Bit gesetzt (=1) ist, dann wird das entsprechende Feature unterstützt.

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PBE IA64 TM HTT SS SSE2 SSE FXSR MMX ACPI DS CLFLSH PSN PSE-36 PAT CMOV MCA PGE MTRR SEP APIC CX8 MCE PAE MSR TSC PSE DE VME FPU
Bit Funktion
31 Unterstützt die Benutzung des FERR#-Pins und des PBE#-Pins um dem Prozessor im Stop Clock State (STPCLK#) zu signalisieren, dass er einen wartenden Interrupt bearbeiten und dann zur normalen Ausführung zurückkehren soll.
30 Gehört zur Intel Itanium Familie und läuft gerade im IA32-Emulationsmodus
29 Implementiert den "Thermal Monitor aumatic thermal control circuitry" (TCC)
28 Kann mehr als einen logischen Prozessor verwalten
27 Unterstützt die Verwaltung von miteinander in Konflikt stehenden Speichertypen
26 Unterstützt SSE2
25 Unterstütz SSE
24 Unterstützt die FXSAVE und FXRSTOR Befehle, mit denen die Floatingpointregister schnell gesichert werden können
23 Unterstützt MMX
22 Unterstützt Überwachung der Prozessortemperatur und Änderung des Prozessortaktes
21 Kann Debuginformationen in im Hauptspeicher vorhandene Buffer schreiben
20
19 Unterstützt den CLFLUSH-Befehl
18 Besitzt eine 96-Bit Prozessor-Seriennummer (Nur verfügbar auf Prozessoren, die neuer als Pentium 4 sind)
17 Unterstützt 36-Bit Page Size Extensions (4-MiB Pages)
16 Unterstützt das PAT-Bit
15 Unterstützt den CMOVcc Befehl, mit dem bedingte Verschiebungen vorgenommen werden können
14 Unterstützt die Machine-Check-Architektur
13 Unterstützt das Page-Global-Bit
12 Unterstützt MTRR-Register (Besonders das MTRR_CAP-Register)
11 Unterstützt schnelle Syscalls durch die Befehle SYSENTER und SYSEXIT
10
9 Besitzt einen lokalen APIC
8 Unterstützt den CMPXCHG8B Befehl
7 Unterstützt Machine-Check-Exceptions
6 Unterstützt physische Adressen, die größer als 32-Bit sind
5 Implementiert Modellspezifische Register über die Befehle RDMSR und WRMSR
4 Unterstützt den RDTSC Befehl und CR4.TSD-Bit
3 Unterstützt 4-MiB Pages
2 Unterstützt I/O-Breakpoints, das CR4.DE-Bit und die DR4- und DR5-Register
1 Unterstützt Erweiterungen des Virtual 8086 Mode (z. B. Virtual Interrupts).
0 Besitzt eine FPU, die den x87-Befehlssatz implementiert

Funktion 0x0000_0002

Der nachfolgende Text ist Intel-spezifisch, das heißt, er trifft ausschließlich auf Intel-Prozessoren zu!

Gibt verschiedene Informationen über den Cache und den TLB aus.

Die ersten 8 Bit von EAX (also AL) enthalten die Anzahl Ausführungen, die benötigt werden um alle Cache-Deskriptoren des Prozessors auszulesen. Die restlichen Bits von EAX, EBX, ECX und EDX enthalten die Cache-Deskriptoren.

Hinweis:

Hier fehlt eine Erklärung zu den Cache-Deskriptoren.

Funktion 0x0000_0003

Der nachfolgende Text ist Intel-spezifisch, das heißt, er trifft ausschließlich auf Intel-Prozessoren zu!

Gibt Bits 63 - 0 der Prozessorsignatur zurück. Um die gesamte 96-Bit Prozessorsignatur zu erhalten muss man noch EAX von Funktion 0x0000_0001 hinzunehmen.


Achtung!

Funktioniert nur bei Prozessoren, die das entsprechende Featureflag (Bit 18) gesetzt haben.

EAX - Reserviert

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
 

EBX - Reserviert

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
 

ECX - Signatur

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Bits 31 - 0 der Prozessorsignatur

EDX -Signatur

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Bits 63 - 32 der Prozessorsignatur

Erweiterte Funktionen

Es gibt Funktionen, die herstellerspezifisch sind, d.h. sie gelten nur nur für Intel- bzw. nur für AMD-Prozessoren. Solche Befehle sollte man nicht ausführen, wenn man nicht weiß, von welchem Hersteller die CPU ist! Zum Beispiel sollten CPUID-Befehle, die nur für Intel-CPUs gelten, nicht auf einer AMD-CPU ausgeführt werden. Diese Funktionen beginnen bei 0x80000000.

Erweiterte Funktionen von Intel:

Funktion 0x8000_0000

EAX

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Höchste unterstütze Zusatzfunktion

EBX - "Auth"

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
h t u A

ECX - "cAMD"

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
D M A c

EDX - "enti"

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
i t n e

Funktion 0x8000_0001

EAX - Familie

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Erweiterte Familie Erweitertes Modell Familie Modell Stepping

EBX - Brand ID

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PCKTYP Brand ID

PCKTYP: Package Type
Brand ID: Wird zusammen mit EBX[7:0] von Funktion 0x0000_0001 vom BIOS genutzt, um den Prozessorstring zu bestimmen.

Achtung!

PCKTYP ist nur gültig, wenn EAX[7:0] von Funktion 0x0000_0001 mindestens 0x10 ist. Wenn EAX[7:0] von Funktion 0x0000_0001 niedriger ist als 0x10 ist dieses Feld reserviert!

ECX - Erweiterte Featureflags

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PerfTSC DataBreakpointExt PerfCtrExtNB PerfCtrExtCore TopologyExt TBM FMA4 LWP WDT SKINIT XOP IBS OSVW PREFETCHW MisAlignSse SSE4A ABM AltMovCr8 ExtApicSpace SVM CmpLegay LahfSahf
Bit Funktion
28-31
27 Performance-Time-Stamp-Counter
26 Datenzugriffs-Breakpoints
25
24 NB-Performance-Counter-Erweiterung
23 Prozessor-Performance-Counter-Erweiterung
22 Topologie-Erweiterung
21 Unterstützt Befehle zur Manipulation voranstehender Bits
17-20
16 Unterstützt FMA4-Befehle
15 "Lightweight profiling"-Unterstützung
14
13 "Watchdog Timer"-Unterstützung
12 Unterstützt SKINIT- und STGI-Befehle
11 Unterstützt erweiterte Operationen
10 Unterstützt instruktionsbasiertes Sampling
9 Unterstützt Betriebssystemsichtbare Umgehungen
8 PREFETCH- und PREFETCHW-Befehle werden unterstützt
7 Falschausgerichteter SSE-Modus
6 Unterstützt SSE4A-Befehle
5 Unterstützt LZCNT- und POPCNT-Befehle
4 LOCK MOV CR0 bedeutet MOV CR8
3 Erweiterter APIC-Adressraum (ab Offset 400h)
2 Sichere virtuelle Maschine
1 "Core multi-processing legacy modus"
0 Unterstützt LAHF- und SAHF-Befehle im 64-Bit-Modus.

EDX - Erweiterte Featureflags

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
3DNow 3DNowExt LM RDTSCP Page1GB FFXSR FXSR MMX MmxExt NX PSE36 PAT CMOV MCA PGE MTRR SYSCALL APIC CMPXCHG8B MCE PAE MSR TSC PSE DE VME FPU
Bit Funktion
31 Unterstützt 3DNow!-Befehle
30 Unterstützt erweiterte 3DNow!-Befehle
29 Long-Modus
28
27 Unterstützt RDTSCP-Befehl
26 Unterstützt 1GB große Seiten
25 Unterstützt optimierte FXSAVE- und FXRSTOR-Befehle
23-24 Siehe Funktion 0x0000_0001
22 AMD-Erweiterungen zu MMX
21
20 NX-Bit-Seitenschutz
18-19
12-17 Siehe Funktion 0x0000_0001
11 Unterstützt SYSCALL- und SYSRET-Befehle
10
0-9 Siehe Funktion 0x0000_0001

Funktion 0x8000_0002

Gibt den Prozessornamen aus.

EAX - Prozessorname

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Buchstaben 0 - 3 des Prozessornamens

EBX - Prozessorname

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Buchstaben 4 - 7 des Prozessornamens

ECX - Prozessorname

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Buchstaben 8 - 11 des Prozessornamens

EDX - Prozessorname

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Buchstaben 12 - 15 des Prozessornamens


Funktion 0x8000_0003

Gibt den Prozessornamen aus.

EAX - Prozessorname

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Buchstaben 16 - 19 des Prozessornamens

EBX - Prozessorname

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Buchstaben 20 - 23 des Prozessornamens

ECX - Prozessorname

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Buchstaben 24 - 27 des Prozessornamens

EDX - Prozessorname

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Buchstaben 28 - 31 des Prozessornamens

Funktion 0x8000_0004

Gibt den Prozessornamen aus.

EAX - Prozessorname

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Buchstaben 32 - 35 des Prozessornamens

EBX - Prozessorname

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Buchstaben 36 - 39 des Prozessornamens

ECX - Prozessorname

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Buchstaben 40 - 43 des Prozessornamens

EDX - Prozessorname

Bit
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Buchstaben 44 - 47 des Prozessornamens


Siehe auch