Long Mode — Änderungen 9850 → 11382

Zeile 9: Zeile 9:
 
CPUs, die den Long Mode unterstützen, setzen bei einem Aufruf der [[CPUID#Funktion_0x8000_0001|CPUID Funktion 0x80000001]] das [[CPUID#EDX_-_Erweiterte_Featureflags|Long-Mode-Capable-Bit (Bit 29)]] im EDX-Register auf 1. Sicherheitshalber sollte man auch noch überprüfen, ob [[Physical Address Extension|Physical Address Extensions]] unterstützt werden.
 
CPUs, die den Long Mode unterstützen, setzen bei einem Aufruf der [[CPUID#Funktion_0x8000_0001|CPUID Funktion 0x80000001]] das [[CPUID#EDX_-_Erweiterte_Featureflags|Long-Mode-Capable-Bit (Bit 29)]] im EDX-Register auf 1. Sicherheitshalber sollte man auch noch überprüfen, ob [[Physical Address Extension|Physical Address Extensions]] unterstützt werden.
  
−
<asm>
+
<syntaxhighlight lang=asm>
 
mov eax, 0x80000001
 
mov eax, 0x80000001
 
cpuid                ; CPUID Funktion 0x8000_0001 aufrufen
 
cpuid                ; CPUID Funktion 0x8000_0001 aufrufen
Zeile 22: Zeile 22:
 
jz long_unsupported  ; Long Mode nicht unterstützt!
 
jz long_unsupported  ; Long Mode nicht unterstützt!
 
jmp long_supported    ; Long Mode unterstützt!
 
jmp long_supported    ; Long Mode unterstützt!
−
</asm>
+
</syntaxhighlight>
  
 
== Aktivierung des Long Mode ==
 
== Aktivierung des Long Mode ==
Zeile 31: Zeile 31:
 
Dieser Beispielcode zeigt beispielhaft, wie man denn Long Mode aktiviert. Die hier verwendeten Pagingstrukturen sind nur provisorisch angedacht und sollten möglichst durch eigene ersetzt werden, sonst wird das Ganze ganz schnell nicht mehr ganz so schön.
 
Dieser Beispielcode zeigt beispielhaft, wie man denn Long Mode aktiviert. Die hier verwendeten Pagingstrukturen sind nur provisorisch angedacht und sollten möglichst durch eigene ersetzt werden, sonst wird das Ganze ganz schnell nicht mehr ganz so schön.
  
−
<asm>
+
<syntaxhighlight lang=asm>
 
mov eax, cr4            ; CR4 einlesen
 
mov eax, cr4            ; CR4 einlesen
 
or eax, 0x20            ; Physical Address Extension-Bit setzen
 
or eax, 0x20            ; Physical Address Extension-Bit setzen
Zeile 80: Zeile 80:
 
kernel.longmode: ; Jetzt führen wir auch endlich 64-Bit Code aus
 
kernel.longmode: ; Jetzt führen wir auch endlich 64-Bit Code aus
 
jmp $                  ; Endlosschleife xD
 
jmp $                  ; Endlosschleife xD
−
</asm>
+
</syntaxhighlight>
  
 
==Links==
 
==Links==