Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6318
Последний выпуск: 19.06.2015

Страничная адресация

36K
03 января 2013 года
kailot2
83 / / 15.12.2012
Подскажите что я неправильно делаю при включении страничной адресации:
Код:
;****Memory MAP****                        
;050000h    GDT
;060000h    PDE
;061000h    PTE
;070000h    Этот код
;****GDT****
;0  descr - null descriptor
;8  descr - Code Descriptor
;16 descr - Data Descriptor
;24 descr - Video Memory
org 070000h
use32
;Заполним таблицы PDE и PTE и перейдем к страничной адресации памяти
start:
mov ax,16
mov es,ax
mov edi,060000h
;es:edi  указывают на PDE
mov EAX,006107h
stosd
mov edi,061000h

mov  EAX,00000007h  ; первая запись - адрес нулевой страницы равен 0
mov  ECX,1024               ; кол-во страниц в таблице
fill_page_table:
            stosd                               ; запишем первый элемент
            add  EAX,1000h                      ; добавим 4 Кб
            loop         fill_page_table        ; и повторим для всех элементов таблицы страниц
       
            mov  EAX,060000h                    ; базовый адрес
            mov  CR3,EAX                        ; в CR3 его! (база каталога страниц ВСЕГДА должна лежать в CR3)


          mov    EAX,CR0
          or   EAX,80000000h
          mov  CR0,EAX

          ; а теперь изменить физический адрес страницы 12000h на 0B8000h
          mov    EAX,000B80007h
          mov    [ES:00006100h+012h*4],dword EAX


       mov      EDI,0120A0h ; 12000h (уже можешь считать, что это 0B8000h) + A0h
       mov      ax,0101h
       @@:
       stosw
       inc edi
       inc al
       inc ah
       jmp @b
Несколько часов пытаюсь разобраться.Когда управление передается этому коду все прерывания запрещены.
36K
03 января 2013 года
kailot2
83 / / 15.12.2012
А все раскурил, я неправильно посчитал адрес.
Из статьи:
младшие 12 бит для АДРЕСА таблицы страниц ВСЕГДА РАВНЫ нулю
а у меня было 8 бит
mov EAX,006107h поменял на mov EAX,0061007h
и mov [ES:00006100h+012h*4],dword EAX на mov [ES:000061000h+012h*4],dword EAX

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог