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.