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