Автор: 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