hi,
ich beschäftige mich noch nicht so lange mit OS Development und hab nun folgende Frage:
Bei einem Sprung zu meinem Kernel (bei 1 MB (0x100000) geladen) führe ich einen Far-Jump aus:
jmp codesel_kernel:0x0 ; springt zum Kernel
Im Kernel kann ich dann ganz normal Funktionen, ect. aufrufen.
aber wie ist das bei Daten/Variablen ?
wenn ich das Dataregister mit datasel_kernel fülle kann ich nicht mit im Kernel definierte Variablen zugreifen !
mov ax,datasel_kernel
mov ds,ax
und im Kernel:
mov ah,[MYBYTE]
jmp $
MYBYTE db 0
Hier wird in das Register ah nicht der Wert von MYBYTE reingeschrieben sondern irgendein anderer Wert !
Übrigens mein datasel_kernel ist wie folgt definiert:
dw 0xFFF0 ; Segmentgröße 0..15
dw 0x0000 ; Segmentadresse 0..15
db 0x00 ; Segmentadresse 16..23
db 0x92 ; Zugriffsberechtigung und Typ
db 0xCF ; Zusatzinformationen und Segmentgröße 16...19
db 0x00 ; Segmentadresse 24..31
Wo liegt der Fehler ?