Mit diesem Code komm ich nicht in den ProtectedMode:
Ich benutze NASM. Ich habe diesen Code 1:1 (weil ich zu faul war
) aus dem Netz (http://www.lowlevel.eu/wiki/Umschalten_in_Protected_Mode) kopiert. Mein NASM macht keine Probleme. Beim Start funktioniert alles. Sobalt ich aber die Funktion "call PMode" aufrufe passiert nichts mehr!
Danke, Florian
Code: [Auswählen]
;;; Ein kleines Beispiel, wie man in den 32-Bit Protected Mode wechselt
;;; Bei Fragen kann man sich einfach an die ICQ-Nummer 338-417-614 wenden.
[BITS 16]
org 0x0000 ; Addiert zu allen Offsets die Start-Adresse dieses Codes
cli ; Interrupts ausschalten
lgdt [gdtr] ; GDT Pointer laden
mov eax,cr0 ; In PMode wechseln, indem das niedrigste
or al,1 ; Steuerungsbit von cr0 geändert wird
mov cr0,eax ; muss über Umweg über ein anderes Register gemacht werden
jmp codesel:PMode ; FarJump zu einer 32-Bit PMode Funktion
[BITS 32]
PMode:
mov ax,datasel ; Segmentregister laden
mov ds,ax
mov ss,ax
mov esp,0x90000 ; Stack aufsetzen
jmp $ ; Endlosschleife, wird durch weiteren Code ersetzt
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; == GDT == ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
gdtr: ; Desktiptortabelle
dw gdt_end-gdt-1 ; Limit
dd gdt ; Basisadresse
gdt:
dd 0,0 ; Null-Deskriptor
codesel equ $-gdt
dw 0xFFFF ; Segmentgrösse 0..15
dw 0x0000 ; Segmentadresse 0..15
db 0x00 ; Segmentadresse 16..23
db 0x9A ; Zugriffsberechtigung und Typ
db 0xCF ; Zusatzinformationen und Segmentgrösse 16...19
db 0x00 ; Segmentadresse 24..31
datasel equ $-gdt
dw 0xFFFF ; Segmentgrösse 0..15
dw 0x0000 ; Segmentadresse 0..15
db 0x00 ; Segmentadresse 16..23
db 0x92 ; Zugriffsberechtigung und Typ
db 0xCF ; Zusatzinformationen und Segmentgrösse 16...19
db 0x00 ; Segmentadresse 24..31
gdt_end:Ich benutze NASM. Ich habe diesen Code 1:1 (weil ich zu faul war
) aus dem Netz (http://www.lowlevel.eu/wiki/Umschalten_in_Protected_Mode) kopiert. Mein NASM macht keine Probleme. Beim Start funktioniert alles. Sobalt ich aber die Funktion "call PMode" aufrufe passiert nichts mehr!Danke, Florian

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert
Woher ich das weiß? Keine Ahnung.
