Аппаратное обеспечение персонального компьютера

       

Команда 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

Зарезервировано

Заметим, что многопроцессорные системы могут быть построены не только на базе процессоров типа Dual, но и на обычных процессорах.

Ниже мы привели таблицу, с помощью которой по содержимому трех полей слова сигнатуры (тип процессора, код семейства и код модели) можно распознать процессор:

Тип процессора

Код семейства

Код модели

Описание процессора

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

Что же касается кода модификации модели (stepping), то он определяет изменения в процессоре. Вы найдете описания этих кодов для процессора Pentium в руководстве Pentium Processor Specification Update, который можно приобрести в фирме Intel.

Приведем описание битов, возвращаемых командой 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

Зарезервировано

Еще одно применение для команды CPUID – определение характеристик кэша, установленного в процессоре. Для этого перед вызовом команды CPUID в регистр EAX необходимо загрузить значение 2. Подробное изучение этой возможности выходит за рамки нашей книги. При необходимости вы узнать все подробности о команде CPUID на сервере Intel в сети Internet по указанному нами ранее адресу.


Содержание раздела