OSDev

для всех
Текущее время: 29 апр 2024, 10:03

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: страничная адресация
СообщениеДобавлено: 05 дек 2013, 23:32 

Зарегистрирован: 17 окт 2013, 18:45
Сообщения: 23
решил заюзать страничную адресацию. встал вопрос: если придет прерывание, адрес обработчика будет подвергаться трансляции в физический?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: страничная адресация
СообщениеДобавлено: 05 дек 2013, 23:53 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 209
Конечно будет.
http://wiki.osdev.org/IDT - правда, там могут быть неточности, но если чего не совпадёт - IASDM ждёт тебя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: страничная адресация
СообщениеДобавлено: 07 дек 2013, 05:08 

Зарегистрирован: 17 окт 2013, 18:45
Сообщения: 23
скопипастил кодес с небезызвестной книги. чуток переработал
Код:
PM:
DESCRIPTOR_TABLE_BASE_ADDRESS equ 2*1024*1024   
DESCRIPTOR_PAGE_BASE_ADDRESS equ 10*1024*1024
   mov ax, data_sel
   mov ds,ax
   mov es,ax
   mov ss,ax
   mov esp, 7c00h

   mov eax, PM
   mov ebx, eax
   call create_PDEPTE

   mov eax, 0B8000h
   mov ebx, eax
   call create_PDEPTE

   mov eax, 0FF000000h
   mov ebx, 0B8000h
   call create_PDEPTE

   mov eax, 0
   mov ebx, 0B8000h
   call create_PDEPTE

   mov eax, DESCRIPTOR_TABLE_BASE_ADDRESS
   mov cr3, eax

   mov eax, cr0
   or eax, 80000000h
   mov cr0, eax

    ;------------------------PAGING ENABLED-------------------------
      mov esi, message1
      mov edi, 0B8000h
      mov ecx,message2-message1
      rep movsb

      mov esi, message2
      mov ecx, message3-message2
      rep movsb

      mov esi, message3
      mov ecx, end_messages-message3
      rep movsb

      jmp    $

message1 db "152535455565758595 5 5"
message2 db "A5d5r5F5F5050505050505 5"
message3 db "A5d5r5E5E5050505050505 5"
end_messages:

create_PDEPTE:
   
   pushad
;eax=virtual address
;ebx=real address
   mov edx, eax
   mov ecx, ebx
   shr eax, 22
   shr eax, 2
   mov esi, eax
   add esi, DESCRIPTOR_TABLE_BASE_ADDRESS
   
   mov eax, DESCRIPTOR_PAGE_BASE_ADDRESS
   and eax, 0FFFFF000h
   or eax, 3
   mov [esi], eax
   mov eax, edx
   shl eax, 10
   shr eax, 22
   shl eax, 2
   add eax, DESCRIPTOR_PAGE_BASE_ADDRESS
   mov esi, eax
   mov eax, ecx
   and eax, 0FFFFF000h
   or eax, 3
   mov [esi], eax
   popad
   ret

тут я по идее создаю страницу с виртуальным адресом 0FF000000h отображенную на видеобуфер
Код:
   mov eax, 0FF000000h
   mov ebx, 0B8000h
   call create_PDEPTE

НО! когда я пытаюсь выставить в edi адрес 0FF000000h и что-нибудь по нему записать - крах.
хотя так норм пишет.
Код:
mov esi, message1
      mov edi, 0B8000h
      mov ecx,message2-message1
      rep movsb

что я не учел?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: страничная адресация
СообщениеДобавлено: 07 дек 2013, 12:59 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Под адрес 0xFF000000 нужна дополнительная таблица страниц, а ты её наверно не создавал. Учти, что каждой таблице страниц соответствует небольшой участок виртуальной памяти, поэтому их нужно много, чтобы охватить всё адресное пространство.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB