Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпс с 1 по 294.doc
Скачиваний:
13
Добавлен:
16.04.2019
Размер:
6.2 Mб
Скачать

2.3.4. Команды управления процессором

Команда LMSW загружает из памяти или регистра слово состояния машины MSW в младшие 16 разрядов регистра управления CRO. Так как младший бит MSW управляет включением защиты, то данная команда используется для перехода в защищенный режим. Команда SMSW пересылает содержимое 16 младших разрядов CRO в регистр или ячейку памяти, заданные в команде.

Команда NOP («пустая» команда), не вызывающая выполнения каких-либо операций, служит для реализации программных задержек или заполнения пропусков, образовавших­ся в программе. Команда HLT прекращает выполнение программы и переводит процессор в состояние останова, выход из которого происходит при поступлении сигналов прерыва­ния или перезапуска (Reset).

Отметим, что команды HLT и LMSW выполняются только при наиболее высоком уровне привилегий программы: CPL = 0. При всех других значениях CPL эти команды вызывают прерывание с номером Ne= 13(#GP- нарушение защиты).

Команда CPUID позволяет получить информацию о типе процессора, используемом в данной системе. Эта информация вводится после выполнения данной команды в регис­тры ЕАХ, ЕВХ, ЕСХ, EDX и может быть считана пользователем или операционной систе­мой. Содержание этой информации зависит от содержимого ЕАХ, которое предварительно записывается в этот регистр.

Если предварительное содержимое ЕАХ = 0, то после выполнения команды CPUID в этом регистре будет установлено значение ЕАХ = 2 (идентификатор семейства Р6). В регистрах EBX:ECX:EDX будет записано «Genuinelntel» («Настоящий Интел») в коде ASCII (один символ в каждом байте), что указывает на производство данного процессора 999 на заводах компании «Intel».

Если предварительное содержимое ЕАХ = 1, то в регистрах ЕАХ, EDX будет содержать­ся информация о типе и модели процессора, о реализуемых процессором режимах и функциональных возможностях (регистры ЕВХ.ЕСХ при этом не используются). Формат содер­жимого регистров ЕАХ, EDX после выполнения команды CPUID представлен для этого случая на рис. 2.15.

Регистр ЕАХ(рис. 2.15, а) содержит поля, указывающие тип (Туре), семейство (Family) и модель (Model) процессора, которые для процессоров семейства Р6 имеют следующие зна­чения: Туре = 00, Family = 0110, Model = 0001. Регистр EDX (рис. 2.15, б) содержит биты, единичное значение которых определяет следующие характеристики процессора:

FPU -указывает на наличие блока обработки чисел с плавающей точкой FPU;

VME - процессор реализует режим виртуального 8086, используя биты VME, PVI в реги­стре CRO и биты VIF, VIP в регистре EFLASGS;

DE - процессор поддерживает отладку с установкой контрольных точек, используя бит DE в регистре CRO и регистры отладки DR4, DR5;

PSE -процессор обеспечивает возможность использования страниц объемом 4 Мбайт при установке значения бита PSE = 1 в регистре CRO;

TSC - процессор содержит счетчик времени TSC, чтение содержимого которого произ­водится командой RDTSC;

MSR - процессор содержит модельно-специфические регистры MSR, чтение и запись содержимого которых производится командами RDMSR, WRMSR;

РАЕ - реализуется 36-разрядная адресация памяти, если в регистре CR4 установлено значение бита РАЕ = 1;

МСЕ - процессор реализует прерывание машинного контроля #МС, если в регистре CR4 установлено значение бита МСЕ = 1;

СХ8 - процессор выполняет команду CMPXCHG8B;

APIC - процессор содержит усовершенствованный программируемый контроллер прерываний APIC (Advanced Programmable Interrupt Controller);

SEP - процессор реализует быстрое обращение к системным процедурам с помощью команд SYSENTER, SYSEXIT;

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

PGE - процессор использует бит глобальности G при страничной адресации, если в регистре CR4 установлено значение бита РСЕ = 1;

МСА - процессор обеспечивает использование MSR-регистра MCG_CAP, используемого при контроле ошибок;

CMOV - процессор выполняет команды условной пересылки CMOVcc, а также (если значение бита FPU - 1) команд FCMOVcc и FCOMI;

PAT - процессор поддерживает таблицу атрибутов страниц, позволяя операционной системе задавать определенные атрибуты для каждой страницы;

PSE36 - процессор обеспечивает работу со страницами размером 4 Мбайт при 36-разрядной шине адреса;

PN - процессор имеет 96-разрядный идентификационный номер, к которому обеспечен внешний доступ (чтение):

ММХ - процессор выполняет набор ММХ - команд; ' -"».—« - г--,^,^,,«.,.*.*•, FXSR - процессор выполняет команды FXSAVE, FXRSTOR, используемые для записи в память и последующего восстановления содержимого регистров FPU, MMX, SSE;

ХММ - процессор выполняет набор SSE-команд (SIMD-команды с плавающей точкой.

Если предварительное содержимое регистра ЕАХ = 2, то после выполнения команды CPUID в регистрах ЕАХ, ЕВХ, ЕСХ, EDX будет размещаться информация о характеристи­ках используемой процессором кэш-памяти 1-го и 2-го уровней, а также о характеристиках буферной памяти TLB, используемой для страничной трансляции адреса. Например, для процессора Pentium Pro содержимое этих регистров будет следующим: ЕАХ = 03020101 h, ЕВХ = OOh, ЕСХ = OOh, EDX = 06040A42h. Каждый байт содержимого регистров является дескриптором, указывающим характеристики определенного вида внутренней памяти. В регистре ЕАХ байт 0 указывает число команд CPUID, которое надо выполнить, чтобы получить полную информацию о внутренней памяти процессора (для семейства Р6 - одна команда, byteO = 01 h), байт 1 определяет характеристики TLB, транслирующего адреса команд при использовании страниц по 4 Кбайт (кэш-память, организованная в виде 8 набо­ров по 4 строки, дескриптор bytel = 01 h), байт 2 - характеристики TLB команд при исполь­зовании страниц по 4 Мбайт (кэш-память, организованная в виде 1 набора из 2 строк, дес­криптор byte2 = 02h), байт 3 - характеристики TLB, транслирующего адреса данных при использовании страниц по 4 Кбайт (кэш-память, организованная в виде 16 наборов по 4 строки, дескриптор byteS = 03h). Дескрипторы в регистре EDX имеют следующее на­значение: байт 0 указывает характеристики общей кэш-памяти 2-го уровня (кэш-память команд и данных емкостью 256 Кбайт, наборы по 4 строки длиной 32 байт, дескриптор byteO=42h), байт 1 - характеристики кэш-памяти данных 1-го уровня (8 Кбайт, наборы по 2 строки длиной 32 байт, дескриптор bytel =OAh), байт 2 - характеристики TLB данных при использовании страниц по 4 Мбайт (кэш-память, организованная в виде 2 наборов по 4 строки, дескриптор byte2 = 04п), байт 3 - характеристики кэш-памяти команд 1 -го уровня (8 Кбайт, наборы по 4 строки длиной 32 байт, дескриптор byteS = 06h). Регистры ЕВХ, ЕСХ при идентификации семейства Р6 не используются (содержат нулевые дескрипторы).

Команды INVD, WBINVD, INVLPG служат для управления кэш-памятью. Они являются привилегированными, т. е. выполняются только программами с максимальным уровнем при­оритета CPL = 0.

Команды INVD, WBINVD аннулируют содержимое всех ячеек (строк) внутренней кэш-­памяти данных и кэш-памяти 2-го уровня, запрещая запись/считывание ее содержимого. При обращениях к памяти после этих команд осуществляется заполнение строк кэш-памя­ти новым содержимым из основной памяти. Отличие этих команд состоит в том, что при выполнении команды WBINVD производится обратная запись из внутренней кэш-памяти в основную память содержимого тех ячеек (строк), в которые производилась запись информации (модификация).

Команда INVLPG аннулирует (делает недействительным) содержимое строки в буфере транс­ляции страничных адресов TLB, где содержится базовый адрес страницы, на которой распо­лагается адресуемая ячейка памяти (ml 6 или т32). В этом случае при последующем обраще­нии к данной странице выполняется процедура трансляции адреса с помощью хранящихся в основной памяти таблиц, в которых записаны базовые адреса разделов и страниц.

Команда RSM возвращает процессор из режима системного управления SMM к выпол­нению программы, которая была прервана поступлением внешнего запроса SMI#. При этом восстанавливается содержимое регистра процессора, которое было сохранено в памяти при поступлении этого запроса.

Команды RDMSR, WRMSR позволяют загрузить содержимое одного из 64-разрядных модельно-специфических регистров MSR в пару регистров EDX:EAX или записать содер­жимое этой пары регистров в MSR. Выбор регистра MSR определяется его кодом, который предварительно заносится в регистр ЕСХ. Эти команды выполняются в реальном режиме или защищенном режиме при максимальном уровне привилегии программы CPL = 0. В дру­гих случаях попытка их выполнения вызовет исключение типа #GP («нарушение защиты»).

Команда RDPMC производит загрузку в пару регистров EDX:EAX содержимого одного из двух 64-разрядных счетчиков, используемых для мониторинга производительности процес­сора. Эти счетчики входят в состав модельно-специфических регистров процессора. Номер считываемого счетчика - 0 или 1 - задается содержимым регистра ЕСХ. Если в регистре управления CR4 установлено значение бита РСЕ = 1, то выполнение этой команды произво­дится при любом уровне привилегии текущей программы. Если значение РСЕ = 0, то команда RDPMC выполняется только программой с уровнем привилегии CPL = 0, а при других значе­ниях CPL будет реализовано исключение типа #GP («нарушение защиты»).

Команда RDTSC загружает в пару регистров EDX:EAX содержимое счетчика текущего времени TSC (Time-Stamp Counter), который также является одним из модельно-специфи­ческих регистров MSR. Счетчик TSC переключается в каждом такте работы процессора и сбрасывается в ноль при его перезапуске (reset). Выполнение этой команды производится при любом уровне привилегии текущей программы, если в регистре управления CR4 установ­лено значение бита TSD = 0. При TSD = 1 команда выполняется только программой с уров­нем привилегии CPL = 0, в противном случае реализуется исключение #GP.