Hallo,
nachdem die GDT erstellt wurde und der GDT Pointer über lgdt gesetzt wurde, müssen ja noch die Segmentregister zurückgesetzt werden.
Das geht ja mit folgendem Code:
asm volatile(
"mov $0x10, %ax;"
"mov %ax, %ds;"
"mov %ax, %es;"
"mov %ax, %ss;"
"ljmp $0x8, $.1;"
".1:"
);
Nur verstehe ich noch nicht ganz was da gemacht wird.
Also 0x10 ist ja der Offset zu dem Kernel-Datensegment.
Nachdem dieser gesetzt wurde, mache ich dann einen long jump in mein Kernel-Codesegment (wieso genau? wo läuft mein Programm weiter?)
Hier verstehe ich nicht so ganz, was die vorletzte und die letzte Zeile bzw. $.1 und .1: bedeuten.
Vielleicht kann mir ja jemand weiterhelfen.
Gruß
Klaus55