Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: falcon007de am 21. August 2008, 00:34
-
hallo leute ich hab das code von lowlevel geschrieben ,und versucht nachher ein daten segment zu schreiben ganz am ende
"mov ax ,wert mov fs ,ax"
und deswegen bosch stürzt sich ab
ich weiss nicht warum
das ist der global deskriptor
gdt_bufferseg segment use32
gdtlabel1 label byte
null_deskriptor dd 0 ;0null deskriptor
dd 0
vga_deskriptor dw 0FFFFh ;1 VGA
dw 0
db 0Ah
db 11110010b
db 0
db 0
ascii_deskriptor dw 4*512 ;2 ASCII tabele
dw 9000h
db 0
db 11110010b
db 01000000b
db 0
gdt_idt_deskriptor dw 2*512 ;3nur in level 0 kann gdt erweitern
dw 8000h
db 0
db 10010010b
db 01000000b
db 0
code0_deskriptor dw 0FFFFh ;4 CODE0 start system in pmode
dw 0h
db 0
db 10011010b
db 01000000b
db 0
daten_deskriptor dw 0FFFFh ; 5 DATA für paging
dw 0
db 0
db 10010010b
db 01000000b
db 0
stack_deskriptor dw 0FFFFh ;6 STACK paging
dw 0
db 0
db 10010110b
db 01000000b
db 0
daten1deskriptor dw 0FFFFh ; 7DATA für paging
dw 0
db 0Ah
db 10010010b
db 01000000b
db 0
gdtlabel2 label byte
gdt_bufferseg ends
*************************************************************
das code
CODE0_BUFFERseg segment use32
assume cs:CODE0_BUFFERseg
code0_label1 label dword
cli
mov ax ,5*8
mov es ,ax
mov ds ,ax
mov ax ,6*8
mov ss ,ax
mov esp ,0FFFFFFFFh
mov di ,8000h
nop
loopNull: mov byte ptr es:[di] ,0
inc di
cmp di ,8000h+3000h
jne loopNull
mov dword ptr es:[8000h] ,9000h+7 ;
;mov dword ptr es:[8000h+4] ,A000h+7
xor ebx ,ebx
xor edx ,edx
looppage: mov eax ,edx
or eax ,111b
mov dword ptr es:[9000h+ebx] ,eax
add ebx ,4
add edx ,4096
cmp edx ,4096*1024
jne looppage
mov eax,8000h
mov cr3,eax
ActivatePaging:
mov eax,cr0
or eax,10000000000000000000000000000000b
mov cr0,eax
mov ax ,7*8 hier ist der fehler aber warummmmm
mov fs ,ax
jmp $
code0_label2 label dword
CODE0_BUFFERseg ends
danke voraus für dein vorschläge
-
geht es denn ohne folgenden Code
mov ax ,7*8 hier ist der fehler aber warummmmm
mov fs ,ax
oder kommt dann der Fehler bei dem hlt? Bist du dir absolut sicher, dass du vorher im Protected-Mode bist? Ich sehe nämlich nicht, dass du die GDT laden würdest und im Cr0 das Protected-Mode Enable bit setzten würdest. Du setzt stattdessen das Paging-Enable bit, welches für das Paging im Protected-Mode zuständig ist, aber ohne vorher PageTables zu erstellen und die Adresse des PageDirectories in Cr3 einzutragen. Mir fehlt auch ein [bits 32] um dem Assembler zu sagen, dass du im PMode bist...
Von welchem der Tutorials im Magazin reden wir und va. was genau hast du übernommen/anders gemacht? Außerdem würde ich dir raten Deskriptoren mit Basis 0 und Limit 4GB zu verwenden. Das ist zum einen einfacher und zum anderen schränkt es nicht ein, da man mit Paging äquivalentes und noch mehr erreichen kann.
-
Neues Problem => neuer Thread. Ich habe das mal erledigt.