Asembler

Rozpoznawanie producenta procesora

Patryk Kobierski

W swoim <a href="artykuly/migda_wojciech/cpumanid/index.htm">artykule</a> z PCkuriera 13/97, Wojciech Migda zapomnia o istnieniu procesorw klasy Pentium firm innych ni Intel. Na domiar zego, wikszo programw testujcych poprzestaje na rozpoznaniu "x" w 80x86 nie interesujc si producentem koci.

Poniszy fragment kodu powinien znajdowa si po rozpoznaniu, e procesor obsuguje rozkaz CPUID. Nie jest to jednak rwnowane stwierdzeniu, e jest on co najmniej klasy P5, poniewa wg dokumentacji instrukcj t znaj procesory ju od i486SX w gr.

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

Wykorzystane tu zostao dziaanie rozkazu CPUID gdy rejestr EAX jest wyzerowany. Zwraca on wtedy w rejestrach EBX, EDX i ECX kolejne czci 12-bajtowego napisu w kodach ASCII. Przykadowo, dla procesorw firmy Intel rejestry te bd zawiera nastpujce dane:

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

co po wpisaniu do tablicy "VendorID" da napis "GenuineIntel". Po przetestowaniu programu na rnych komputerach, mona pokusi si o stworzenie tabelki:

      VendorID
                       Firma
                            Przykady
      "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 bdnie rozpoznawane jako 486). Mona to jednak zmieni za pomoc specjalnych programw do ustawiania ich wewntrznych rejestrw (przykadowo, za rozkaz CPUID odpowiada bit 7 rejestru CCR4).
