Autor Thema: Wechsel in den PMode geht schief  (Gelesen 2839 mal)

falcon007de

  • Beiträge: 1
    • Profil anzeigen
Gespeichert
« 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

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 21. August 2008, 09:43 »
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.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 21. August 2008, 11:18 »
Neues Problem => neuer Thread. Ich habe das mal erledigt.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen