Tut mir wirklich leid euch da enttäusche zu müssen, aber ich habe mir keineswegs selbst wiedersprochen. Dieser jump der zum flashen der Befehlskette dient, liegt noch im 16Bit Bereich, also kann dort auch nur ein 16Bit Offset angegeben werden. Deswegen ist 0x10000 zu gross, und deswegen kann dort auch kein dword sein. Das ist schon alles richtig so.
Das er dann zu kurz springt ist klar, weil er nur 0x0000 statt 0x10000 nimmt, deswegen ja auch dieser ganze quatsch mit deskriptor bei 0x10000 anfangen lassen, in 32 bit springen, descriptor umbauen und wieder springen, den TeeJay und ich und viele andere dort veranstalten.
Zitat TeeJay's PM-Tut:
Das Dumme ist nur, das dieser FAR JUMP eine gewisse Einschränkung hat. Wir können da nämlich nur den Selektor für das Code Segment und eine 16-Bit Offset Adresse angeben. Und genau bei diesen 16 Bit liegt unser Problem. Die meisten Leute (so wie ich) laden ihren Kernel an die Lineare Adresse 0x10000. Diese Adresse ist aber mit einem 16 Bit Wert nicht mehr erreichbar. Das heisst wir können nicht in das Code Segment springen, das ja bei der Linearen Adresse 0 beginnt und gleichzeitig zu dem Offset springen das genau hinter unserem FAR JUMP Befehl liegt. Daher müssen wir uns abhelfen. Um das Problem zu lösen, werden wir zur Laufzeit den Deskriptor für das Code Segment so umschreiben, das seine Lineare Basisadresse nicht mehr bei 0 liegt, sondern bei der Linearen Adresse an welche wir unseren Kernel geladen haben. Nämlich 0x10000.
Kurz: dieser jump ist nur eine 16:16 Kombination, keine 16:32, deswegen kein dword, kein 0x10000, nichts.
Wer hat nun recht?