| 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! | ||
| − | </ | + | </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 | ||
| − | </ | + | </syntaxhighlight> |
==Links== | ==Links== | ||