tasm und pure binary file ?



  • hallo

    wollte fragen ob man mit tasm auch pure binary files erstellen kann ?
    damit ich den code per bootloader starten kann..

    ansonsten muss ich alles in nasm umschreiben ..

    mfg
    haMMer



  • Hi.

    So direkt geht das nicht.
    Mit TASM kannst du .com-Dateien erstellen (Model tiny; org 100h), die praktisch nichts anderes als binary files sind.
    Da hast du es jedoch, wenn du es assemblierst ohne die absoluten Offsets im gesammten Programm zB. via Macro entspr. zu verbiegen, mit den Einschraenkungen eines .com-Programms zu tun.
    Aber wenn der mit TASM erzeugte code von einem Bootloader nachgeladen wird, sollte es kein Problem darstellen, das Teil entsprechend in den Speicher zu laden. (dh. der Codeentrypoint muss bei 100h liegen und ds=es=cs=ss usw.)



  • warum muss ds=es=cs ?
    meinst du den protected mode ?

    ausserdem gibts doch probleme wenn ich den hexacode einer exe-datei byteweise
    auf diskette mach und den per bootloader in den speicher verschieb oder ?

    warum muss der codeentrypoint 0100h sein ?

    mfg
    haMMer



  • Hat den Anschein, als waerst du noch nicht mit dem DOS .com-"Format" vertraut.

    Dann werde ich mal eine Kurze Uebersicht geben:
    Es handelt sich hierbei im Grunde genommen um ein einfaches binary file, ohne Header o.ae. (also KEINE .exe)
    Zu allen Absoluten Offsets wird 100h addiert.
    Das hat folgenden Grund:
    DOS Packt als default alle Daten eines .com-Programms in ein Segment. (Deshalb werden beim Start auch alle Segmentregister gleich cs gesetzt und so ein Teil kann auch nicht groesser als 64KB-100h sein)
    Die Offsets 0-100h dieses Segments reserviert sich DOS und packt dort zB. die Commandline rein.
    Folglich koennen Programmcode und hinterher noch sonstige Daten erst ab Offset 100h dieses Segments beginnen.
    Und welch Zufall: Genau bei diesem Offset 100h liegt auch der Codeentrypoint eines .com-Programms.

    Den Speicher richtet DOS also folgendermassen ein:

    Irgend ein 64k Segment im Realmode:
    +-Offset 0----+
    |   PSP       |
    +-Offset 100h-+ <--entry point
    | Programm-   |
    |   Code      |
    |   ...       |
    | und irgendwo|
    |  auch Daten |
    +-------------+
    +-------------+
    | Stack       |
    +-Offset FFFEh+
    

    Um Verwirrung vorzubeugen: Der Code und weitere Daten, die von DOS dann zum Offset 100h geladen werden, beginnen natuerlich schon ganz am Anfang der Datei - also bei Offset 0. 😉



  • Wollte nur sagen, dass ich mich auch mit den ganzen Win Kompilieren rumgeargert hab weil sie keine Binaries erstellen wollten/konnten.
    Unter Linux hats dann super funktioniert auch fuer C,C++ Programme.

    Also falls du ein Linux oben hast...


Anmelden zum Antworten