CPUID (CPU azonosítás) - összeszerelő utasítások mnemoniája x86 processzorokhoz , a processzorral kapcsolatos információk megszerzésére szolgál. Segítségével a program meg tudja határozni a processzor típusát és képességeit (például meg tudja határozni, hogy mely utasításkészlet-kiterjesztések támogatottak).
A CPUID utasítás először az i486 processzorokban jelent meg . Ezután az összes processzorba belekerült, kezdve az Intel 486DX / SX / DX2 SL-től, az AMD 486DX4 -től , a Cyrix 6x86 -tól (M1), az UMC U5S -től .
Működési kód : 0F A2.
Mivel a CPUID utasítás nem volt jelen az első x86-os processzorokban , használat előtt győződjön meg arról, hogy a processzor támogatja azt. Ehhez az EFLAGS regiszter 21. bitjét (ID) próbáljuk megváltoztatni . Ha a bit sikeresen változik, akkor a CPUID utasítás elérhető.
Ellenőrizendő forráskód:
pushfd ; az EFLAGS regiszter elhelyezése a verem pop eax ; az EFLAGS értékének kinyerése EAX-ben mov ebx , eax ; érték tárolása az EBX-ben xor eax , 200000 h ; change bit 21 push eax ; új érték elhelyezése a veremben popfd ; új érték tárolása az EFLAGS-ben pushfd ; EFLAGS elhelyezése a veremben ismét pop eax ; EFLAGS értéke most EAX xor eax , ebx ; ellenőrizze a 21. bitet je no_cpuid ; ha nem változott, akkor a CPUID nem támogatottEz a példa 32 bites utasításokat használ, ezért ha a processzor 16 bites módban van, akkor először ajánlott ellenőrizni, hogy a processzor támogatja-e az ilyen utasításokat (vagyis, hogy a kód 80386-os vagy újabb processzoron fut-e).
A CPUID utasítás az EAX regiszter tartalmát használja annak meghatározására, hogy milyen processzorinformációkat adjon vissza. Az első alkalommal EAX = 0 értékkel kell meghívni. Ez a processzor által támogatott utasításparaméter maximális megengedett értékét adja vissza.
Ahhoz, hogy információt kapjunk a processzorokban elérhető további funkciókról, a CPUID hívása előtt be kell állítani a 31-es bitet az EAX regiszterben, például a további funkciók maximális megengedett paraméterértékének meghatározásához szükséges a CPUID végrehajtása az EAX = értékkel. 80000000 óra .
Ha EAX = 0, a processzor 12 ASCII karakterként adja vissza a processzorgyártó azonosítót ( Szállító azonosító ) az EBX, EDX, ECX regiszterekben (ebben a sorrendben) . Az EAX regiszterben a maximális megengedett EAX értéket ad vissza a CPUID hívásakor.
Néhány processzorgyártó azonosító: [1]
ASCII karakterlánc | HEX értékek: EBX:EDX:ECX | Gyártó |
---|---|---|
Eredeti Intel | 756E6547:49656E69:6C65746E | Intel |
Hiteles AMD | 68747541:69746E65:444D4163 | AMD |
Cyrix helyett | 69727943:736E4978:64616574 | Cyrix |
CentaurHauls | 746E6543:48727561:736C7561 | kentaur |
SiS SiS SiS | 20536953:20536953:20536953 | SiS |
NexGenDriven | 4778654E:72446E65:6E657669 | NexGen |
EredetiTMx86 | 756E6547:54656E69:3638784D | Transmeta |
RiseRiseRise | 65736952:65736952:65736952 | Emelkedik |
UMC UMC UMC | 20434D55:20434D55:20434D55 | UMC |
Geóda az NSC-től | 646F6547:79622065:43534E20 | Nemzeti félvezető |
Vortex86 SoC | 74726F56:36387865:436F5320 | DM&P Electronics |