Команда CPUID — получение информации о текущем процессоре
Команда CPUID — получение информации о текущем процессоре
Для получения информации о процессоре необходимо в регистр ЕАХ поместить параметр — одно из значений 0, 1 или 2.
Если ЕАХ = 0, то в регистрах ЕАХ, ЕВХ, EDX, ЕСХ формируется следующая информация:
Если ЕАХ = 1, то в регистрах процессора сформируется следующая информация:
Если ЕАХ = 2, то в регистрах ЕАХ, ЕВХ, ЕСХ и EDX формируется информация о кэшпамяти первого уровня и TLB-буферах. Первый байт регистра ЕАХ содержит число, означающее, сколько раз необходимо последовательно выполнить команду CPUID для получения полной информации о кэш-памяти первого уровня и TLB-буферах. Другие байты регистра ЕАХ и все байты регистров ЕВХ, ЕСХ и EDX содержат однобайтовые дескрипторы, характеризующие кэш-память и TLB-буферы (см. табл. 8.4). Старший бит каждого регистра характеризует достоверность информации в регистре. Если он равен нулю, то информация достоверна, иначе — регистр не используется.
Таблица 8.1. Поля регистра ЕАХ после выполнения команды CPUID (при ЕАХ = 1)
| Биты ЕАХ | Назначение | |
| 0...3 | Версия изменений модели | |
| 4...7 | Модель в семействе (см. табл. 8.2) | |
| 8...11 | Семейство микропроцессоров (см. табл. 8.2) | |
| 12...13 | Тип процессора (00 — обычный процессор; 01 — Overdrive-процессор; | |
| 10 — процессор для использования в двухпроцессорных системах) |
Таблица 8.2., Значения бит 4...7 и 8...11 регистра ЕАХ
| Биты ЕАХ (8...11) | Биты ЕАХ (4...7) | Тип процессора | ||
| 0100 | 0000 или 0001 | I486DX | ||
| 0100 | 0010 | I486SX | ||
| 0101 | 0010 | Pentium 75-200 | ||
| 0101 | 0100 | Pentium MMX 166-200 | ||
| 0110 | 0001 | Pentium Pro | ||
| 0110 | 0011 | Pentium II, модель 3 | ||
| 0110 | 0101 | Pentium II, модель 5, | ||
| Pentium II Xeon | ||||
| 0110 | 0110 | Celeron, модель 6 | ||
| 0110 | 0111 | Pentium III и Pentium HI | ||
| Xeon | ||||
| 0110 | 0011 | Pentium II OverDrive |
Таблица 8.3. Поля регистра EDX после выполнения команды CPUID (при ЕАХ=n)
| Биты EDX | Назначение (если биты установлены) |
| 0 | Присутствует сопроцессор с набором команд i387 |
| 1 |
Поддержка расширенных возможностей обработки прерываний в режиме виртуального процессора i8086 |
| 2 |
Процессор поддерживает точки прерывания ввода-вывода (точки останова по обращению к портам) для предоставления расширенных возможностей отладки и доступ к регистрам DR4 и DR5. Флаг CR4.DE=1 |
| 3 | Процессор поддерживает 4-мегабайтные страницы |
| 4 | Поддержка счетчика меток реального времени TSC |
| 5 |
Поддержка команд RDMSR и WRMSR для работы с модельно-зависимыми регистрами |
| 6 |
Процессор поддерживает физические адреса, большие, чем 32 бита, расширенный формат элемента таблицы страниц, дополнительный уровень трансляции страничного адреса и 2-мегабайтные страницы |
| 7 | Поддержка исключения 18 — машинного контроля |
| 8 | Поддержка инструкции CMPXCHG8B |
| 9 |
Микропроцессор содержит программно-доступный контроллер прерываний APIC |
| 10 | Резерв |
| 11 | Поддержка инструкций SYSENTER и SYSEXIT быстрых системных вызовов |
| 12 |
Поддержка регистра управления кэшированием MTRR_CAP (относится к MSR-регистрам) |
| 13 |
Поддержка работы с битом G, определяющим глобальность страницы в PTDE и РТЕ. Бит CR4.PGE = 1 |
| 14 | Поддержка архитектуры машинного контроля (MSR-регистр MCG_CAP) |
| 15 | Поддержка инструкций CMOV, FCMOVCC, FCOMI условной пересылки |
| 16 | Поддержка инструкций CMOVCC, FMOVCC и FCOMI (если установлен бит 0) |
| 17 |
Процессор поддерживает 36-разрядную физическую адресацию с 4-мегабайтными страницами |
| 18 |
Процессор поддерживает собственную идентификацию по уникальному 96-битному номеру и эта поддержка активна |
| 19-22 | Резерв |
| 23 | Поддержка целочисленного MMX-расширения |
| 24 | Процессор поддерживает команды FXSAVE и FXRSTOR |
| 25 | Поддержка MMX-расширения с плавающей точкой |
| 24-31 | Резерв |
| дескриптора | Значение |
|
00h Olh |
Нулевой дескриптор Буфер TLB-команд: размер страницы — 4 Кбайт, ассоциативный 4-канальный, 32 входа |
| 02h |
Буфер TLB-команд: размер страницы — 4 Кбайт, ассоциативный, 2 входа |
| 03h |
Буфер TLB-данных: размер страницы — 4 Кбайт, ассоциативный 4-канальный, 64 входа |
| 04h |
Буфер TLB-данных: размер страницы — 4 Кбайт, ассоциативный 4-направленный, 8 входов |
| 06h |
Кэш команд: размер 8 Кбайт, наборно-ассоциативный 4-канальный, длина строки 32 байта |
| 08h |
Кэш команд: размер 16 Кбайт, наборно-ассоциативный 2-канальный, длина строки 32 байта |
| Oah |
Кэш данных: размер 8 Кбайт, ассоциативный 2-направленный, длина строки 32 байта |
| Och |
Кэш данных: размер 16 Кбайт, ассоциативный 2-или 4-направленный, длина строки 32 байта |
| 40h | Кэш-память второго уровня (L2) отсутствует |
| 41h |
Объединенный кэш: размер 128 Кбайт, наборно-ассоциативный 4-канальный, длина строки 32 байта |
| 42h |
Объединенный кэш: размер 256 Кбайт, наборно-ассоциативный 4-направленный, длина строки 32 байта |
| 43h |
Объединенный кэш: размер 512 Кбайт, наборно-ассоциативный 4-направленный, длина строки 32 байта |
| 44h |
Объединенный кэш: размер 1 Мбайт, наборно-ассоциативный 4-направленный, длина строки 32 байта |
| 45h |
Объединенный кэш: размер 2 Мбайт, наборно-ассоциативный 4-нанравлеиный, длина строки 32 байта |