ich weiß nicht ob ich hier eine Chance auf eine Antwort habe,
aber ich versuche es dennoch.
Leider googlet man sich zu diesem Thema einfach "tod".
Es gibt gefühlt tausende Ansätze für die versch. Prozessrorarchitekturen,
mit oder ohne OS, versch. fertige Bootloader (grub, ..) usw. und so fort.
So aber nun mal "back to scratch"
Ich möchte für ein proof of concept projekt ein kleines OS schreiben.
Natürlich, sowie wahrscheinlich fast die meisten nicht gern in Assembler.
Die Entwicklung findet auf einem Linux-System statt.
Ein funktionierender Bootloader in Assembler x86_64 existiert bereits.
Compiliert wird die asm Datei mit nasm (binary output).
Die CPU Emulation erfolgt mit qemu-system x86_64.
Nun habe ich mehrmals gelesen, dass in Assembler via call eine "Funktion"
aufgerufen werden kann.
Also habe ich folgendes versucht (und auch oft im Internet gelesen):
kernel.cpp
Code:
void start_kernel() {
// ...
}
Code:
call start_kernel ; boot-loader loop: jmp loop times 510-($-$$) db 0 ;magic number dw 0xaa55
Habe auch einiges über das "linking" gelesen, allerdings meist spezifisch
für andere vorgefertigte Bootloader wie grub oder mit Verwendung von Linux oder windows...
Also meine gründsätzliche Frage ist nun:
Man muss doch sicherlich die c++ funktion irgendwo aus dem Speicher herraus über Assembler ansprechen oder? Wie genau klappt das, bzw erfolgt das nicht bei der compilierung der asm Datei oder beim Linking? Wie genau dieses Linking funktioniert weiß ich teilweise..zu mindestens wie ich mit gcc eine C++ "linke"... :S
Ich trete seit 2 Tagen nun einfach nur noch auf einem Punkt herum und komm nicht wirklich dahinter, wie ich nun vorgehen muss... Kann mir also evt. jemand sagen wie ich "möglichst primitiv" über Assembler x86_64 eine C++ Funktion ansprechen kann? Dabei ist zu beachten das das aufzurufende Assemblerscript gleichzeitig der Bootloader ist. Das ich in C++ dann sowas wie iostream oder fstream nicht verwenden kann ist mir bereits klar. Trotzdem ist es wenigstens lesbarere Code als Assembler. Denke auch das ein Kernel bzw OS in C++ deutlich schneller zu programmieren ist als eins mit Assembler
Hoffe mir kann dabei vielleicht jemand helfen.
Und bitte tut mir einen Gefallen, bevor ihr mir Links zu Google-Seiten schickt.
Lest sie euch bitte selber erst kurz durch ob das zu dieser Problematik passt.
Denn ich habe schon mehrere hundert Seiten offen gehabt
Eine Titelseite zu einem Problem sagt diesbezüglich leider meist wenig aus.
lg, frohe Weihnachten und schon mal frohes West.
Ist ja nicht mehr lang ..








