| Zeile 9: | Zeile 9: | ||
==Wie überprüfe ich, ob die CPU den Long Mode unterstützt?== | ==Wie überprüfe ich, ob die CPU den Long Mode unterstützt?== | ||
| − | CPUs, die den Long Mode unterstützen, setzen bei einem Aufruf der [[CPUID]]- | + | 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, [[Physical Address Extension|Physical Address Extensions]] unterstützt werden. |
| + | |||
| + | <asm> | ||
| + | mov eax, 0x80000001 | ||
| + | cpuid ; CPUID Funktion 0x8000_0001 aufrufen | ||
| + | and edx, 0x20000000 ; LM-Bit isolieren | ||
| + | test edx, edx ; Wenn EDX jetzt 0 ist, war das LM-Bit nicht gesetzt | ||
| + | jz long_unsupported ; Long Mode nicht unterstützt! | ||
| + | |||
| + | mov eax, 0x00000001 | ||
| + | cpuid ; CPUID Funktion 0x0000_0001 aufrufen | ||
| + | and edx, 0x00000040 ; PAE-Bit isolieren | ||
| + | test edx, edx ; Wenn EDX jetzt 0 ist, war das PAE-Bit nicht gesetzt | ||
| + | jz long_unsupported ; Long Mode nicht unterstützt! | ||
| + | jmp long_supported ; Long Mode unterstützt! | ||
| + | </asm> | ||
==Wie schalte ich den Long Mode um?== | ==Wie schalte ich den Long Mode um?== | ||
| − | Um in den Long Mode umschalten zu können, muss erst einmal der [[Protected Mode]] aktiviert werden. Eine weitere Voraussetzung ist | + | Um in den Long Mode umschalten zu können, muss erst einmal der [[Protected Mode]] aktiviert werden ([[Long_Mode#Es_geht_auch_anders|Es geht auch anders]]). Eine weitere Voraussetzung ist, dass das '''[[Physical Address Extension]]'''-Bit (Bit 5) im [[Control_Register#CR4|CR4]] Register gesetzt und '''[[Paging]]''' aktiviert ist. Jetzt kann der Long Mode mit dem Setzen des LME-Bits (Bit 8) im '''MSR 0xC00000080''' aktiviert werden. Im eigentlichen Long Mode befindet man sich aber erst, wenn man in ein 64-Bit-Code-Segment wechselt, das im Vergleich zu den 32-Bit-Code-Segmenten in seinem Descriptor das L-Bit (Bit 21) im 2. DWord gesetzt hat. |
| + | {{Achtung|Text=Das Paging funktioniert im Long Mode ein wenig anders als im Protected Mode. Siehe auch: [[Paging#Long_Mode|Paging im Long Mode]]}} | ||
==Links== | ==Links== | ||