Контрольний регістр — регістр, що змінює або контролює поведінку процесора чи іншого системного пристрою, тісно пов'язаного з ЦП. Загальними завданнями, виконуваними контрольними регістрами є: контроль переривань, перемикання режимів адресації, керування сторінковим відображенням пам'яті, та контроль співпроцесора.

Контрольні регістри серії x86 CR0

Регістр CR0 є 32-бітним на 386 і старших процесорах. На x86-64, в режимі Long mode він (та інші контрольні регістри) є 64-бітним. CR0 має різні контрольні прапори, що модифікують (визначають) базові операції процесора.

БітІм'яПовне Ім'яОпис31PGPagingЯкщо 1, дозволяє сторінкове відображення і використання CR3, в іншому разі забороняє його.30CDCache disable29NWNot-write through18AMAlignment maskДозволена перевірка вирівнювання (alignment check), якщо прапор AM виставлено, AC прапор виставлено (в регістрі Eflags, на кільці 3)16WPWrite Protect5NENumeric errorДозволяє, коли виставлено, внутрішній формат виявлення помилок співпроцесора x87 (обчислення з рухомою комою), інакше дозволяє таку детекцію в PC стилі.4ETExtension type3TSTask switchedДозволяє зберігання котнексту завдання x87, тільки після того як x87 інструкція використана після перемикання завдання.2EMEmulationЯкщо виставлено, x87 FPU (одиниця для обчислень з плаваючою точкою) є представлена, інакше ні.1MPMonitor coprocesorКонтролює взаємодію WAIT/FWAIT інструкцій з прапором TS в CR00PEProtected Mode EnableЯкщо 1, система працює в захищеному режимі, інакше - в реальному.

CR1 Зарезервований регістр. Intel не розголошує чому.

CR2 Містить величину, що зветься Page Fault Linear Address (PFLA) - лінійна адреса помилки сторінки. Коли трапляється помилка сторінки (page fault), адреса команди, що запитувала цю сторінку, зберігається в даному регістрі.

Помилка сторінки - це апаратно згенероване переривання (interrupt) чи виняток (exception), для ПЗ, і стається воно, коли програма запитується сторінки, що є позначена в її адресному просторі, але відсутня в фізичній пам'яті (major page fault), або пристутня там, але її статус не визначено як «присутня» (minor page fault).

CR3 Використовується, коли дозволено віртуальну адресацію, отже коли прапор PG в CR0 виставлено. CR3 дозволяє процесору транслювати (переводити) віртуальні адреси у фізичні, оперуючи з директорією сторінок (page directory) і таблицями сторінок (page tables) для поточного завдання. Зазвичай, верхні 20 біт CR3 використовуються як регістр бази директорій сторінок (, PDBR). В традиційному 32-бітному захищеному режимі, x86 процесори використовують дворівневу схему відображення сторінок, де регістр CR3 містить вказівник на окрему сторінкову директорію (page directory), яка довжиною є 4096 байт, і яка розбита на 1024 4-байтні одиниці, кожна з яких — це вказівник на таблицю сторінок довжиною теж 4096 байт, і яка теж розбита на 1024 4-байтних вказівники, тепер вже на 4096 байтні блоки пам'яті, що звуться сторінками.

CR4 Використовується в захищеному режимі для контролю таких операцій як підтримка режиму віртуального 8086, дозвіл точок зупину вводу/виводу (I/O breakpoints), розширення розміру сторінки та машинний контроль за помилками апаратури (Machine-check exception (MCE)).

БітІм'яПовне ім'яОпис16FSGSBASEДозвіл інструкцій RDFSBASE, RDGSBASE, WRFSBASE і WRGSBASE14SMXESMX Enableдив. 13VMXEVMX Enableдив. Апаратна віртуалізація x8612LA575-level paging enableАктивація 5-рівневої схеми трансляції сторінок11UMIPUser-Mode Instruction PreventionЯкщо встановлено, інструкції SGDT, SIDT, SLDT, SMSW і STR не можуть виконуватися при CPL > 010OSXMMEXCPTOperating System Support for Unmasked SIMD Floating-Point Exceptionдозволяє немасковані винятки SSE.9OSFXSROperating System Support for FXSAVE and FXSTOR instructionsМає бути виставлене для використання SSE інструкцій, дозволяє швидке FPU збереження та відновлення.8PCEPerformance-Monitoring Counter enableЯкщо виставлено, RDPMC може виконуватися на всякому рівні, інакше тільки на нульовому кільці (рівень ядра).7PGEPage Global Enabled6MCEMachine Check ExceptionДозволяє, якщо виставлено, переривання машинної перевірки (machine check interrupts)5PAEPhysical Address ExtensionЗмінює макет таблиці сторінки для трансляції 32-бітної віртуальної адреси в розширену 36-бітну фізичну.4PSEPage Size ExtensionЯкщо невиставлений, розмір сторінки є 4KB, інакше - збільшений до 4MB, або, з PAE, до 2MB.3DEDebugging Extension2TSDTime Stamp DisableЯкщо виставлено, інструкція RDTSC може виконуватися тільки на кільці 0, інакше - за будь-якого рівня привілеїв.1PVIProtected Mode Virtual InterruptsДозволяє апаратну підтримку прапора віртуального переривання (VIF) в захищеному режимі.0VMEVirtual 8086 mode extensionsЯк і прапор віртуальних переривань; дозволено якщо виставлено.

CR8

Додаткові контрольні регістри в x86-64 серії EFER

Extended Feature Enable Register (EFER) — регістр, що з'явився у процесорах AMD K6. Біти цього регістра призначені для дозволу чи заборони інструкцій SYSCALL/SYSRET, керування режимом no-execute, входу/виходу в/з Long mode, та для інших системних налаштувань. Регістр виявився настільки важливим, що був адаптований і компанією Intel для своїх процесорів. Його MSR-індекс — 0xC0000080. Біт Призначення 63:12 Резервовано 11 Біт активування заборони виконання (), NXE) 10 IA-32e mode active (LMA) 9 Резервовано 8 IA-32e mode enable (LME) 7:1 Резервовано 0 System Call Extensions (SCE)

Джерела

Див. також Регістри загального призначення Тестові регістри Регістри наладки Model-specific register (MSR) Регістр стану

Посилання Intel 64 and IA-32 Architectures Software Developer’s Manual Intel IA-32 Architecture Software Developer’s Manuals AMD64 Architecture Tech Docs Cracking Open The Pentium III