hi,
ich habe (glaube ich) eine kleines problem beim paging. ich habe folgenden code:
%define PAGE_SIZE 4096
%define PAGE_DIR_ENTRIES 1024
%define PAGE_TABLE_ENTRIES 1024
[section .text]
setup_paging:
pusha
; setup page table
mov eax,0x03; address
xor ecx,ecx ; count
.loop1:
mov [page_table+4*ecx],eax
add eax,PAGE_SIZE
inc ecx
cmp ecx,PAGE_TABLE_ENTRIES
jl .loop1
; setup page dir
mov eax,page_table
or eax,0x02
xor ecx,ecx
.loop2
mov [page_dir+4*ecx],eax
inc ecx
cmp ecx,PAGE_DIR_ENTRIES
jl .loop2
or eax,0x03
mov [page_dir],eax
mov [page_dir+4],eax
mov [page_dir+8],eax
mov [page_dir+12],eax
; enable pageing
mov eax,page_dir
mov cr3,eax
mov eax,cr0
or eax,0x80000000
mov cr0,eax
popa
ret
[section .bss]
align 4096
page_dir: resd 1024
align 4096
page_table: resd 1024
wenn ich jetzt auf den auf die 4 page_dir eintraege zugreife, funktioniert das. aber beim 5. eintrag (present=0) bekomme wie erwartet eine page fault exception und danach gleich eine gerneral protection exception (die ich mir nicht wirklich erklären kann). hat jemand eine idee woran das liegen kann?