ms-dos com datei stack



  • Schade, dass es hier keine MS-DOS-Section mehr gibt 😉
    Meine Frage ist, ob beim laden einer simplen com-datei der Stack, dh SS:SP, schon initialisiert ist oder ob ich das im Programm selbst machen muss.



  • Ein .com-Programm belegt beim Start nur ein einziges Segment, d.h. alle Segmentregister (CS,DS,ES,SS) haben denselben Wert. SP zeigt auf 0xFFFE, wo ein 0x0000 gespeichert ist, weswegen ein simples RET zu CS:0000 springt, wo sich ein simples INT 20h befindet.

    Kurz: Der Stack wächst im Codesegment von oben nach unten dem Code entgegen. Normalerweise kein Grund zur Beunruhigung. Du brauchst ihn nicht zu initialisieren oder zu verschieben.

    viele grüße
    ralph



  • Gut, also macht das das Dos schon für mich.
    Hab schon gesucht wie verrückt, aber entweder gibts keine Specs dazu oder mein Google-Fu ist einfach schlecht.



  • roflo schrieb:

    Hab schon gesucht wie verrückt, aber entweder gibts keine Specs dazu oder mein Google-Fu ist einfach schlecht.

    Das hat mich jetzt gejuckt. Tatsächlich, nicht ganz einfach. Aber Ralf Brown drückt sich nicht um eine Antwort:

    .COM-format executables begin running with the following register
    values:
    AL = 00h if first FCB has valid drive letter, FFh if not
    AH = 00h if second FCB has valid drive letter, FFh if not
    CS,DS,ES,SS = PSP segment
    SP = offset of last word available in first 64K segment

    (http://www.ctyme.com/intr/rb-2939.htm)

    viele grüße
    ralph



  • Ich danke dir für deine Mühe 🙂
    Wusste gar nicht, dass Browns Interrupt list auch was über so etwas parat hat.


Anmelden zum Antworten