Programm starten



  • Hallo,
    ich habe mir ein Tutorial angeschaut, wo erklärt wird, wie man sein eigenes kleines Betriebssystem schreibt und ich kann jetzt schon Text auf dem Monitor ausgeben und wollte jetzt mal ein Programm in C++ schreiben und das von meinem Kernel starten lassen, aber ich weiß nicht wie ich mit Assembler ein anderes Programm starten kann.
    Wäre dankbar für jede Hilfe
    MFG
    PS: Ich hab ein Image von 2 .bin Dateien gemacht und das auf Diskette geschrieben. Von Diskette wird dann mein Betriebssystem gestartet.



  • Moeglicher grober Ansatz:
    Du compilierst/linkst dein Programm als flat binary (KEINE header => keine .exe-Dateien; .com geht; darauf achten, keine Standardlibs zu verwenden, die auf nicht vorhandene Systemfunktionen zurueckgreifen) und schreibst es mit auf die Diskette. Anschliessend liesst du in deinem Kernel die Sektoren, in denen dein Programm liegt, in einen freien Speicherbereich ein, und springst zum Eintrittspunkt deines Programms (hier wuerde sich offset 0 der Datei anbieten...).



  • Könntest du das vielleicht n bisschen genauer ausführen mit dem Programm laden? Wir hatten zwar Assembler in der Schule, aber nur so die Grundsachen wie mov und jmp und sowas alles. Aber nicht so expliziet Sachen wie ich brauche. Vielleicht hast du ja auch noch n gutes Tutorial für die Assembler Grundlagen.

    Und wie soll ich das machen, dass ich keine Libs mit einbinde? Weil bei C++ werden doch immer so Standartlibs mit eingebunden oder?
    MFG



  • Desert Storm schrieb:

    Könntest du das vielleicht n bisschen genauer ausführen mit dem Programm laden? Wir hatten zwar Assembler in der Schule, aber nur so die Grundsachen wie mov und jmp und sowas alles. Aber nicht so expliziet Sachen wie ich brauche. Vielleicht hast du ja auch noch n gutes Tutorial für die Assembler Grundlagen.

    Direkt hinter dem Link hier ins Asm-Forum ist noch so ein anderer... Da steht was von FAQ drauf... 😉 😃
    Da gibt's einen Thread fuer Tutorials und einen anderen fuer OS-Dev.
    Ansonsten zum Einlesen von Daten von der Diskette mal der Hinweis: int 13h und http://www.ctyme.com/intr/int.htm

    Desert Storm schrieb:

    Und wie soll ich das machen, dass ich keine Libs mit einbinde? Weil bei C++ werden doch immer so Standartlibs mit eingebunden oder?

    Du kannst ruhig Libs einbinden, solange sie keine OS-spezifischen Funktionen enthalten. Praktisch musst du dann also die Standard-Libs fuer dein eigenes OS neu schreiben. Fuer's Erste ist es deshalb vielleicht einfacher, gar keine Libs einzubinden. 😉
    Das muss AFAIK moeglich sein, also mach' dich besser mit deinem Compiler und Linker vertraut, bzw. such' dir einen entsprechenden anderen Compiler/Linker, wenn das mit deinen momentanen Tools nicht moeglich ist. Mit GCC soll das zB. ganz gut Funktionieren. Auch dazu steht noch was in den FAQ.
    Zudem denke ich, aehnlich wie Linus T. ( 😃 ), dass auf einer solchen LowLevel-Ebene die Arbeit mit C++ wenig Sinn macht. Vielleicht solltest du dazu auf C umsatteln.


Anmelden zum Antworten