CPUID
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é číslo 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
Ú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