Ich glaube dir ist nicht ganz klar, was genau es bedeutet in den Real Mode zu springen. Im Real Mode kannst du nur Speicher bis 1 MB adressieren. Bei der Adressierung werden 16-Bit Segment und 16-Bit Offset miteinander über Segment * 16 + Offset zur linearen Adresse verrechnet. Dein Kernel ist nach 0x100000 gelinkt, was bedeutet, dass sich der Code über 1 MB befindet. Es ist also nicht möglich diese Adresse des Codes mittels Segment und Offset dazustellen.
Wenn dein Code vom Protected Mode in den Real Mode springt, und die CPU noch Code über 1 MB ausführt, wird sie nach dem Sprung irgendeinen anderen Code ausführen und dein System stürzt ab. Das heißt du musst bevor du in den Real Mode wechselst bereits an eine Adresse unter 1 MB springen. Und um deinen Code dahinzubekommen, musst du ihn dahin kopieren.
Ich rate dir allerdings dazu, erstmal nicht weiter zu versuchen in den Real Mode zu springen. Du musst für einen kompletten Sprung hin und zurück wesentlich mehr Aufwand treiben, als diese 20 Zeilen im Schnipsel von osdev.org suggerieren.