[go: up one dir, main page]

Přeskočit na obsah

CPUID

Z Wikipedie, otevřené encyklopedie

CPUID je symbolické pojmenování strojové instrukce na architektuře x86, která umožňuje zjistit informace o procesoru. Toto pojmenování je odvozeno z anglického CPU IDentification. Instrukce se prvně objevila na procesorech Intel 80486. Na novějších procesorech poskytuje tato instrukce stále více informací.

Instrukce se typicky využívá ke zjištění podpory instrukcí MMX nebo SSE, dále ke zjištění výrobce a modelu procesoru, velikosti paměti cache, sériového čísla procesoru. Instrukcí není možné zjistit takt procesoru. Informace vrácené instrukcí se z části liší u procesorů společností Intel a AMD. Dříve platilo, že procesory AMD poskytovaly větší množství informací (např. o velikostech L1 a L2 cache).

Operační kód instrukce je 0FA2h. Obsah registru EAX při volání instrukce určuje, kterou informaci má procesor vrátit. Před použitím instrukce je nutné si ověřit, zda ji procesor podporuje. Program může použít CPUID k určení typu procesoru a zda jsou implementovány funkce jako MMX/SSE.

Ukázka kódu

[editovat | editovat zdroj]

Úsek kódu v MASM zjišťující podporu instrukce CPUID a testující, zda se jedná o procesor AMD porovnáním obsahu registrů EBX, EDX a ECX s řetězcem AuthenticAMD:

 ; zjištění podpory instrukce CPUID
 pushfd
 pop         eax
 mov         ebx, eax
 xor         eax, 00200000h
 push        eax
 popfd
 pushfd
 pop         eax
 cmp         eax, ebx
 jz          l_NoCPUID
 ; instrukce je podporována
 ; ...
 jmp         l_EndCPUID
 l_NoCPUID:
 ; instrukce není podporována
 jmp         l_EndCPUInfo
 l_EndCPUID:
 
 ; zjištění maximální podporované funkce a výrobce procesoru
 mov         eax, 0
 cpuid
 
 ; zjištění, zda se jedná o AMD
 .if ( ebx == 68747541h ) && ( edx == 69746E65h ) && ( ecx == 444D4163h )
 ; jedná se o AMD
 ; ...
 .else
 ; není to AMD
 .endif

Externí odkazy

[editovat | editovat zdroj]