Вы находитесь на странице: 1из 17

Министерство образования и науки Украины

Харковский национальный университет радиоэлектроники

Кафедра ЭВМ

ОТЧЕТ
О ЛАБОРАТОРНОЙ РАБОТЕ 10
по предмету
«Архитектура компьютеров»
на тему:
«Идентификация процессоров семейства х86-64»

Вариант №14

Выполнила: Принял:
КИУКИ-18-3 Голубничий Д.Ю.
Столяр И.В.

2020
1 Цель работы

Изучение способов идентификации микропроцессоров, совместимых с


архитектурой семейства Intel x86-64; получение практических навыков по разработке
низкоуровневых программ, определяющих тип установленного центрального
процессора.

2 Постановка задачи

Выполнение работы состоит в разработке, отладке и выполнении ассемблерных


программ для идентификации CPU в среде разработки Visual C++:
1. Используя регистр флагов, необходимо убедиться в наличии 32-разрядного
процессора в системе.
2. Убедиться в поддержке команды CPUID (посредством бита ID регистра EFLAGS)
и определить максимальное значение параметра ее вызова.
3. Получить строку идентификации производителя процессора и сохранить ее в
памяти.
4. Получить сигнатуру процессора и определить его модель, семейство и т.п.
Выполнить анализ дополнительной информации о процессоре.
5. Получить флаги свойств. Составить список поддерживаемых процессором
свойств.

3 Теоретическая часть

Биты регистра флагов и их назначение

Регистр флагов EFLAGS отражает текущее состояние процессора, многие из его


битов устанавливаются после выполнения операций и индицируют тип, полученного
результата. Формат регистра флагов приведен на рис. 10.1
 
Рис. 10.1 Формат регистра флагов

CF (Флаг переноса, бит 0)


Флаг переноса фиксирует значение переноса (заема), возникающего при сложении
(вычитании). Иногда используется и в других ситуациях.
 
PF (Флаг четности, бит 2)
Флаг четности фиксирует наличие четного числа единиц в младшем байте
результата операции, может быть использован, например, для контроля правильности
передачи данных.
 
AF (Флаг вспомогательного переноса, бит 4)
Флаг вспомогательного переноса фиксирует перенос (заем) из младшей тетрады,
т.е. из бита 3 в старшую тетраду при сложении (вычитании). Используется только для
двоично-десятичной арифметики, которая оперирует исключительно младшими
байтами.
 
ZF (Флаг нуля, бит 6)
Флаг нуля сигнализирует о получении нулевого (ZF = 1) или ненулевого (ZF = 0)
результата операции.
 
SF (Флаг знака, бит 7)
Флаг знака дублирует значение старшего бита результата, который при
использовании дополнительного кода соответствует знаку числа (0 – положительное
число, 1 – отрицательное).
 
TF (Флаг трассировки, бит 8)
При установке флага трассировки TF = 1, микропроцессор переходит в
пошаговый режим работы, применяемый при отладке программ, когда автоматически
генерируется особая ситуация отладки (#DB) после выполнения каждой команды.
Прерывание отладки начнет генерироваться, если прикладная программа установит флаг
TF с помощью команд POPF/POPFD или IRET/IRETD.
 
IF (Флаг разрешения прерываний, бит 9)
При установке флага разрешения прерываний IF = 1, микропроцессор
воспринимает (распознает) и соответственно реагирует на запрос прерывания по входу
INTR# (внешние маскируемые прерывания). При IF = 0, прерывания по этому входу
запрещаются и микропроцессор игнорирует поступающие запросы прерываний.
Значение флага IF не влияет на восприятие внешних немаскируемых прерываний
по входу NMI#, а также внутренних программных прерываний, выполняемых по
команде INT.
Изменение этого флага командами CLI, STI, POPF/POPFD и IRET/IRETD
возможно не всегда и определяется текущими:
 режимом работы процессора;
 уровнем привилегий выполняемого кода (CPL);
 уровнем привилегий ввода/вывода (поле IOPL);
 значением флага CR4.PVI (отвечает за активацию специального режима с
поддержкой виртуальных флагов прерываний в защищенном режиме).
 значением флага CR4.VME (отвечает за активацию специального режима
виртуальных прерываний в режиме V86);
 
При обычной обработке прерываний (CR4.PVI = 0 в защищенном режиме или
CR4.VME = 0 в режиме V86), когда IOPL < CPL ( IOPL < 3 в режиме V86), все попытки
изменения флага IF командами STI, CLI, POPF/POPFD и IRET/IRETD вызывают
генерацию ошибки общей защиты (#GP).
Когда же виртуальные прерывания инициализированы (CR4.PVI = 1 в
защищенном режиме или CR4.VME = 1 в режиме V86) при выполнении того же условия
IOPL < CPL ( IOPL < 3 в режиме V86) команды CLI и STI оказывают влияние на флаг
EFLAGS.VIF, а флаг IF при этом остается неизменным. Флаг VIF используется всеми
командами (в т.ч. PUSHF, POPF), которые пытаются изменять или считывать значение
флага IF. Только значение флага VIF будет всякий раз изменяться и считываться
программой. При поступлении внешнего маскируемого прерывания процессор
производит стандартное обращение к обработчику прерываний защищенного режима
через таблицу дескрипторов прерываний (IDT). При этом, при записи в стек значения
регистра EFLAGS процессор записывает поле IOPL равным 3 и флаг IF равным VIF.
 
DF (Флаг направления, бит 10)
Флаг направления определяет порядок обработки цепочек в соответствующих
командах (строковые команды: STOS, LODS, CMPS, OUTS и т.д.) — от меньших
адресов к большим (DF = 0) или от больших к меньшим (DF = 1).
 
OF (Флаг переполнения, бит 11)
Флаг переполнения сигнализирует о потере старшего бита результата в связи с
переполнением разрядной сетки при работе со знаковыми числами. При сложении этот
флаг устанавливается в 1, если происходит перенос в старший бит и нет переноса из
старшего бита, или имеется перенос из старшего бита, но отсутствует перенос в него; в
противном случае, флаг OF устанавливается в 0. При вычитании он устанавливается в 1,
когда возникает заем из старшего бита, но заем в старший бит отсутствует, либо имеется
заем в старший бит, но отсутствует заем из него.
 
IOPL (Уровень привилегий ввода/вывода, биты 13 и 12: Intel286 …)
Поле уровня привилегий ввода/вывода (Input/output Privilege Level – IOPL)
используется механизмом защиты для управления доступом к адресному пространству
ввода/вывода и программным прерываниям. Ряд команд, называемых IOPL-
чувствительными командами (IOPL-sensitive instructions), могут выполняться по-
разному в зависимости от текущего режима работы процессора и значения поля IOPL.
В защищенном режиме к IOPL-чувствительным командам относятся команды IN,
OUT, INS/NSB/INSW/INSD, OUTS/OUTSB/OUTSW/OUTSD, CLI, STI и префикс LOCK
(только на процессоре Intel286). Всякий раз, когда программа осуществляет
чтение/запись в порты ввода/вывода либо разрешение/запрещение прерываний
указанными командами, процессор осуществляет специальную проверку привилегий. В
зависимости от текущего значения поля IOPL и текущего уровня привилегий (CPL),
механизмом защиты может генерироваться особая ситуация общей защиты (#GP). Если
CPL ≤ IOPL, то команда исполняется в соответствии со своим назначением (как и в
режиме реальной адресации). Если CPL > IOPL в защищенном режиме (а также всегда
в режиме V86), производится дополнительная проверка доступности соответствующего
порта ввода/вывода при любых операциях с ним. Такая проверка использует
специальную карту разрешения ввода/вывода, которая расположена в верхней части
сегмента состояния задачи TSS и определяет доступность всех портов ввода/вывода. В
случае недоступности порта или при попытках разрешения/запрещения прерываний
командами CLI, STI, когда CPL > IOPL, процессор генерирует ошибку общей защиты
(#GP).
Изменение уровня привилегий ввода/вывода IOPL возможно командами
POPF/POPFD и IRET/IRETD в защищенном режиме и только при выполнении команды
на уровне привилегий, по крайней мере таком же (а для команды POPF/POPFD только
на нулевом), как и текущий уровень привилегий ввода/вывода (режим реальной
адресации эквивалентен нулевому уровню привилегий).
При работе в режиме V86 (EFLAGS.VM = 1) IOPL-чувствительными являются
команды CLI, STI, POPF/POPFD, PUSHF/PUSHFD, IRET/IRETD, INT n. У каждой из
этих команд имеется аналогичная зависимость от текущего значения поля IOPL.
Например, команда INT n вызывает генерацию особой ситуации общей защиты (#GP),
если IOPL < 3, или выполняется программное прерывание (при IOPL = 3).
В защищенном режиме команда POPF/POPFD является одновременно зависимой и
от уровня привилегий ввода/вывода IOPL, и от текущего уровня привилегий (CPL),
позволяя изменять поле IOPL только при выполнении на нулевом уровне
привилегий (CPL = 0), а флаг разрешения прерываний IF — только при условии CPL ≤
IOPL. Однако, если эта команда не может изменить указанное поле или флаг из-за
недостаточности текущих привилегий, то генерации особой ситуации общей защиты
(#GP) не происходит — продолжается выполнение последующих команд. Это поведение
меняется в режиме V86 — здесь попытка использования команды POPF/POPFD при
IOPL < 3 (кроме режима EV86) всегда вызывает генерацию особой ситуации общей
защиты (#GP).
В процессорах, начиная с Pentium, имеется специальный режим EV86 (включается
установкой флага CR4.VME = 1 в режиме V86), в котором возникает дополнительная
специфика для IOPL-чувствительных команд. Во-первых, команда IRET в этом режиме
вообще перестает быть IOPL-чувствительной и не генерирует особую ситуацию общей
защиты (#GP) при IOPL < 3. Команды CLI, STI при IOPL <  3, вместо генерации
указанной особой ситуации, оказывают влияние на флаг виртуального
прерывания VIF (также как и команда POPF), а для команды INT n вообще возникает
несколько режимов, которые зависят от текущего контекста конкретной задачи V86. И
наконец, команда PUSHF (16-битная), выполняемая в режиме EV86 при IOPL < 3, также
не генериует особую ситуацию общей защиты (#GP), а записывает в стек образ
регистра флагов FLAGS, у которого биты, соответствующие полю
IOPL, устанавливаются равными 3, а бит IF записывается из текущего значения флага
VIF.
В ранних моделях процессоров до Intel286 (8086/8088, Intel186) биты 12 и 13
регистра флагов FLAGS, соответствующие полю IOPL, считались
зарезервированными, а их значения всегда были равны единице. В процессоре Intel286 в
режиме реальной адресации невозможно изменять значения этих битов — они всегда
остаются нулевыми (они сбрасываются в момент инициализации процессора), а вот
более поздние модели процессоров, начиная с Intel386, такого ограничения уже не
имеют, то есть поле IOPL можно изменять и в режиме реальной адресации. Указанная
особенность использовалась в процедурах идентификации процессоров вплоть до
появления команды CPUID в процессоре Pentium.
 
NT (Вложенная задача, бит 14: Intel286 …)
Процессор устанавливает и проверяет флаг вложенной задачи для контроля за
прерванными задачами (задачи, во время исполнения которых имело место прерывание)
и при вызове процедур. Флаг NT влияет на действия, производимые командой
IRET/IRETD. Этот флаг может быть изменен командой POPF/POPFD и IRET/IRETD.
Некорректные изменения этого флага могут привести к возникновению различных
особых ситуаций в прикладных программах.
 
RF (Флаг возобновления, бит 16: Intel386 …)
Флаг возобновления RF временно выключает обработку особых ситуаций отладки
(DB#) для того, чтобы команда, вызвавшая такую ситуацию, могла быть перезапущена и
не стала бы причиной новой особой ситуации. Отладчик устанавливает этот флаг
командой IRETD при возврате в прерванную программу. Команды POPF, POPFD (в
режиме V86) и IRET на этот флаг не влияют.
 
VM (Виртуальный режим, бит 17: Intel386 …)
Установка флага виртуального режима VM переключает процессор в режим
виртуального-8086 (специальный случай защищенного режима).
 
AC (Режим контроля выравнивания, бит 18: Intel486 …)
Установка флага режима контроля выравнивания (AC = 1) и бита AM регистра
CR0 (CR0.AM = 1) включает контроль выравнивания при обращении к памяти. При
этом только при текущем уровне привилегий равном 3 (CPL = 3) генерируется особая
ситуация контроля выравнивания (#AC), если происходит обращение к невыровненному
операнду (например, к слову по нечетному адресу или к двойному слову по адресу не
кратному четырем).
Таблица 10.1 Условия контроля выравнивания
Тип данных Адрес должен
быть кратен
WORD (Слово) – m16, m16int,
2
moffs16
DWORD (Двойное слово) – m32,
4
m32int, moffs32
QUADWORD (Учетверенное
8
слово) – m64, m64int
DOUBLE QUADWORD (Двойное
16
учетверенное слово) – m128
Short-real (Короткое
4
вещественное – 32 бита) – m32real
Long-real (Длинное вещественное
8
– 64 бита) – m64real
Temp-real (Временное
8
вещественное – 80 бит) – m80real
Селектор 2
32-битный дальний указатель –
2
m16:16
32-битный указатель – m16:16 4
48-битный дальний указатель –
4
m16:32
Содержимое GDTR, IDTR, LDTR
4
или TR – m16&32
4 или 2 –
Область сохранения для
определяется
FSTENV/FNSTENV/FLDENV – mNbyte
размером операнда
4 или 2 –
Область сохранения для
определяется
FSAVE/FNSAVE/FRSTOR – mNbyte
размером операнда
4 или 2 –
Строка бит определяется
размером операнда
 
VIF (Виртуальное прерывание, бит 19: Pentium …)
Флаг виртуального прерывания VIF используется совместно с флагом VIP и
позволяет обеспечить нормальное выполнение старого ПО, использующего команды
управления внешними маскируемыми прерываниями (векторы от 32 до 255), в
современной мультипроцессорной и мультизадачной программно-аппаратной среде.
Для этого в процессорах, начиная с Pentium, поддерживаются специальные
расширенные режимы обработки прерываний:
 режим с поддержкой виртуальных флагов прерываний (включается
установкой флага CR4.PVI = 1 в защищенном режиме);
 режим виртуальных прерываний (включается установкой флага CR4.VME =
1 в режиме V86);
 
В этих режимах флаг виртуального прерывания VIF выступает виртуальным
подобием флага IF. При условии, что виртуальные прерывания инициализированы
(CR4.PVI = 1 в защищенном режиме, CR4.VME = 1 в режиме V86), команды CLI и STI
оказывают влияние на флаг EFLAGS.VIF, а флаг IF при этом остается неизменным. При
поступлении внешнего маскируемого прерывания процессор производит стандартное
обращение к обработчику прерываний защищенного режима через таблицу
дескрипторов прерываний (IDT). При этом, при записи в стек значения регистра
EFLAGS процессор записывает поле IOPL равным 3 и флаг IF равным VIF.
 
VIP (Ожидание виртуального прерывания, бит 20: Pentium …)
Флаг ожидания виртуального прерывания VIP используется совместно с флагом
VIF и позволяет прикладным программам в режиме поддержки виртуальных
прерываний отслеживать внешние вызовы прерываний даже тогда, когда программа
замаскирует их выполнение (индикация отложенных виртуальных прерываний). За
дополнительной информацией по использованию этих флагов обратитесь к описанию
прерываний и особых ситуаций.
 
ID (Флаг идентификации, бит 21: Pentium …)
Флаг идентификации ID предназначен для проверки — поддерживается ли
процессором команда CPUID. Если в программе можно установить и сбросить этот
флаг, значит команда CPUID данным процессором поддерживается.

4 Экспериментально-практическая часть

4.1 Используя регистр флагов, необходимо убедиться в наличии 32-разрядного


процессора в системе.
#include <iostream>

using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");
int i = 0;
_asm
{
//замена 12-15 бита на 0000 и проверка, удалось ли
pushf
pop ax
mov cx, ax
and ax, 0fffh
push ax
popf
pushf
pop ax
and ax, 0f000h
cmp ax, 0f000h
je is_8086
mov i, 1

//замена 12-15 бита на 1111 и проверка, удалось ли


mov ax, 0f000h
push ax
popf
pushf
pop ax
and ax, 0f000h
je is_80286
mov i, 2

// попытка установки 12-15 бита и проверка


pushfd
pop eax
mov eax, 0f000h
push eax
popfd
pushfd
pop eax
mov ecx, 15
bt ax, cx
jc not32bit
mov ecx, 14
bt ax, cx
jnc not32bit
mov i, 3

//попытка установки 18 бита, для уточнения модели


pushfd
pop eax
mov ecx, eax
xor eax, 40000h
push eax
popfd
pushfd
pop eax
xor eax, ecx
jz is_80386
mov i, 4

//попытка установки 21 бита, для уточнения модели


pushfd
pop eax
mov ecx, eax
xor eax, 200000h
push eax
popfd
pushfd
pop eax
xor eax, ecx
je is_80486
mov i, 5

is_8086:
is_80286:
not32bit:
is_80386:
is_80486:
mov EAX, 1;
}
switch (i)
{
case 5:
cout << "Процессор 32 или 64 битный, модель выше i486";
break;
case 0:
cout << "модель 8086/80";
break;
case 1:
cout << "модель 80826";
break;
case 3:
cout << "модель 80386";
break;
case 4:
cout << "модель 80486";
break;
case 2:
cout << "Произошла ошибка, процессор не 16 и не 32 битный";
break;
}
}

Рис. 10.1 – Результат определения 32-разрядного процессора

Для определения модели и разрдности были использованны свойства:


1. Для идентификации 16-битных процессоров анализируют значение разрядов
12-15 регистра флагов после попыток его модификации:
 у процессоров 8086/88 они всегда установлены, и попытка сбросить их не
удается;
 у процессоров i286 в реальном режиме они всегда сброшены.
2. Для идентификации 32-битных процессоров анализируется содержимое
EFLAGS:
 биты 12-15:
a. в реальном режиме бит 15 сброшен всегда, биты 12-14 хранят последнее
загруженное в них значение;
b. в защищенном режиме бит 15 сброшен всегда, бит 14 хранит последнее в
него загруженное значение; биты 12, 13 можно изменить только при
IOPL=0;
 бит 18 определен у процессоров, начиная с i486, поэтому в i386 его
невозможно изменить;
 бит 21 определяет возможность использования инструкции CPUID;
признаком доступности инструкции является возможность программного
изменения его значения.
В результате выполнения было подтвержденны свойства флагов,
идентифицирующие процессор, как способный к выполнению 32-битного кода, однако
определить точно модель программа не смогла, это значит, что мы имеем дело с
процессором Pentium и выше.

4.2 Убедиться в поддержке команды CPUID (посредством бита ID регистра


EFLAGS) и определить максимальное значение параметра ее вызова; Получить строку
идентификации производителя процессора и сохранить ее в памяти.
#include <iostream>

using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");
int i = 0, Iebx, Iedx, Iecx, max;
_asm
{
pushfd
pop eax
mov ecx, eax
xor eax, 200000h
push eax
popfd
pushfd
pop eax
xor eax, ecx
je isnot

mov i, 1;
mov EAX, 0
cpuid
mov max, EAX

mov Iebx, EBX


mov Iedx, EDX
mov Iecx, ECX
isnot :
}
if (i == 0)
{
printf("Команда cpuid не поддерживается");
}
else
{
cout << ("cpuid поддерживается\nMаксимальное значение параметра ее вызова равно ") <<
max << endl << endl << "Строка идентификации производителя:" << endl;
printf("%x", Iebx);
printf(":%x", Iedx);
printf(":%x", Iecx);
cout << endl;
}
}

Рис. 10.2 – Результат работы второй программы


Проверив, возможно ли изменить 21 бит регистра EAX мы убедились в поддержке
команды cpuid, и загрузив в EAX значение 0 вызвали cupid, в регистре EAX получили
максимальное значение команды cpuid, в регистрах EBX, EDX, ECX строка
производителя, в нашем случае это GenuineIntel, производитель Intel.

4.3 Получить сигнатуру процессора и определить его модель, семейство и т.п.


Выполнить анализ дополнительной информации о процессоре; Получить флаги свойств.
Составить список поддерживаемых процессором свойств.
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int Ieax, Iebx, Iedx, Iecx;
_asm
{
mov EAX, 1
cpuid
mov Ieax, EAX
mov Iebx, EBX
mov Iecx, ECX
mov Iedx, EDX
}
cout << "Сигнатура процессора " << bitset<32>(Ieax) << endl << endl;
cout << "Дополнительная информация " << bitset<32>(Iebx) << endl << endl;
cout << "Флаги свойств " << bitset<32>(Iecx) << ":" << bitset<32>(Iedx) << endl << endl;
}

Рис. 10.3 – Результат выполнения третьей программы

Поместив в EAX единицу и вызвав команду cpuid мы получили в EAX сигнатуру


идентификации процессора, в EBX дополнительную информацию, а в регистрах ECX
EDX флаги свойств, проведем их анализ.
1. Сигнатура идентификации процессора.

Рис. 10.4 – в регистре EAX процессоров i486+ после выполнения CPUID с EAX = 1

Extended Family – 00000000


Extended Model – 1000
Type – 00
Family Code – 0110
Model Number – 1101
Stepping ID – 1001

В нашем случае процессор: DualCore Intel Core i5-7200U, 3100 MHz (Информация
взята с сайта http://instlatx64.atw.hu/).

2. Дополнительная информация

Рисунок 10.2 – Содержимое регистра EBX после выполнения команды CPUID с EAX = 1

APIC ID – 00000000 – 8-битный идентификатор, назначенный локальному


модулю APIC процессора при включении питания.
Count – 00010000 – максимальное количество логических процессоров в
одном модуле; для процессоров, поддерживающих технологию Multithreading – в
одном физическом корпусе (100002 = 1610);

Chunks – 00001000 – значение размера строки кэша (в 8-байтных блоках)


flushed посредством команды CLFLUSH (10002 = 810);

Brand ID – 00000000 – Поддержка таблицы брендов отсутствует.

3. Список поддерживаемых свойств процессором.

Таблица Г.1 – Флаги свойств, возвращаемые в регистре EDX


Налич bit Name Description (when Flag Comme
ие = 1) nts
The processor contains an FPU that supports
+ 0 FPU Floating-point Unit On-
the Intel387 floating-point instruction set.
Chip
The processor supports extensions to virtual-8086
+ 1 VME Virtual Mode Extension
mode.
+ The processor supports I/O breakpoints,
including the CR4.DE bit for enabling debug
2 DE Debugging Extension
extensions and optional trapping of access to
the DR4 and DR5
registers.
+ 3 PSE Page Size Extension The processor supports 4-MB pages.
The RDTSC instruction is supported including
+ 4 TSC Time Stamp Counter
the CR4.TSD bit for access/privilege control.
Model Specific Registers are implemented with the
+ 5 MSR Model Specific Registers
RDMSR, WRMSR instructions
Physical addresses greater than 32 bits are
+ 6 PAE Physical Address
supported.
Extension
Machine-Check Exception, INT18, and
+ 7 MCE Machine-Check
the CR4.MCE enable bit are supported.
Exception
The compare and exchange 8-bytes instruction is
+ 8 CX8 CMPXCHG8 Instruction
supported.
The processor contains a software-accessible local
+ 9 APIC On-chip APIC Hardware
APIC.
1 Reserved -
0
+ Indicates whether the processor supports the
1 SEP Fast System Call Fast System Call instructions, SYSENTER
1 and SYSEXIT (regarding SEP feature bit).
Memory Type Range The processor supports the Memory Type Range
+ 1 MTRR
Registers Registers specifically the MTRR_CAP register.
2
+ The global bit in the page directory entries (PDEs)
and page table entries (PTEs) is supported,
1 PGE Page Global Enable indicating TLB entries that are common to
3 different processes and need not be flushed. The
CR4.PGE bit
controls this feature.
The Machine-Check Architecture is
+ 1 MCA Machine-Check
supported, specifically the MCG_CAP
4 Architecture
register.
+ The processor supports CMOVcc, and if the
1 CMOV Conditional Move FPU feature flag (bit 0) is also set, supports the
5 Instruction FCMOVCC and FCOMI instructions.
+ Indicates whether the processor supports the Page
Attribute Table. This feature augments the
1 PAT Page Attribute Table Memory Type Range Registers (MTRRs),
6 allowing an operating system to specify attributes
of memory on
4K granularity through a linear address.
B Name Description (when Flag = Commen
it 1) ts
+ Indicates whether the processor supports 4-MB
pages that are capable of addressing physical
memory beyond 4-GB. This feature indicates
1 PSE- 36-bit Page Size
that the upper four bits of the physical address of
7 36 Extension
the 4- MB page is encoded by bits 13-16 of the
page
directory entry.
- The processor supports the 96-bit processor serial
Processor serial number feature, and the feature is enabled. The
1 PSN
number is present and Pentium 4 and subsequent processor families do
8
enabled not
support this feature.
Indicates that the processor supports the
+ 1 CLFS CLFLUSH Instruction
CLFLUSH instruction.
9 H
2 Reserved -
0
+ Indicates that the processor supports the ability to
write debug information into a memory resident
2 DS Debug Store buffer. This feature is used by the branch trace
1 store
(BTS) and precise event-based sampling
(PEBS) facilities.
+ The processor implements internal MSRs that
Thermal Monitor
allow processor temperature to be monitored and
2 ACPI and Software
processor
2 Controlled Clock
performance to be modulated in predefined
Facilities
duty cycles under software control.
The processor supports the MMX technology
+ 2 MMX MMX technology
instruction set extensions to Intel Architecture.
3
+ The FXSAVE and FXRSTOR instructions are
supported for fast save and restore of the floating
FXSAVE and FXSTOR point context. Presence of this bit also indicates
2 FXSR
Instructions that CR4.OSFXSR is available for an operating
4
system to indicate that it supports the FXSAVE
and FXRSTOR instructions.
The processor supports the Streaming SIMD
+ 2 SSE Streaming SIMD
Extensions to the Intel Architecture.
5 Extensions
Streaming SIMD Indicates the processor supports the
+ 2 SSE2
Extensions 2 Streaming SIMD Extensions 2 Instructions.
6
+ The processor supports the management of
conflicting memory types by performing a snoop
2 SS Self-Snoop
of
7
its own cache structure for transactions issued to
the bus.
+ The physical processor package is capable of
supporting more than one logical processor. This
field does not indicate that Hyper-Threading
Technology (HTT) or Core Multi-Processing
(CMP) has been enabled for this specific
processor. To determine if HTT or CMP is
2 HTT Multi-Threading
supported, compare value returned in EBX[23:16]
8
after executing CPUID with EAX=1. If the
resulting value is > 1, then the processor supports
Multi-Threading.
IF (CPUID(1).EBX[23:16] > 1)
{Multi-Threading =
TRUE} ELSE {Multi-
Threading = FALSE}

B Name Description (when Flag = Commen


it 1) ts
The processor implements the Thermal
+ 2 TM Thermal Monitor
Monitor automatic thermal control circuitry
9
(TCC).
3 Reserved -
0
+ The processor supports the use of the FERR#/
PBE# pin when the processor is in the stop-clock
state (STPCLK# is asserted) to signal the
3 PBE Pending Break Enable processor that an interrupt is pending and that the
1 processor should return to normal operation to
handle the interrupt.
Bit 10 (PBE enable) in the
IA32_MISC_ENABLE MSR enables this
capability.

Таблица Г.2 – Флаги свойств, возвращаемые в регистре ECX


Налич B Name Description (when Flag = 1) Com
ие it ments
Streaming SIMD The processor supports the Streaming
+ 0 SSE3
Extensions 3 SIMD Extensions 3 instructions.
+ 1 PCLM PCLMULDQ Instruction The processor supports PCLMULDQ
ULDQ instruction.
+ Indicates that the processor has the ability to
2 DTES6 64-Bit Debug Store write a history of the 64-bit branch to and from
4 addresses into a memory buffer.
The processor supports the MONITOR and
+ 3 MONI MONITOR/MWAIT
MWAIT instructions.
TOR
+ The processor supports the extensions to the
4 DS- CPL Qualified Debug Store Debug
CPL Store feature to allow for branch message
storage qualified by CPL.
The processor supports Intel Virtualization
+ 5 VMX Virtual Machine Extensions
Technology
The processor supports Intel Trusted
+ 6 SMX Safer Mode Extensions
Execution Technology
- The processor supports Enhanced Intel
Enhanced Intel
7 EIST SpeedStep
SpeedStep Technology
Technology and implements the
IA32_PERF_STS and IA32_PERF_CTL
registers.
The processor implements the Thermal Monitor
+ 8 TM2 Thermal Monitor 2
2
thermal control circuit (TCC).
Supplemental The processor supports the Supplemental
+ 9 SSSE3
Streaming SIMD Streaming SIMD Extensions 3 instructions.
Extensions 3
The L1 data cache mode can be set to either
+ 1 CNXT L1 Context ID
adaptive mode or shared mode by the BIOS.
0 -ID
1 Reserved -
1
The processor supports FMA extensions using
+ 1 FMA Fused Multiply Add
YMM state.
2
The processor supports the
+ 1 CX16 CMPXCHG16B
CMPXCHG16B instruction.
3
+ The processor supports the ability to disable
sending Task Priority messages. When this
feature flag is set, Task Priority messages may
1 xTPR xTPR Update Control
be disabled. Bit 23 (Echo TPR disable) in the
4
IA32_MISC_ENABLE
MSR controls the sending of Task
Priority messages.
Продолжение таблицы Г.2
B Name Description (when Flag = Com
it 1) ments
+ The processor supports the Performance
Perfmon and
1 PDCM Capabilities MSR.
Debug Capability
5 IA32_PERF_CAPABILITIES register is
MSR345h.
1 Reserved -
6
The processor supports PCIDs and that
+ 1 PCID Process Context Identifiers
software may set CR4.PCIDE to 1.
7
The processor supports the ability to prefetch
- 1 DCA Direct Cache Access
data from a memory mapped device.
8
Streaming SIMD The processor supports the Streaming SIMD
+ 1 SSE4.1
Extensions Extensions 4.1 instructions.
9 4.1
Streaming SIMD The processor supports the Streaming
+ 2 SSE4.2
Extensions 4.2 SIMD Extensions 4.2 instructions.
0
+ 2 x2APIC Extended xAPIC Support The processor supports x2APIC feature.
1
+ 2 MOVBE MOVBE Instruction The processor supports MOVBE instruction.
2
+ 2 POPCN POPCNT Instruction The processor supports the POPCNT
3 T instruction.
TSC- Time Stamp Counter The processor’s local APIC timer supports one-
+ 2
DEAD Deadline shot
4 LINE operation using a TSC deadline value.
The processor supports the AES
+ 2 AES AES Instruction Extensions
instruction extensions.
5
+ The processor supports the
XSAVE/XRSTOR processor extended
2 XSAVE XSAVE/XSTOR States
states feature, the XSETBV/ XGETBV
6
instructions, and the XFEATURE_
ENABLED_MASK register (XCR0)
+ The OS has enabled XSETBV/XGETBV
instructions to access the XFEATURE_
OS-Enabled Extended
2 OSXSA ENABLED_MASK register (XCR0), and
State Management
7 VE support
for processor extended state management
using XSAVE/XRSTOR.
The processor supports the AVX
+ 2 AVX Advanced Vector
instruction extensions.
8 Extensions
16-bit floating-point The processor supports 16-bit floating-point
+ 2 F16C
conversion instructions conversion instructions.
9
RDRAND
+ 3 RDRAN The processor supports RDRAND instruction.
instruction
0 D
supported
3 Not Used Always returns 0.
1

5 Анализ результатов и выводы

В данной лабораторной работе была подробно освещены тема регистра флагов


EFLAGS, их названия, предназначения, а также пколение появления.
В практической части были написаны три блока кода на языке ассемблера,
функционал которых заключался в получении информации о процессоре и ее оценке.

Вам также может понравиться