Для того, чтобы процессор мог использовать страничное преобразование, ему необходимо указать адрес начала каталога страниц (дальше он "разберётся" сам). Этот адрес хранится в регистре PDBR (Page Directory Base Register - регистр базы каталога страниц). Функцию этого регистра выполняет регистр управления CR3, т.е. PDBR - это синоним CR3.
Так как каталог страниц должен быть выравнен на границу 4Кб, его адрес будет содержать нули в младших 12 разрядах, а 20 старших, следовательно, будут нести информацию. Эти 20 разрядов и хранятся в регистре CR3. Оставшиеся 12 бит в CR3 зарезервированы, за исключением двух битов:
  • бит 3 - PWT (Write-Thorough) - сквозная запись
  • бит 4 - PCD (Cache Control) - контроль кэширования.
Эти биты будут рассматриваться в разделе "Управление кэшами", а пока мы не будем их использовать - они, вместе со всеми остальными 12-ю зарезервированными битами в CR3 будут устанавливаться в 0.
Формат CR3 приведен на рисунке:

Для того, чтобы загрузить значение в CR3, можно использовать только команду MOV (как и для всех регистров управления). Т.к. регистры управления - 32-разрядные, то вторым операндом команды MOV должен быть 32-разрядный регистр общего назначения (как правило, это EAX).
Например, установку PDBR можно произвести так:
; Значение адреса должно быть выровнено на границу 4Кб:
mov	eax, Page_Directory_PHysical_Address
mov	cr3, eax
А так можно получить текущее значение PDBR:
mov	eax, cr3
17 мар, 2021
© 2007-2022 Все киты ништяково распакованы