CPUID

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.

Verificarea suportului de instrucțiuni CPUID de către procesor

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 acceptat

Acest 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).

Utilizare

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

Vezi și

Note

  1. Tasit Murki, Stanislav Garmatyuk. VIA Nano ca instrument de explorator . iXBT (11 august 2010). Consultat la 16 septembrie 2010. Arhivat din original la 15 august 2010.

Link -uri