Режимы работы процессора
PG |
РЕ |
Режим процессора |
0 |
0 |
Реальный режим |
0 |
1 |
Защищенный режим без использования страничной адресации |
1 |
0 |
Запрещенная комбинация (вызывает исключение типа #GP-нарушение защиты) |
1 |
1 |
Защищенный режим с использованием страничной адресации |
Отметим, что биты МР, ЕМ, TSвлияют также на выполнение инструкций, реализуемых блоком ММХ. В табл. $.3 указано, как реагирует процессор на поступление инструкцийFPUили ММХ в зависимости от установленного значения этих битов.
Таблица $.3.
Режимы работы блоков fpu и ммх
Биты CR0 |
Выполняемые инструкции | ||||
ЕМ |
МР |
TS |
Инструкции FPU |
WAIT (FWAIT) |
Инструкции ММХ |
0 |
0 |
0 |
Выполняется |
Выполняется |
Выполняется |
0 |
0 |
1 |
Исключение #NM |
Выполняется |
Исключение #NM |
0 |
1 |
0 |
Выполняется |
Выполняется |
Выполняется |
0 |
1 |
1 |
Исключение #NM |
Исключение #NM |
Исключение #NM |
1 |
0 |
0 |
Исключение #NM |
Выполняется |
Исключение #UD |
1 |
0 |
1 |
Исключение #NM |
Выполняется |
Исключение #UD |
1 |
1 |
0 |
Исключение #NM |
Выполняется |
Исключение #UD |
1 |
1 |
1 |
Исключение #NM |
Исключение #NM |
Исключение #UD |
Младшие 16 разрядов регистра CR0 для совместимости с защищенным режимом микропроцессора 80286 называют словом состояния машины MSW(MachineStateWord). Инструкции загрузки и сохраненияLMSW, SMSWдля совместимости с микропроцессором 80286 работают только с младшими 16 разрядами регистра CR0. Для загрузки или сохранения всего содержимого регистра CR0 используютсяMOV CR0,r/mилиMOV r/m,CR0, выполняемые программами, имеющими максимальный уровень привилегии 0.
Регистр CR1не используется.
Регистр CR2(PageFaultLinearAddress) хранит 32-битный линейный адрес, по которому был получен последний отказ страницы памяти.
|
31 |
12 |
11 |
5 |
4 |
3 |
2 |
1 |
0 | |
а) |
Базовый адрес каталога страниц |
Резервировано |
PCD |
PWT |
|
|
| |||
|
31 |
5 |
4 |
3 |
2 |
1 |
0 | |||
б) |
Базовый адрес таблицы указателей каталогов страниц |
PCD |
PWT |
0 |
0 |
0 |
Рис. $.8. Формат содержимого регистра управления CR3 при 32-разрядной адресации (а) и при 36-разрядной адресации (б)
Регистр CR3(PageDirectoryBaseRegister) в старших 20 битах хранит физический базовый адрес таблицы каталога страниц. Из младших 12 бит в процессорах 486+ используются следующие:
PCD (Page-LevelCacheDisable) – приPCD=1 запрещает кэширование страниц. Это один из источников аппаратного сигналаPCDдля управления внешним кэшем.
PWT (Page-LevelWritesTrough) – определяет режим работы кэш-памяти при страничной адресации: при установке значенияPWT=1 реализуется режим сквозной записи (write-through), при установкеPWT=0 реализуется режим обратной записи (write-back). Это один из источников аппаратного сигнала PWT для управления внешним кэшем.
31 |
|
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
00 |
. . . . . . |
00 |
OSXMM EXCPT |
OSFXSR |
СЕ |
PGE |
МСЕ |
РАЕ |
PSE |
DE |
TSD |
PVI |
VME |
Рис. $.9. Формат содержимого регистра управления CR4
Регистр CR4(присутствует в процессорах Pentium и выше) содержит биты разрешения архитектурных расширений. Назначение бит регистра CR4 представлено ниже.
VME(Virtual-8086ModeExtensions) – разрешает приVME=1 использование виртуального флага прерываний в режимеV86, что позволяет повысить производительность за счет сокращения лишних вызовов монитора виртуальных машин.
PVI (Protected-ModeVirtualInterrupts) – разрешает приPVI=1 использование виртуального флага прерываний в защищенном режиме.
TSD (TimeStampDisable) – превращение (приTSD=1) инструкцииRDTSC(чтение счетчика меток реального времени) в привилегированную.
DE (DebuggingExtensions) – расширение возможностей отладки (разрешение точек останова на инструкциях обращения к заданным портам ввода/вывода).
PSE(PageSizeExtension) – расширение размера страницы (4 Кбайт и 4 Мбайт).
РАЕ(PhysicalAddressExtension) – расширение физического адреса (страницы 4 Кбайт и 2 Мбайт, 36-битная адресация).
МСЕ(Machine-CheckEnable) – разрешение машинного контроля (выработки исключения #МС по машинной ошибке) (Р5+).
PGE(PagingGlobalExtensions) – разрешение глобальности в страничной переадресации. ПриPGE=1, по инструкцииMOV CR3вTLBочищаются только элементы с не установленным битом глобальностиG(P6+).
РСЕ(Performance-monitoringCounterEnable) – разрешение обращения к счетчикам событий (инструкцияRDPMC) на любом уровне привилегий (приPCE=0).
OSFXSR(OSFXSave/Store) – флаг использования инструкцийFXSAVE/FXRSTORдля быстрого сохранения и восстановления состоянияFPU/MMXпри переключении контекста. При инициализации процессора флаг обнуляется; он может быть установлен операционной системой, если она эти инструкции использует, а процессор поддерживает. Признак поддержки инструкции – битFXSR(бит 24 вEDX) после вызоваCPUID(1) (P6+).
OSXMMEXCPT(OSXMMException) – флаг поддержки операционной системой исключений от блока ХММ (SIMD-инструкций с плавающей точкой) (P6+).
Системные адресные регистрыпредназначены для ссылок на сегменты и таблицы в защищенном режиме (рис.$.10).
Регистры системных адресов | |||
47 |
16 |
15 |
0 |
GDTR |
| ||
IDTR |
| ||
Базовый адрес |
Размер таблицы |
15 |
0 |
Дескрипторы сегментов | ||
LDTR |
|
|
| |
TR |
|
|
| |
|
Базовый адрес |
Размер сегмента |
Атрибуты сегмента |
Рис.$.10. Системные адресные регистры
Регистры GDTR(GlobalDescriptorTableRegister) иIDTR(InterruptDescriptorTableRegister) программно загружаются 6-байтнымн операндами, включающими 32-битный линейный базовый адрес и 16-битный лимит глобальной таблицы дескрипторов и таблицы дескрипторов прерываний. В регистр задачиTR(TaskRegister) и регистр селектора локальной таблицы дескрипторовLDTR(LocalDescriptorTableregister) загружаются 16-битные селекторы дескрипторов сегмента состояния задачиTSSи локальной таблицы дескрипторовLDT. Эта загрузка вызывает автоматическую загрузку в теневые, программно-недоступные части регистров (выделены серым цветом) самих дескрипторов, содержащих 32-битные поля линейного базового адреса и размера, а также полей атрибутов.
Регистры отладки(DebugRegister) предназначены для задания и управления отладочными точками останова.
Регистры DR0...DR3(LinearBreakpointAddress0...3) хранят 32-битные линейные адреса точек останова.
Регистры DR4, DR5в процессорах 80386 и 486 не используются, обращение к ним эквивалентно обращению к регистрамDR6,DR7. В процессореPentiumпри включенном расширении отладки обращение к этим регистрам вызывает исключение недопустимого кода операции (#UD).
Регистр DR6(BreakpointStatus) отражает состояние контрольных точек.
Регистр DR7(BreakpointControl) управляет установкой контрольных точек.
Регистры проверки или тестирования(TestRegister) первоначально появились вIA-32 как самостоятельные регистры, предназначенные для тестирования элементов кэша (в частности, таблицыTLB):TR3– регистр данных внутреннего кэша,TR4– тестовый регистр состояния кэша,TR5– управляющий регистр тестирования кэша, TR6(TestControl) – управляющий регистр для теста кэширования страниц,TR7(TestStatus) – регистр данных для теста кэширования страниц. Но в процессорахP5+ тестовые регистры включены в группу модельно специфических регистровMSR. Поэтому вP5+, обращение к регистрам по имениTRвызывает исключение #UDнедопустимого кода операции.
Модельно-специфические регистры MSR(Model-SpecificRegisters) предназначены для управления расширениями отладки, мониторингом производительности, машинным контролем, кэшированием областей физической памяти и другими функциями. Их назначение привязывается к архитектуре конкретного процессора, состав меняется от модели к модели, доступ привилегирован. Инструкции обмена с этими 64-битными регистрами подразумевают, что данные находятся в пареEDX:EAX, а номер указывается в регистре ЕСХ, что позволяет неограниченно (до 4 миллиардов) увеличивать число этих регистров.
Доступность регистров различных групп зависит от режима работы процессора и уровня привилегий задачи. В табл. $.4 показана возможность загрузки (load) (занесения значения в регистр) различных регистров и сохранения (save) их в памяти в трех режимах работы процессора.
Таблица $.4.