Ця стаття не містить . (березень 2017) |
CPUID (CPU Identification) — асемблерна мнемоніка інструкції процесорів x86, використовується для отримання інформації про процесор. Використовуючи її, програма може визначити тип процесора і його можливості (наприклад, можна визначити, які розширення набору інструкцій підтримуються).
Інструкція CPUID вперше з'явилася в процесорах Intel 80486. Потім вона була включена усіма процесорами, починаючи з Intel 486DX/SX/DX2 SL, AMD 486DX4, Cyrix 6x86 (M1), UMC U5S.
Код операції: 0F A2.
Перевірка підтримки інструкції CPUID процесором
Так як інструкція CPUID була відсутня в перших процесорах архітектури x86, перед її використанням слід упевнитися, що процесор її підтримує. Для цього проводиться спроба змінити біт 21 (ID) регістра EFLAGS. Якщо біт успішно поміняється, то інструкція CPUID доступна.
Асемблерний код для перевірки:
pushfd ; EFLAGS розміщення регістра в стеку pop eax ; EFLAGS витяг значення в EAX mov ebx, eax ; збереження значення в EBX xor eax, 200000h ; зміна 21-го біта push eax ; розміщення нового значення в стеку popfd ; збереження нового значення в EFLAGS pushfd ; EFLAGS знову розміщення в стеку pop eax ; значення EFLAGS тепер в EAX xor eax, ebx ; перевірка 21-го біта je no_cpuid ; якщо він не змінився, то CPUID не дозволені
Даний приклад використовує 32-бітові інструкції, тому якщо процесор знаходиться в 16-розрядному режимі, рекомендується спочатку перевірити, чи підтримує процесор такі інструкції (тобто чи працює код на процесорі 80386 або новіше).
Використання
Інструкція CPUID по вмісту регістра EAX визначає, якого роду інформацію про процесор необхідно повернути. Перший раз її слід викликати зі значенням EAX = 0. При цьому буде повернуто максимально допустиме значення параметра інструкції, підтримуване даним процесором.
Для того, щоб отримати інформацію про додаткові функції, наявних в процесорах, в регістрі EAX перед викликом CPUID повинен бути встановлений біт 31. Наприклад, щоб визначити максимально допустиме значення параметра для додаткових функцій, необхідно виконати CPUID із значенням EAX = 80000000h.
При EAX = 0 процесор повертає ідентифікатор виробника процесора (англ. Vendor ID) у вигляді 12 символів ASCII в регістрах EBX, EDX, ECX (саме в такому порядку). У регістрі EAX повертається максимально допустиме значення EAX при виклику CPUID.
Деякі ідентифікатори виробників процесорів:
ASCII-рядок | HEX-значення EBX:EDX:ECX | Виробник |
---|---|---|
GenuineIntel | 756E6547:49656E69:6C65746E | Intel |
AuthenticAMD | 68747541:69746E65:444D4163 | AMD |
CyrixInstead | 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 | Rise |
UMC UMC UMC | 20434D55:20434D55:20434D55 | UMC |
Geode by NSC | 646F6547:79622065:43534E20 | National Semiconductor |
Особливості
У процесорах Intel 64 дана інструкція очищує верхню половину 64-розрядних регістрів RAX, RBX, RCX і RDX у всіх режимах роботи.
Див. також
Джерела
- . felixcloutier.com (англ.). Архів оригіналу за 14 травня 2020. Процитовано 25 лютого 2020.
Це незавершена стаття про апаратне забезпечення. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno berezen 2017 CPUID CPU Identification asemblerna mnemonika instrukciyi procesoriv x86 vikoristovuyetsya dlya otrimannya informaciyi pro procesor Vikoristovuyuchi yiyi programa mozhe viznachiti tip procesora i jogo mozhlivosti napriklad mozhna viznachiti yaki rozshirennya naboru instrukcij pidtrimuyutsya Instrukciya CPUID vpershe z yavilasya v procesorah Intel 80486 Potim vona bula vklyuchena usima procesorami pochinayuchi z Intel 486DX SX DX2 SL AMD 486DX4 Cyrix 6x86 M1 UMC U5S Kod operaciyi 0F A2 Perevirka pidtrimki instrukciyi CPUID procesoromTak yak instrukciya CPUID bula vidsutnya v pershih procesorah arhitekturi x86 pered yiyi vikoristannyam slid upevnitisya sho procesor yiyi pidtrimuye Dlya cogo provoditsya sproba zminiti bit 21 ID registra EFLAGS Yaksho bit uspishno pominyayetsya to instrukciya CPUID dostupna Asemblernij kod dlya perevirki pushfd EFLAGS rozmishennya registra v steku pop eax EFLAGS vityag znachennya v EAX mov ebx eax zberezhennya znachennya v EBX xor eax 200000 h zmina 21 go bita push eax rozmishennya novogo znachennya v steku popfd zberezhennya novogo znachennya v EFLAGS pushfd EFLAGS znovu rozmishennya v steku pop eax znachennya EFLAGS teper v EAX xor eax ebx perevirka 21 go bita je no cpuid yaksho vin ne zminivsya to CPUID ne dozvoleni Danij priklad vikoristovuye 32 bitovi instrukciyi tomu yaksho procesor znahoditsya v 16 rozryadnomu rezhimi rekomenduyetsya spochatku pereviriti chi pidtrimuye procesor taki instrukciyi tobto chi pracyuye kod na procesori 80386 abo novishe VikoristannyaInstrukciya CPUID po vmistu registra EAX viznachaye yakogo rodu informaciyu pro procesor neobhidno povernuti Pershij raz yiyi slid viklikati zi znachennyam EAX 0 Pri comu bude povernuto maksimalno dopustime znachennya parametra instrukciyi pidtrimuvane danim procesorom Dlya togo shob otrimati informaciyu pro dodatkovi funkciyi nayavnih v procesorah v registri EAX pered viklikom CPUID povinen buti vstanovlenij bit 31 Napriklad shob viznachiti maksimalno dopustime znachennya parametra dlya dodatkovih funkcij neobhidno vikonati CPUID iz znachennyam EAX 80000000h Pri EAX 0 procesor povertaye identifikator virobnika procesora angl Vendor ID u viglyadi 12 simvoliv ASCII v registrah EBX EDX ECX same v takomu poryadku U registri EAX povertayetsya maksimalno dopustime znachennya EAX pri vikliku CPUID Deyaki identifikatori virobnikiv procesoriv ASCII ryadok HEX znachennya EBX EDX ECX Virobnik GenuineIntel 756E6547 49656E69 6C65746E Intel AuthenticAMD 68747541 69746E65 444D4163 AMD CyrixInstead 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 Rise UMC UMC UMC 20434D55 20434D55 20434D55 UMC Geode by NSC 646F6547 79622065 43534E20 National SemiconductorOsoblivostiU procesorah Intel 64 dana instrukciya ochishuye verhnyu polovinu 64 rozryadnih registriv RAX RBX RCX i RDX u vsih rezhimah roboti Div takozhDzherela felixcloutier com angl Arhiv originalu za 14 travnya 2020 Procitovano 25 lyutogo 2020 Ce nezavershena stattya pro aparatne zabezpechennya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi