Команда CPUID
В новых процессорах фирмы Intel появилась команда CPUID, специально предназначенная для определения модели процессора. В своей программе, составленной на языке ассемблера, вы можете определить эту команду следующим образом:
CPU_ID MACRO
db 0fh
db 0a2h
ENDM
Как работает команда CPUID?
Перед вызовом этой команды необходимо загрузить в регистр EAX значение, которое определяет выполняемые действия. В первый раз вы должны вызвать команду CPUID, загрузив предварительно в регистр EAX нулевое значение:
mov eax, 00h
CPU_ID
Команда вернет в регистре EAX максимальное значение, которое можно передавать команде CPUID для определения выполняемых действий. Кроме того, в регистрах EBX, ECX и EDX будут находиться байты текстовой строки описания фирмы-изготовителя процессора. Для процессоров Intel это будет строка GenuineIntel.
Следующая последовательность команд перепишет эти байты в буфер _vendor_id_msg в формате, пригодном для вывода на консоль средствами BIOS:
_vendor_id_msg db "............", 0dh, 0ah, "$"
. . .
mov dword ptr _vendor_id_msg, ebx
mov dword ptr _vendor_id_msg[+4], edx
mov dword ptr _vendor_id_msg[+8], ecx
Для определения модели процессора следует вызвать команду CPUID, загрузив предварительно в регистр EAX значение 1:
mov eax, 1
CPU_ID
При этом в регистр EAX будет загружено слово сигнатуры, по которому можно определить модель процессора, а в регистр EDX – слово, состоящее из отдельных флагов, характеризующих возможности процессора (feature flags). Регистры EBX и ECX зарезервированы для моделей процессоров, которые будут разработаны в будущем.
Ниже приведен фрагмент кода, в котором слово сигнатуры и слово возможностей записываются в переменные _cpu_signature и _features_edx для дальнейшего анализа:
_cpu_signature dd 0
_features_edx dd 0
. . .
mov _cpu_signature, eax
mov _features_edx, edx
Рассмотрим формат слова сигнатуры, возвращаемое командой CPUID в регистре EAX:
Биты | Описание | ||
0-3 | Код модификации модели (stepping) | ||
4-7 | Код модели | ||
8-11 | Код семейства моделей | ||
12-13 | Тип процессора | ||
14-31 | Зарезервировано |
Слово сигнатуры состоит из отдельных полей, назначение которых будет описано ниже.
Биты 12 и 13 определяют тип процессора:
Значение битов 12 и 13 |
Тип процессора |
00 |
Процессор, изготовленный производителем OEM |
01 |
Процессор OverDrive |
10 |
Процессор типа Dual, который можно использовать в двухпроцессорных системах |
11 |
Зарезервировано |
Ниже мы привели таблицу, с помощью которой по содержимому трех полей слова сигнатуры (тип процессора, код семейства и код модели) можно распознать процессор:
Тип процессора |
Код семейства |
Код модели |
Описание процессора |
00 |
0100 |
0100 |
Intel 486 SL |
00 |
0100 |
0111 |
Intel DX2 |
00 |
0100 |
1000 |
Intel DX4 |
00, 01 |
0100 |
1000 |
Intel DX4 OverDrive |
00 |
0101 |
0001 |
Pentium 60, 66; Pentium OverDrive для процессоров Pentium 60, 66 |
00 |
0101 |
0010 |
Pentium 75, 90, 100, 120, 133, 150, 166, 200 |
01 |
0101 |
0010 |
Pentium OverDrive для процессоров Pentium 75, 90, 100, 120, 133 |
01 |
0101 |
0011 |
Pentium OverDrive для систем на базе процессора Intel 486 |
00 |
0101 |
0100 |
Pentium 166, 200 с командами MMX |
01 |
0101 |
0100 |
Зарезервировано. Будет использоваться процессорами Pentium OverDrive для процессоров Pentium 75, 90, 100, 120, 133 |
00 |
0110 |
0001 |
Pentium Pro |
00 |
0110 |
0011 |
Pentium II |
00 |
0110 |
0101 |
Зарезервировано для новых процессоров P6 |
01 |
0110 |
0011 |
Зарезервировано для процессоров Pentium OverDrive для процессоров Pentium Pro |
Приведем описание битов, возвращаемых командой CPUID в регистре EDX.
Напомним, что это слово состоит из отдельных флагов, характеризующих возможности процессора (feature flags).
Бит |
Описание |
0 |
На кристалле процессора имеется арифметический сопроцессор, совместимый по командам с сопроцессором Intel 387 |
1 |
Процессор может работать в режиме виртуального процессора 8086 |
2 |
Процессор может работать с прерываниями ввода/вывода, а также с битом DE регистра CR4 |
3 |
Возможно использование страниц памяти размером 4 Мбайт |
4 |
В процессоре есть команда RDTSC, которая может работать с битом TSD регистра CR4 |
5 |
Набор регистров процессора, специфический для модели, доступен с помощью команд RDMSR, WRMSR |
6 |
Возможна физическая адресация памяти с использованием шины с шириной, большей чем 32 разряда |
7 |
В процессоре реализовано исключение Machine Check (исключение с номером 18). Возможно использование бита MCE регистра CR4 |
8 |
В процессоре реализована команда сравнения и обмена 8 байт данных CMPXCHG8 |
9 |
В процессоре есть локальный APIC |
10 |
Зарезервировано |
11 |
В процессоре реализованы команды быстрого вызова системы SYSENTER и SYSEXIT |
12 |
В процессоре есть регистры Memory Type Range |
13 |
Доступен глобальный бит в PDE и PTE, а также бит PGE в регистре CR4 |
14 |
Применена архитектура Machine Check Architecture |
15 |
В процессоре реализованы команды условного перемещения данных CMOVCC и (при установленном бите 0) FCMOVCC и FCOMI |
16-22 |
Зарезервировано |
23 |
Применена технология MMX |
24-31 |
Зарезервировано |