Guten Abend!
Ich habe mich beim Thema OSDev nun bis hin zum GDT durchgeforstet. Ich entwickle nebenbei einen kleinen Kernel in Pascal (dieses, weil ich mich in dieser Sprache am besten auskenne und ja nur OSDev lernen möchte und nicht gleich C). Der Kernel hat erstmal keinen weiteren Sinn, sondern soll mir helfen die Materie zu verstehen.
Als Bootloader verwende ich GRUB, welcher ja gleich den Protected Mode aktiviert und eine GDT schreibt. Diese muss nun überschrieben werden und dies wollte ich realisieren, indem ich innerhalb meines Pascal-Kernels Inline Assembler anwende.
Ich frage mich nun: Ist das überhaupt die richtige Phase der Ausführung, um das zu tun?
Und wenn ja: Wie sieht so ein ganz einfacher Code in Assembler aus, der einerseits den Null-Deskriptor+2 weitere Deskriptoren definiert und diese dann in eine neue GDT schreibt?
Die meisten Tutorials, die ich so gefunden habe beschäftigen sich mit der GDT nur in dem Zusammenhang, dass man sie schriebt, um dann in den Protected Mode zu springen. Bei der Verwendung von GRUB ist das allerdings schon geschehen...
Ich hoffe ich habe verständlich ausgedrückt, was mein Problem ist. Ich bedanke mich im Voraus für alle Antworten.
mfg, grebaldi
Ich habe mich beim Thema OSDev nun bis hin zum GDT durchgeforstet. Ich entwickle nebenbei einen kleinen Kernel in Pascal (dieses, weil ich mich in dieser Sprache am besten auskenne und ja nur OSDev lernen möchte und nicht gleich C). Der Kernel hat erstmal keinen weiteren Sinn, sondern soll mir helfen die Materie zu verstehen.
Als Bootloader verwende ich GRUB, welcher ja gleich den Protected Mode aktiviert und eine GDT schreibt. Diese muss nun überschrieben werden und dies wollte ich realisieren, indem ich innerhalb meines Pascal-Kernels Inline Assembler anwende.
Ich frage mich nun: Ist das überhaupt die richtige Phase der Ausführung, um das zu tun?
Und wenn ja: Wie sieht so ein ganz einfacher Code in Assembler aus, der einerseits den Null-Deskriptor+2 weitere Deskriptoren definiert und diese dann in eine neue GDT schreibt?
Die meisten Tutorials, die ich so gefunden habe beschäftigen sich mit der GDT nur in dem Zusammenhang, dass man sie schriebt, um dann in den Protected Mode zu springen. Bei der Verwendung von GRUB ist das allerdings schon geschehen...
Ich hoffe ich habe verständlich ausgedrückt, was mein Problem ist. Ich bedanke mich im Voraus für alle Antworten.
mfg, grebaldi

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken


Gespeichert
Letztendlich geht es dabei um Segmentierung. Im Real Mode war das einfach, da war ein Segment durch die Basisadresse definiert und fertig. Im Protected Mode ist das etwas mehr (unterschiedliche Längen, Zugriffsberechtigung und solches Zeug) und paßt nicht mehr ganz in ein 16-Bit-Register rein. Deswegen bastelt man sich eine Tabelle, wo die ganzen Informationen drinnen stehen, und die Segmentregister haben nur noch einen Verweis auf die Tabelle (ist nicht hundertprozentig korrekt, die aktuellen Segmente werden tatsächlich in versteckten Registern gehalten, die CPU greift also tatsächlich nicht ständig auf die GDT zu).