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/ |