hier der code für die gdt:[BITS 16]
jmp start
NULL_DESC:
dd 0
dd 0
CODE_DESC:
dw 0xFFFF
dw 0
db 0
db 0x9A
db 0xCF
db 0
DATA_DESC:
dw 0xFFFF
dw 0
db 0
db 0x92
db 0xCF
db 0
gdt:
Limit dw 0
Base dd 0
start:
call EnableA20Gate
bt eax, 1
jz PMODE_start
PMODE_start:
cli
mov eax, cs
mov ds, ax
shl eax, 4 ;EAX beinhaltet immer noch den Wert von CS (siehe letzten Codeabschnitt)
mov [CODE_DESC+2], ax ;Den ersten Teil der Linearen Adresse eintragen
mov [DATA_DESC+2], ax
shr eax, 16
mov [CODE_DESC+4], al ;Den zweiten Teil der Linearen Adresse eintragen
mov [DATA_DESC+4], al
mov eax, cs
shl eax, 4
add eax, NULL_DESC
mov [Base], eax
mov [Limit], WORD gdt - NULL_DESC - 1
lgdt [gdt]
mov eax, cr0 ;In den Protected Mode schalten,
or eax, 1 ;indem Bit 0 des CR0 Registers auf 1
mov cr0, eax ;gesetzt wird
db 0xea ;FAR-JUMP zum Codesegment
dw PMODE
dw 0x8
Vielleicht sollte ich erwähnen, dass er die GDT lädt und in den PM schaltet
(hab ich durch setzen von hlt's rausgefunden). Aber dann hakt er beim
FAR JUMP.