Регистры управления CR0, CR1, CR2, CR3 и CR4 определяют поведение процессора и характеристики текущей задачи. Для быстрого перехода к описанию флагов используйте их обозначения на рисунке.
CR0 - содержит системные флаги управления, управляющие поведением и состоянием процессора.
| CR1 - зарезервирован.
| CR2 - содержит линейный адрес команды, вызвавшей страничное нарушение.
| CR3 - содержит физический адрес начала каталога страниц и два флага: PCD и PWT. Этот регистр также называется PDBR (Page-Directory Base Register), он хранит 20 старших бит адреса каталога страниц (младшие подразумеваются равными 0, т.к. каталог страниц должен быть выровнен на границу страницы). Биты PCD и PWT управляют кэшированием каталога страниц во внутреннем кэше данных процессора, но не управляют TLB-кэшированием. При использовании расширения физического адреса, регистр CR3 содержит базовый адрес таблицы PDP (Page Directory Pointer).
| CR4 - содержит набор флагов, разрешающих использование некоторых архитектурных расширений.
| |
Регистры управления можно прочитать или загрузить только с помощью команды MOV. В защищёном режиме работа с регистрами управления позволена только программам с нулевым уровнем привилегий.
При загрузке значения в регистр управления, зарезервированные биты должны всегда иметь те значения, которые были получены при чтении.
Флаги регистров управления имеют следующие функции:
PG | Трансляция страниц (Paging), 31-й бит в CR0. Разрешает страничное преобразование, если установлен, иначе - запрещает. Когда страничное преобразование разрешено, все линейные адреса используются как физические. Флаг PG не действует, если не установлен флаг PE (0-й бит в CR0), тем не менее, установка флага PG при сброшенном PE вызывает генерацию исключения общей защиты (#GP). Подробно механизм страничного преобразования обсуждается в разделе "Управление памятью". | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Отключение кэша (Cache Disable), 30-й бит в CR0. Когда флаги CD и NW сброшены, разрешено кэширование всей памяти во внутренних и внеших кэшах. Когда флаг CD установлен, кэширование ограничено (см. таблицу). Чтобы запретить процессору доступ к его кэшам, флаг CD должен быть установлен и кэши объявлены недостоверными. Дополнительно об этом см. раздел "Управление кэшами". | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Отмена сквозной записи (Not Write-through), 29-й бит в CR0. Когда флаги NW и CD сброшены, обратная запись (write-back) для Pentium 4, P6 family и Pentium или сквозная запись (write-through) для Intel486 разрешена для записей, не попавших в кэш (см. таблицу о действиях флагов NW и CD). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Проверка выравнивания (Alignment Mask), 18-й бит в CR0. Когда установлен, разрешает автоматическую проверку выравнивания, иначе - запрещает. Проверка выравнивания выполняется только при следующих условиях:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Защита от записи (Write Protect), 16-й бит CR0. Когда установлен, запрещает системным процедурам запись в пользовательские страницы с доступом только для чтения (когда флаг WP сброшен - разрешает). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Численная ошибка (Numeric Error), 5-й бит в CR0. Когда установлен, активизирует внутрипроцессорный механизм сообщений об ошибках x87 FPU, когда сброшен - механизм сообщений об ошибках x87 FPU PC-типа. При сброшенном флаге NE, немаскируемая ошибка x87 FPU приводит к генерации прерывания сразу же после следующей команды x87 FPU или команд WAIT/FWAIT. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Тип расширения (Extension Type), 4-й бит в CR0. Зарезервирован в процессорах Pentium 4, семейства P6 и Pentium и для них всегда установлен. В процессорах Intel386 и Intel486 этот флаг, если установлен, определяет наличие поддержки команд процессора Intel 387 DX (математического сопроцессора). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Переключение задач (Task Switched), 3-й бит в CR0. Устанавливается процессором каждый раз при переключении задач; сбрасывается только программно. Процессор проверяет, установлен ли этот флаг, при выполнении команд модулей x87 FPU, MMX, SSE и SSE2. Использование этого флага позволяет не менять текущий контекст модулей x87 FPU, MMX, SSE и SSE2, пока к ним не произойдёт обращение.
В таблице 1 приведены действия процессора при выполнении команд x87 FPU в зависимости от состояния флагов TS, EM и MP. В таблицах 2 и 3 приведены действия процессора при выполнении команд MMX, SSE и SSE2.
Таблица 1. Выполнение команд x87 FPU в зависимости от состояния флагов EM, MP и TS.
Таблица 2. Выполнение команд MMX в зависимости от состояния флагов EM, MP и TS.
Примечание:
Таблица 3. Действия процессора при выполнении команд SSE и SSE2, в зависимости от флагов OSFXSR, OSXMMEXCPT, SSE, SSE2, EM, MP и TS 1
Примечания:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Эмуляция сопроцессора (Emulation), 2-й бит CR0. Если установлен, означает что процессор не имеет сопроцессора ни внутреннего, ни внешнего; если сброшен, то означает присутствие x87 FPU. Этот флаг влияет на выполнение команд MMX, SSE и SSE2.
Когда флаг EM установлен, попытка выполнения команды x87 FPU вызывает генерацию исключения неприсутствующего устройства (#NM). Этот флаг должен быть установлен, если процессор не имеет встроенного либо внешнего модуля x87 FPU (математического сопроцессора). Установка этого флага позволяет программно эмулировать выполнение команд x87 FPU. В таблице 4 приведены рекомендуемые значения этого флага, в зависимости от процессора. В таблицах 1, 2 и 3 приведены действия этого флага вместе с флагами MP и TS. При установленном флаге EM попытка выполнения команды MMX вызывает генерацию исключения недопустимой команды (#UD), поэтому у процессоров, поддерживающих технологию MMX этот флаг должен быть сброшен. Для команд расширений SSE и SSE2, установка флага EM приведёт к генерации исключения недопустимой команды (#UD) почти для всех команд, за исключением PAUSE, PREFETCHh, SFENCE, LFENCE, MFENCE, MOVNTI и CLFLUSH. Для процессоров, поддерживающих технологи SSE и/или SSE2 этот флаг должен быть сброшен. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Присутствие сопроцессора (Monitor Coprocessor), 1-й бит в CR0. Для процессоров со встроенным x87 FPU этот флаг следует устанавливать в 1, для процессоров с внешним сопроцессором - в 0. Этот флаг управляет поведением команды WAIT/FWAIT - если флаги MP и TS установлены, то попытка выполнения этой команды генерирует исключение неприсутствующего устройства (#NM). В таблице 4 приведены рекомендуемые комбинации флагов MP и EM для разных процессоров.
Таблица 4. Рекомендуемые комбинации флагов MP и EM для разных процессоров.
Примечание:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Защита разрешена (Protection Enable), 0-й бит в CR0. При установке переводит процессор в защищённый режим, при сбросе - в режим реальных адресов. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Запрещение кэширования на уровне страниц (Page-level Cache Disable), 4-й бит в CR3. Управляет кэшированием текущего каталога страниц. При установленном флаге PCD кэширование каталога страниц запрещено, при сброшенном флаге PCD - разрешено. Этот флаг воздействует только на внутренние кэши процессора (уровней L1 и L2, если есть). Процессор игнорирует значение этого флага, если страничное отображение не используется (сброшен флаг PG в CR0) либо если кэширование запрещено (установлен флаг CD в CR0). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Явные записи на уровне страниц (Page-level Writes Transparent), 3-й бит в CR3. Управляет механизмом кэширования обратной записи (write-back) и кэширования сквозной записи (write-through) в текущем каталоге страниц. При установленном флаге PWT, используется кэширование сквозной записи, при сброшенном флаге PTW - обратной записи. Этот флаг воздействует только на внутренние кэши процессора (уровней L1 и L2, если есть). Процессор игнорирует значение этого флага, если страничное отображение не используется (сброшен флаг PG в CR0) либо если кэширование запрещено (установлен флаг CD в CR0). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Расширения режима виртуального 8086 (Virtual-8086 Mode Extensions), 0-й бит в CR4. При установке разрешает использование расширенной обработки исключений и прерываний в режиме виртуального 8086. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Виртуальные прерывания защищённого режима (Protected-Mode Virtual Interrupts), 1-й бит в CR4. При установке разрешает аппаратную поддержку для флага виртуальных прерываний VIF (virtual interrupt flag) в ращищённом режиме. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Отключение счётчика тактов (Time Stamp Disable), 2-й бит в CR4. Если установлен, разрешает использование команды RDTSC только на нулевом уровне привилегий; если сброшен - разрешает на всех уровнях привилегий. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Расширения отладки (Debugging Extensions), 3-й бит в CR4. Когда установлен, попытки обращения к регистрам отладки DR4 и DR5 генерируют исключение недопустимой команды (#UD). Когда флаг сброшен, процессор разрешает использование этих регистров для обратной совместимости с программами, написанными для ранних версий 32-разрядных процессоров. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Расширения размера страниц (Page Size Extensions), 4-й бит в CR4. Когда установлен, разрешается использование 4Мб-страниц, когда сброшен - 4Кб-страниц. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Расширение физического адреса (Physical Address Extension), 5-й бит в CR4. Когда установлен, разрешается использование 36-разрядной физической адресации; когда сброшен - обычной 32-разрядной. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Разрешение аппаратной проверки (Machine-Check Enable), 6-й бит в CR4. Если установлен, разрешает исключение аппаратной проверки; если сброшен - запрещает. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Разрешение глобальных страниц (Page Global Enable), 7-й бит в CR4. (появился в процессорах семейства P6). Когда установлен, разрешается ипользование глобальных страниц. Перед установкой этого флага необходимо сначала разрешить страничное преобразование (установить флаг PG в CR0). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Разрешение счётчика мониторинга производительности (Performance-Monitoring Counter Enable), 8-й бит в CR4. Когда установлен, выполнение команды RDPMC разрешено на всех уровнях привилегий; когда сброшен - только на нулевом. |
Поддержка команд FXSAVE и FXRSTOR операционной системой (Operating System Support for FXSAVE and FXRSTOR instructions), 9-й бит в CR4. Когда установлен, этот флаг:
Если этот флаг сброшен, то команды FXSAVE и FXRSTOR сохраняют и восстанавливают контекст только x87 FPU и MMX (но не XMM и регистра MXCSR). Также, при сброшенном флаге процессор генерирует исключение недопустимой команды (#UD) при попытке выполнения всех команд SSE и SSE2, за исключением команд PAUSE, PREFETCHh, SFENCE, LFENCE, MFENCE, MOVNTI и CLFLUSH.
|
Поддержка операционной системой немаскируемых SIMD-исключений плавающей точки (Operating System Support for Unmasked SIMD Floating-Point Exceptions), 10-й бит в CR4. Определяет, поддерживает ли операционная система обработку немаскируемых SIMD-исключений плавающей точки (#XF) через обработчик этого исключения. Такое исключение генерируют только команды SSE и SSE2 по обработке вещественных чисел. Операционная система должна явно устанавливать этот флаг. Если этот флаг сброшен, процессор будет генерировать исключение недопустимой команды (#UD) каждый раз, когда будет возникать немаскируемое SIMD-исключение плавающей точки.
Флаги VME, PVI, TSD, DE, PSE, PAE, MCE, PGE, PCE, OSFXSR и OSXMMEXCPT в регистре CR4 есть не во всех процессорах, поэтому перед их использованием, необходимо определить наличие и поддержку этих флагов в процессоре командой CPUID. |
Приложения | Вопросы? Замечания? Пишите: sasm@narod.ru |
Copyright © Александр Семенко. |