Theoretisch gesehen kann C auch im Realmode benutzt werden. Dafür musst du aber erstmal einen Compiler finden, der für 16-Bit-CPUs kompiliert. GCC kann das (im Moment noch) nicht. (Soweit ich weiss, sind aber Bestrebungen im Gange das einzubauen, wenn das wirklich der Fall sein sollte, dauert das allerdings noch ein bischen).
Hier möchte ich aber einmal mehr die obligatorische Empfehlung anbringen: Nimm Grub. Der schaltet dir automatisch in den Protected mode und unterstützt die wichtigsten Dateisysteme.
Hier findest du einen Beispielkernel von mir, falls du Interesse hast.
Zu 2:
Call lädt garnichts. Wenn die CPU einen call ausführt, wird lediglich die aktuelle Adresse auf dem Stack abgelegt, damit bei einem ret wieder zurück gesprungen werden kann. Danach wird zu der angegebenen Adresse gesprungen. Wenn call mit einem Fuktionsnamen benutzt wird, wird dieser vom Linker auch in die Adresse verwandelt.
Zu 3: Wenn Wenn du einen eigenen Bootloader benutzt, ist es deine Sache den Kernel dorthin zu laden, wo du ihn haben willst.
Falls du grub benutzen willst, ist es am einfachsten, dem Linker zu sagen, er soll ELF als Ausgabeformat hernehmen. Beim Linken musst du dann auch die Adresse angegeben für die der Code gelinkt werden soll. Diese Adresse wird dann auch von Grub benutzt um den Kernel zu laden.
Wie schon gesagt: Ich würde dir vom RM abraten, da dir das, was du dort lernst, im PM nicht wirklich weiterhilft. Besser gleich im PM anfangen. Soviel schwieriger sind die Grundzüge eines Kernels dort auch nicht.