Hallo,
ein kleines Programm in C zu schreiben, welches eine Datei öffnet, die aktuelle Dateigröße ermittelt, auf ganze 512er addiert und den Inhalt (plus viele Nullbytes) wieder in eine Datei schreibt, sollte wirklich nicht zu schwer sein (fopen, fclose, read und write?). Außerdem gibt es "dd".
MS-DOS ist in Assembler geschrieben, die meisten anderen Programme für den Real-Mode in einer Hochsprache. Assembler hat den Nachteil der Unportabilität und Unlesbarkeit - es sei denn, die Kommentare machen den Gutteil des Codes aus - und Hochsprachen haben Vorteile.
Was ich bereits vorher zur Overlay- und damit indirekt auch zur Segment-Technik geschrieben habe, gilt auch weiterhin - die meisten Compiler können damit nichts anfangen und produzieren langsamen Code. Das ist dem primitiv-segmentbasierten Speichermodell geschuldet, welches einfach überholt ist. Die Compilertechnologie hat sich weiterentwickelt, diese Architektur halt nicht so recht.
Was die compilerspezifischen Sachen angeht, das betrifft den Zwischencode - den Binärcode zwischen Endergebnis und Quelltext. Der ist halt nicht universell, damit musst du leben. Das ganze gibt es dann auch noch in groß, wenn man versucht, Visual C nach gcc zu portieren oder umgekehrt. Oder Code für mein STM8-Board auf den PC. Der ist nicht nur hochgradig compilerabhängig, sondern dazu auch noch hardwarespezifisch...
Entweder, du baust dir ein vernünftiges Executable-Format, welches dir die Zerstückelung in Segmente erlaubt, oder aber du baust deinen Kernel in maximal 64K auf. Die Gedanken sind die gleichen, ob du nun ASM schreibst (und es selbst machen musst) oder ob du C nutzt (und damit den TLINK für eine EXE nutzen kannst, aber den EXE-Loader brauchst du selbst).
Ich wiederhole Erik, glaube ihm, er weiß, was er schreibt. Setz dich mit dem Linker deiner Wahl tiefgründig auseinander und informier dich über Executables verschiedener Formate.
Gruß,
Svenska