OSDev
http://osdev.su/

страничная адресация
http://osdev.su/viewtopic.php?f=6&t=838
Страница 1 из 1

Автор:  Мотороллер [ 05 дек 2013, 23:32 ]
Заголовок сообщения:  страничная адресация

решил заюзать страничную адресацию. встал вопрос: если придет прерывание, адрес обработчика будет подвергаться трансляции в физический?

Автор:  Nable [ 05 дек 2013, 23:53 ]
Заголовок сообщения:  Re: страничная адресация

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

Автор:  Мотороллер [ 07 дек 2013, 05:08 ]
Заголовок сообщения:  Re: страничная адресация

скопипастил кодес с небезызвестной книги. чуток переработал
Код:
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

что я не учел?

Автор:  Himik [ 07 дек 2013, 12:59 ]
Заголовок сообщения:  Re: страничная адресация

Под адрес 0xFF000000 нужна дополнительная таблица страниц, а ты её наверно не создавал. Учти, что каждой таблице страниц соответствует небольшой участок виртуальной памяти, поэтому их нужно много, чтобы охватить всё адресное пространство.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/