dann poste ich halt auch noch kernel16.asm:
[Bits 16]
jmp code_start
;----------------------------------------------
;---------------------Deskriptoren-------------
;----------------------------------------------
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
;----------------------------------------------
;---------------------Code Start---------------
;----------------------------------------------
code_start:
cli
mov eax,cs
mov ds,ax
;Deskriptor beginn auf 0x10000 setzten
shl eax,4
mov [CODE_Desc+2],ax
mov [DATA_Desc+2],ax
shr eax,16
mov [CODE_Desc+4],al
mov [DATA_Desc+4],al
;GDT eintragen
mov eax,cs
shl eax,4
add eax,NULL_Desc
mov [Base],eax
mov [Limit],WORD gdt - NULL_Desc - 1
lgdt [gdt]
;Start Protectdet Mode!
mov eax,cr0
or eax,1
mov cr0,eax
db 0xea
dw PMODE
dw 0x8
;----------------------------------------------
;-----------------Protected Mode---------------
;----------------------------------------------
[Bits 32]
PMODE:
mov WORD [CODE_Desc+2],0
mov WORD [DATA_Desc+2],0
mov BYTE [CODE_Desc+4],0
mov BYTE [DATA_Desc+4],0
mov eax,2
shl eax,3
mov ds,ax
mov ss,ax
mov es,ax
mov eax,0
mov fs,ax
mov gs,ax
mov esp,0x1FFFFF
jmp 0x8:0x10000 + PMODE2
PMODE2:
jmp END
times 512-($-$$) db 0
END:
Dachte wenn ihr [Bits32] seht könnt ihr euch schon denken dass ich bereits einen Stack im 16-Bit Code hatte. Oder muss ich den Stack neu initialisieren? Bei Bochs gehts ja auch so (ist ja auch nur ein Emulator).