CPUID

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.

Kontrollerar CPUID-instruktionsstöd av processorn

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 CPUID

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

Användning

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

Se även

Anteckningar

  1. Tasit Murki, Stanislav Garmatyuk. VIA Nano som ett verktyg för utforskare . iXBT (11 augusti 2010). Hämtad 16 september 2010. Arkiverad från originalet 15 augusti 2010.

Länkar