CPUID (CPU Identification) - assembler instruktion mnemonic for x86-processorer , bruges til at indhente oplysninger om processoren. Ved at bruge det kan programmet bestemme typen af processor og dens muligheder (for eksempel kan det bestemme, hvilke instruktionssætudvidelser der understøttes).
CPUID-instruktionen dukkede først op i i486- processorerne . Så var det inkluderet i alle processorer, startende med Intel 486DX / SX / DX2 SL, AMD 486DX4 , Cyrix 6x86 (M1), UMC U5S .
Driftskode :. 0F A2_
Da CPUID-instruktionen ikke var til stede i de første x86-processorer , bør du sikre dig, at processoren understøtter den, før du bruger den. For at gøre dette forsøges at ændre bit 21 (ID) i EFLAGS-registeret . Hvis biten ændres med succes, er CPUID-instruktionen tilgængelig.
Kildekode til kontrol:
pushfd ; placere EFLAGS-registret på stable pop eax ; udtræk af værdien af EFLAGS i EAX mov ebx , eax ; gem værdi i EBX xor eax , 200000 h ; skift bit 21 push eax ; placere en ny værdi på stakken popfd ; gem ny værdi i EFLAGS pushfd ; placere EFLAGS på stakken igen pop eax ; EFLAGS værdi er nu i EAX xor eax , ebx ; check bit 21 je no_cpuid ; hvis det ikke er ændret, understøttes CPUID ikkeDette eksempel bruger 32-bit instruktioner, så hvis processoren er i 16-bit tilstand, anbefales det, at du først tjekker, om processoren understøtter sådanne instruktioner (det vil sige, hvis koden kører på en 80386 eller nyere processor).
CPUID-instruktionen bruger indholdet af EAX-registret til at bestemme, hvilken slags processorinformation der skal returneres. Første gang skal den kaldes med værdien EAX = 0. Dette vil returnere den maksimalt tilladte værdi af instruktionsparameteren, der understøttes af denne processor.
For at få information om yderligere funktioner, der er tilgængelige i processorer, skal bit 31 sættes i EAX-registeret før CPUID kaldes. For at bestemme den maksimalt tilladte parameterværdi for yderligere funktioner er det for eksempel nødvendigt at udføre CPUID med værdien EAX = 80000000 t .
Når EAX = 0, returnerer processoren processorproducentens identifikator ( leverandør-id ) som 12 ASCII-tegn i EBX-, EDX-, ECX-registrene (i den rækkefølge) . I EAX-registeret returneres den maksimalt tilladte EAX-værdi, når CPUID kaldes.
Nogle processorproducent-id'er: [1]
ASCII streng | HEX -værdier EBX:EDX:ECX | Fabrikant |
---|---|---|
Ægte Intel | 756E6547:49656E69:6C65746E | Intel |
AutentiskAMD | 68747541:69746E65:444D4163 | AMD |
Cyrix i stedet | 69727943:736E4978:64616574 | Cyrix |
CentaurHauls | 746E6543:48727561:736C7561 | kentaur |
SiS SiS SiS | 20536953:20536953:20536953 | SiS |
NexGenDriven | 4778654E:72446E65:6E657669 | NexGen |
Ægte TMx86 | 756E6547:54656E69:3638784D | Transmeta |
RiseRiseRise | 65736952:65736952:65736952 | Stig op |
UMC UMC UMC | 20434D55:20434D55:20434D55 | UMC |
Geode af NSC | 646F6547:79622065:43534E20 | National Semiconductor |
Vortex86 SoC | 74726F56:36387865:436F5320 | DM&P Electronics |