FAQ der Newsgroup de.comp.lang.assembler (d.c.l.a.)

Wie finde ich den Prozessortyp heraus?

Ab den jüngeren 80486 Prozessoren bzw. dem Pentium-Prozessor kann man sich der Anweisung cpuid (dw 0A20Fh) bedienen. Sie liefert je nach Wert in eax folgendes zurück:

  • eax = 0
    Zeichenkette, die den Prozessorhersteller identifiziert in ebx:edx:ecx. Beispiele sind:
    Intel: GenuineIntel
    AMD: AuthenticAMD

  • eax = 1
    Bits 8..11 von eax: Familie des Prozessors (Bsp.: 5 für Pentium, 6 für Pentium Pro, II, III)
    Bits 4..7 von eax: Modell - gibt bei einem Pentium III beispielsweise an, ob es sich um einen Katmai oder Coppermine handelt.
    Bits 0..3 von eax: Stepping. Dieser Wert ist weniger interessant.

    In edx geben die einzelnen Bits an, ob ein Prozessor gewisse Funktionen wie beispielsweise MMX, rdtsc, SSE, usw. unterstützt.

  • eax = 2
    Liefert in eax, ebx, ecx und edx Informationen über die Caches und die TLBs usw.

Für mehr Informationen zu cpuid: http://www.sandpile.org/ia32/cpuid.htm

Für ältere Prozessoren (80486 und älter) gibt es keine solche Anweisung. Ob ein Prozessor diese Anweisung unterstützt kann festgestellt werden, indem versucht wird das Bit 21 des EFlags-Registers zu löschen und zu setzen. Ist das der Fall, wird die Anweisung unterstützt, ansonsten nicht.
Im Internet gibt es weitere Informationen darüber wie man hier den Prozessortyp feststellt.

Text der ursprünglichen FAQ von de.comp.lang.assembler.x86 Juli 2005