Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: Homix am 15. February 2005, 13:02
-
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 ?
-
hi,
sry für den Doppelpost aber ich hatte ien kleinen Rechtsschreibfehler drin.
der Dataselektor ist so (soll bei 1 MB starten):
dw 0xFFFF ; Segmentgröße 0..15
dw 0x0000 ; Segmentadresse 0..15
db 0x10 ; Segmentadresse 16..23
db 0x92 ; Zugriffsberechtigung und Typ
db 0xCF ; Zusatzinformationen und Segmentgröße 16...19
db 0x00 ; Segmentadresse 24..31
es scheint mit aber eher so, dass dann wenn ich folgenden Code ausführe
mov ax,datasel_kernel
mov ds,ax
dass dann der PC den nachfolgenden Code NICHT mehr ausführt !
ist ein Fehler im GDT Eintrag für datasel_kernel ?
wenn ich aber die STartadresse bei 0 lasse macht er keinen Fehler und fährt mit der Codeausführung fort !?
cu,
stefan2005
-
@stefan2005
man kann seine beträge auch editieren! (soll jetzt kein spam sein aber es ist einfach unschön wenn es zwei beiträge mit fast gleichem inhalt hintereinander gibt)
-
hi,
oh ja sry
hatte ich irgendwie übersehen und werd das nächste mal darauf achten !
zurück zum thema:
weiss jemand was ich falsch mache oder ich richtig tun muss ?
cu,
stefan2005