Patryk Kobierski

Rozpoznawanie producenta procesora

[CPUMANID.ZIP]

Asembler


W swoim artykule z PCkuriera 13/97, Wojciech Migda zapomniał o istnieniu procesorów klasy Pentium firm innych niż Intel. Na domiar złego, większość programów testujących poprzestaje na rozpoznaniu "x" w 80x86 nie interesując się producentem kości.

Poniższy fragment kodu powinien znajdować się po rozpoznaniu, że procesor obsługuje rozkaz CPUID. Nie jest to jednak równoważne stwierdzeniu, że jest on co najmniej klasy P5, ponieważ wg dokumentacji instrukcję tę znają procesory już od i486SX w górę.

     xor eax,eax
     cpuid
     mov dword ptr VendorID,ebx
     mov dword ptr VendorID+4,edx
     mov dword ptr VendorID+8,ecx

Wykorzystane tu zostało działanie rozkazu CPUID gdy rejestr EAX jest wyzerowany. Zwraca on wtedy w rejestrach EBX, EDX i ECX kolejne części 12-bajtowego napisu w kodach ASCII. Przykładowo, dla procesorów firmy Intel rejestry te będą zawierać następujące dane:

     EBX - 756E6547h - "uneG"
     EDX - 49656E69h - "Ieni"
     ECX - 6C65746Eh - "letn"

co po wpisaniu do tablicy "VendorID" da napis "GenuineIntel". Po przetestowaniu programu na różnych komputerach, można pokusić się o stworzenie tabelki:

VendorID Firma Przykłady
"GenuineIntel" Intel i486DX4, i486SX2, P5
"CyrixInstead" Cyrix M1, M2
"AuthenticAMD" AMD K5, K6
"UMC UMC UMC " UMC U5S, U5SD

Na koniec uwaga: procesory M1 (6x86) firmy Cyrix standardowo nie wykonują rozkazu CPUID (przez co są błędnie rozpoznawane jako 486). Można to jednak zmienić za pomocą specjalnych programów do ustawiania ich wewnętrznych rejestrów (przykładowo, za rozkaz CPUID odpowiada bit 7 rejestru CCR4).

Stronę opracował Michał Szulowski