CPUID (CPU Identification) - mnemotechnická pomůcka assemblerových instrukcí pro x86 procesory , sloužící k získání informací o procesoru. Pomocí něj může program určit typ procesoru a jeho schopnosti (může například určit, která rozšíření instrukční sady jsou podporována).
Instrukce CPUID se poprvé objevila v procesorech i486 . Poté byl obsažen ve všech procesorech, počínaje Intel 486DX / SX / DX2 SL, AMD 486DX4 , Cyrix 6x86 (M1), UMC U5S .
Operační kód : 0F A2.
Protože instrukce CPUID nebyla přítomna v prvních procesorech x86 , měli byste se před použitím ujistit, že ji procesor podporuje. K tomu se pokusí změnit bit 21 (ID) registru EFLAGS . Pokud se bit změní úspěšně, pak je instrukce CPUID k dispozici.
Zdrojový kód ke kontrole:
pushfd ; umístění registru EFLAGS na zásobník pop eax ; extrahování hodnoty EFLAGS v EAX mov ebx , eax ; uložit hodnotu do EBX xor eax , 200 000 h ; změnit bit 21 push eax ; umístění nové hodnoty do zásobníku popfd ; uložit novou hodnotu do EFLAGS pushfd ; umístění EFLAGS na hromádku znovu pop eax ; Hodnota EFLAGS je nyní v EAX xor eax , ebx ; kontrolní bit 21 je no_cpuid ; pokud se nezměnilo, pak CPUID není podporovánoTento příklad používá 32bitové instrukce, takže pokud je procesor v 16bitovém režimu, doporučuje se nejprve zkontrolovat, zda procesor takové instrukce podporuje (to znamená, zda kód běží na procesoru 80386 nebo novějším).
Instrukce CPUID používá obsah registru EAX k určení, jaký druh informací o procesoru má vrátit. Poprvé by měl být volán s hodnotou EAX = 0. Tím se vrátí maximální povolená hodnota parametru instrukce podporovaná tímto procesorem.
Aby bylo možné získat informace o dalších funkcích dostupných v procesorech, musí být před voláním CPUID v registru EAX nastaven bit 31. Například pro určení maximální povolené hodnoty parametru pro další funkce je nutné provést CPUID s hodnotou EAX = 80000000 h .
Když EAX = 0, procesor vrátí identifikátor výrobce procesoru ( Vendor ID ) jako 12 znaků ASCII v registrech EBX, EDX, ECX (v tomto pořadí) . V registru EAX je při volání CPUID vrácena maximální povolená hodnota EAX.
Některé identifikátory výrobce procesoru: [1]
ASCII řetězec | HEX hodnoty EBX:EDX:ECX | Výrobce |
---|---|---|
Originální Intel | 756E6547:49656E69:6C65746E | Intel |
AuthenticAMD | 68747541:69746E65:444D4163 | AMD |
Místo toho Cyrix | 69727943:736E4978:64616574 | Cyrix |
CentaurHauls | 746E6543:48727561:736C7561 | kentaur |
SiS SiS SiS | 20536953:20536953:20536953 | SiS |
NexGenDriven | 4778654E:72446E65:6E657669 | NexGen |
OriginálníTMx86 | 756E6547:54656E69:3638784D | Transmeta |
RiseRiseRise | 65736952:65736952:65736952 | Stoupat |
UMC UMC UMC | 20434D55:20434D55:20434D55 | UMC |
Geode od NSC | 646F6547:79622065:43534E20 | National Semiconductor |
Vortex86 SoC | 74726F56:36387865:436F5320 | DM&P Electronics |