CPUID (CPU Identification) - mnemonic de instrucțiuni de asamblare pentru procesoare x86 , utilizat pentru a obține informații despre procesor. Folosind-o, programul poate determina tipul de procesor și capacitățile acestuia (de exemplu, poate determina ce extensii de set de instrucțiuni sunt acceptate).
Instrucțiunea CPUID a apărut pentru prima dată în procesoarele i486 . Apoi a fost inclus în toate procesoarele, începând cu Intel 486DX / SX / DX2 SL, AMD 486DX4 , Cyrix 6x86 (M1), UMC U5S .
Cod de operare : 0F A2.
Deoarece instrucțiunea CPUID nu a fost prezentă în primele procesoare x86 , ar trebui să vă asigurați că procesorul o acceptă înainte de a o utiliza. Pentru a face acest lucru, se încearcă modificarea bitului 21 (ID) al registrului EFLAGS . Dacă bitul se schimbă cu succes, atunci instrucțiunea CPUID este disponibilă.
Cod sursă de verificat:
pushfd ; plasarea registrului EFLAGS pe stiva pop eax ; extragerea valorii EFLAGS în EAX mov ebx , eax ; valoarea stocării în EBX xor eax , 200000 h ; schimba bit 21 push eax ; plasarea unei noi valori pe stiva popfd ; stocați o nouă valoare în EFLAGS pushfd ; plasarea EFLAGS pe stivă din nou pop eax ; Valoarea EFLAGS este acum în EAX xor eax , ebx ; verificați bitul 21 je no_cpuid ; dacă nu s-a schimbat, atunci CPUID nu este acceptatAcest exemplu folosește instrucțiuni pe 32 de biți, așa că dacă procesorul este în modul pe 16 biți, este recomandat să verificați mai întâi dacă procesorul acceptă astfel de instrucțiuni (adică dacă codul rulează pe un procesor 80386 sau mai recent).
Instrucțiunea CPUID utilizează conținutul registrului EAX pentru a determina ce fel de informații despre procesor trebuie returnate. Prima dată ar trebui să fie apelat cu valoarea EAX = 0. Aceasta va returna valoarea maximă admisă a parametrului de instrucțiune suportat de acest procesor.
Pentru a obține informații despre funcțiile suplimentare disponibile în procesoare, bitul 31 trebuie setat în registrul EAX înainte de a apela CPUID.De exemplu, pentru a determina valoarea maximă permisă a parametrului pentru funcții suplimentare, este necesar să se execute CPUID cu valoarea EAX = 80000000 h .
Când EAX = 0, procesorul returnează identificatorul producătorului procesorului ( Vendor ID ) ca 12 caractere ASCII în registrele EBX, EDX, ECX (în această ordine) . În registrul EAX, valoarea maximă permisă EAX este returnată atunci când este apelat CPUID.
Unii identificatori ale producătorului procesorului: [1]
șir ASCII | Valori HEX EBX:EDX:ECX | Producător |
---|---|---|
GenuineIntel | 756E6547:49656E69:6C65746E | Intel |
AMD autentic | 68747541:69746E65:444D4163 | AMD |
CyrixÎn schimb | 69727943:736E4978:64616574 | Cyrix |
CentaurHauls | 746E6543:48727561:736C7561 | centaur |
SiS SiS SiS | 20536953:20536953:20536953 | SiS |
NexGenDriven | 4778654E:72446E65:6E657669 | NexGen |
GenuineTMx86 | 756E6547:54656E69:3638784D | Transmeta |
RiseRiseRise | 65736952:65736952:65736952 | Creştere |
UMC UMC UMC | 20434D55:20434D55:20434D55 | UMC |
Geoda de NSC | 646F6547:79622065:43534E20 | National Semiconductor |
Vortex86 SoC | 74726F56:36387865:436F5320 | DM&P Electronics |