| Zeile 500: | Zeile 500: | ||
mov [Limit], WORD gdt - NULL_Desc - 1 ;Das passte leider nicht alles hintereinander</asm>So nun können wir das GDT Register laden.<asm>lgdt [gdt]</asm>So nun kommt endlich das was wir eigentlich erreichen wollen. Das schalten in den Protected Mode. So banal der folgende Code auch erscheinen mag. Er hat eine große Auswirkung und bedarf daher auch dieser ganzen Vorarbeit.<asm>mov eax, cr0 ;Das CR0 Register in EAX laden | mov [Limit], WORD gdt - NULL_Desc - 1 ;Das passte leider nicht alles hintereinander</asm>So nun können wir das GDT Register laden.<asm>lgdt [gdt]</asm>So nun kommt endlich das was wir eigentlich erreichen wollen. Das schalten in den Protected Mode. So banal der folgende Code auch erscheinen mag. Er hat eine große Auswirkung und bedarf daher auch dieser ganzen Vorarbeit.<asm>mov eax, cr0 ;Das CR0 Register in EAX laden | ||
or eax, 1 ;Das erste Bit (PE Bit) auf 1 setzen | or eax, 1 ;Das erste Bit (PE Bit) auf 1 setzen | ||
| − | mov eax | + | mov cr0, eax ;Das CR0 Register mit dem neuen Wert laden</asm>Nun befinden wir uns schon im Protected Mode. War doch ganz einfach oder? Jetzt müssen wir nur noch das CS Register laden und die Prefetch leeren. Das errichen wir mit dem folgenden Code. Es sieht zwar so aus als würden wir Variablen deklarieren, jedoch sind die Werte die wir in die Variablen schreiben das Bitmuster das ein FAR JUMP Befehl hat.<asm>db 0xea ;Bitmuster für einen FAR JUMP |
dw PMODE ;Angabe des Offsets zu dem gesprungen werden soll | dw PMODE ;Angabe des Offsets zu dem gesprungen werden soll | ||
dw 0x8 ;Angabe des Selektors für das Segment zu dem gesprungen werden soll.</asm>So nun fehlt nur noch die Deklaration des Labels PMODE. Und da wir von da an mit 32 Bit Code arbeiten teilen wir das NASM noch mit der Direktive [Bits 32] mit. Und da wir noch nix weiter an Code haben, lassen wir eine Endlosschleife laufen.<asm>[Bits 32] | dw 0x8 ;Angabe des Selektors für das Segment zu dem gesprungen werden soll.</asm>So nun fehlt nur noch die Deklaration des Labels PMODE. Und da wir von da an mit 32 Bit Code arbeiten teilen wir das NASM noch mit der Direktive [Bits 32] mit. Und da wir noch nix weiter an Code haben, lassen wir eine Endlosschleife laufen.<asm>[Bits 32] | ||