Ich hab versucht ein C-Kernel zu schreiben mit Unterstützung verschiedener Tutorials, aber es funktioniert nicht, das heiß: nur der Teil der in C ist. Wenn der CALL aufruf zu ende ist und zurück gesprungen wird werden noch ASM Befehle ausgeführt. Dies funktioniert aber nur unter Bochs so beim echtem PC stürzt der Computer beim Aufruf der Main Funktion ab. Meiner Ansicht nach liegt der Fehler darin, dass die Dateien vom Linker falsch gelinkt werden, aber ich kenne mich nicht mit den Syntax des Linkers (ld.exe von Djgpp) aus. Wo kann ich genauere Beschreibungen zum Linker bekommen (alle Befehle & etc.) am besten direkte Links. Hab zwar schon etwas gefunden aber keine richtige Beschreibung.
Hier noch mal die Verlinkung die als Parameter mit dem Linker gestartet wird: (ld -T link.txt -o c32kernel.bin)
OUTPUT_FORMAT("binary")
INPUT(kernel32.obj ckernel.obj)
ENTRY(start)
SECTIONS
{
.text 0x200 : {
code = .; _code = .; __code = .;
*(.text)
. = ALIGN(1);
}
.data : {
data = .; _data = .; __data = .;
*(.data)
. = ALIGN(1);
}
.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(1);
}
end = .; _end = .; __end = .;
}