Rambler's
Top100

Практическая реализация страничной адресации

Автор: lonesome TSH/Digital Daemons
Дата: .01.2003
Раздел: Разработка ОС

Приведенный ниже пример (по сути это участок программы - процедура,которая предполагает, что она находится в защищенном режиме) заполняет страницы на первые четыре мегабайта оперативной памяти и включает страничную адресацию

global enable_paging

%define PAGE_TABLE 0x105000

enable_paging:
push ebp
mov ebp, esp

;Каталог страниц будет находиться по адресу PAGE_TABLE

mov edi, PAGE_TABLE
mov eax, PAGE_TABLE+0x1007
stosd	;Первый элемент каталога указывает на нашу таблицу страниц

;Все остальные элементы не используются:
mov ecx, 1023
xor eax, eax
rep stosd

;Каждый элемент таблицы страниц указывает на соответствующий физический адрес,
;т.е. линейный адрес совпадает с физическим:
mov eax, 0x7
mov ecx, 1024
.loop:
stosd
add eax, 0x1000
loop .loop

;Загрузка адреса каталога в регистр CR3:
mov eax, PAGE_TABLE
mov cr3, eax

;Установка бита PG:
mov eax, cr0
or eax, 0x80000000
mov cr0, eax



pop ebp
ret	



Rambler's Top100