CPUID (CPU Identification) - assemblerinstruktionsminne för x86 -processorer , används för att få information om processorn. Med hjälp av det kan programmet bestämma typen av processor och dess kapacitet (till exempel kan det bestämma vilka instruktionsuppsättningar som stöds).
CPUID-instruktionen dök först upp i i486- processorerna . Sedan ingick den i alla processorer, från och med Intel 486DX / SX / DX2 SL, AMD 486DX4 , Cyrix 6x86 (M1), UMC U5S .
Driftkod : 0F A2.
Eftersom CPUID-instruktionen inte fanns i de första x86-processorerna bör du se till att processorn stöder den innan du använder den. För att göra detta görs ett försök att ändra bit 21 (ID) i EFLAGS-registret . Om biten ändras framgångsrikt är CPUID-instruktionen tillgänglig.
Källkod att kontrollera:
pushfd ; placera EFLAGS-registret på stack pop eax ; extrahera värdet av EFLAGS i EAX mov ebx , eax ; lagra värde i EBX xor eax , 200000 h ; byt bit 21 push eax ; placera ett nytt värde på stacken popfd ; lagra nytt värde i EFLAGS pushfd ; placera EFLAGS på stapeln igen pop eax ; EFLAGS-värdet är nu i EAX xor eax , ebx ; kontrollera bit 21 je no_cpuid ; om det inte har ändrats stöds inte CPUIDDet här exemplet använder 32-bitars instruktioner, så om processorn är i 16-bitars läge, rekommenderas det att du först kontrollerar om processorn stöder sådana instruktioner (det vill säga om koden körs på en 80386 eller senare processor).
CPUID-instruktionen använder innehållet i EAX-registret för att bestämma vilken typ av processorinformation som ska returneras. Första gången ska det anropas med värdet EAX = 0. Detta kommer att returnera det maximalt tillåtna värdet för instruktionsparametern som stöds av denna processor.
För att få information om ytterligare funktioner som finns tillgängliga i processorer måste bit 31 ställas in i EAX-registret innan CPUID anropas. För att till exempel bestämma det maximalt tillåtna parametervärdet för ytterligare funktioner är det nödvändigt att exekvera CPUID med värdet EAX = 80000000 h .
När EAX = 0, returnerar processorn processortillverkarens identifierare ( leverantörs-ID ) som 12 ASCII-tecken i EBX-, EDX-, ECX-registren (i den ordningen) . I EAX-registret returneras det maximalt tillåtna EAX-värdet när CPUID anropas.
Vissa processortillverkares identifierare: [1]
ASCII-sträng | HEX- värden EBX:EDX:ECX | Tillverkare |
---|---|---|
Äkta Intel | 756E6547:49656E69:6C65746E | Intel |
AutentiskAMD | 68747541:69746E65:444D4163 | AMD |
Cyrix istället | 69727943:736E4978:64616574 | Cyrix |
CentaurHauls | 746E6543:48727561:736C7561 | centaur |
SiS SiS SiS | 20536953:20536953:20536953 | SiS |
NexGenDriven | 4778654E:72446E65:6E657669 | NexGen |
ÄktaTMx86 | 756E6547:54656E69:3638784D | Transmeta |
RiseRiseRise | 65736952:65736952:65736952 | Stiga |
UMC UMC UMC | 20434D55:20434D55:20434D55 | UMC |
Geode av NSC | 646F6547:79622065:43534E20 | National Semiconductor |
Vortex86 SoC | 74726F56:36387865:436F5320 | DM&P Electronics |