TSR Programme: Wieso (ausgerechnet) 64 Words vom Stack sichern?

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Antworten
markusk
Norton Commander
Beiträge: 132
Registriert: Fr 19. Apr 2013, 11:12

TSR Programme: Wieso (ausgerechnet) 64 Words vom Stack sichern?

Beitrag von markusk »

Hallo zusammen,

Ich befasse mich gerade recht intensiv mit der Programmierung von TSR Programmen.
Sorry schon mal für die langatmige Ausführung, aber ich will einfach verstehen was da abgeht.

Als Lektüre verwende ich die Bücher „Turbo Pascal intern“ von Michael Tischer und „Das Turbo Pascal Profibuch“ von Michael Althaus. Zusätzlich hab ich auch noch die Bücher „PC intern 4“ und „Systemtuning mit TSR Programmen“ von Günter Born.

In allen Büchern bis auf das letzte von Hrn. Born wird beschrieben daß beim Kontextwechsel vom unterbrochenen Programm zum TSR Programm das Registerpaar SS:SP und 64 words vom aktuellen Stack gesichert werden müssen um den Stack nachher beim Zurückwechseln wieder restaurieren zu können.

Warum man den Stack sichern muss ist mir soweit ja auch klar - wenn man im TSR eine DOS Funktion aufruft die denselben Stack verwendet wie jene die unterbrochen wurde, wird dieser Stack überschrieben und die unterbrochene Funktion findet einen komplett veränderten Stack vor was dann zum Systemabsturz führt weil ja auch die Rücksprungadresse überschrieben wurde.

Aber warum müssen hier ausgerechnet 64 words gesichert werden und nicht z.B. 10 oder 27? Ist die 64 eine rein willkürliche Festlegung oder hat das einen tieferen Sinn?

An anderer Stelle hab ich gelesen dass unter DOS drei Stacks zu je 384 Bytes in Verwendung sind. Jede DOS Funktion verwendet einen ganz bestimmten Stack und das Reentranz Problem tritt eben genau dann auf wenn (wie zuvor angemerkt) eine Funktion von einer Funktion unterbrochen wird welche denselben Stack verwendet. Denn die überschreibt diesen dann und das führt dann zwangsläufig zum Crash wenn die Ausführung wieder an die unterbrochene Funktion zurückgegeben wird.

Wenn ich das richtig verstanden habe ist die Sicherung der 64 (?) words auch nur dann so richtig von Bedeutung wenn das TSR von der DOS Kommandozeile ausgehend aktiviert wird, die Aktivierung also vom umgeleiteten Handler für den Interrupt 28h ausgeht, da man bei Auslösung dieses Interrupts zwar davon ausgehen kann daß DOS unbeschäftigt ist (auf Eingaben wartet etc.), aber sehr wohl eine DOS Funktion unterbrochen wurde, nämlich jene die einen Idle-Zustand signalisieren wollte und deswegen den Int 28h aufgerufen hat und es hier um die Sicherung genau dieses Stacks geht.

Wenn die TSR Aktivierung von den Handlern des Int 9h oder 13h ausgeht wird durch die Abfrage des Indos Flags ja sichergestellt dass gerade keine DOS Funktion bzw. keine Funktion des Int 13h ausgeführt wird die unterbrochen werden könnte.

Wenn man sich auf der DOS Kommandozeile befindet ist das Indos Flag aber immer ungleich 0 und daher ist ja auch der neue Handler für den Int 28h nötig (um das TSR auch bei gesetztem Indos Flag starten zu können).

Ansonsten könnte man das TSR ja nie aktivieren wenn man sich im DOS Kommandozeilen Modus befindet.

Korrigiert mich bitte wenn ich das alles falsch verstanden haben sollte.
Ich hoffe auch dass mir jemand die Frage bezüglich der 64 words beantworten kann.

Lg, Markus
markusk
Norton Commander
Beiträge: 132
Registriert: Fr 19. Apr 2013, 11:12

Re: TSR Programme: Wieso (ausgerechnet) 64 Words vom Stack sichern?

Beitrag von markusk »

http://www.piclist.com/techref/dos/Stacks.htm

https://sites.google.com/site/pcdosretro/dosapinotes

Keine Ahnung ob es weiterhilft, aber sicher auch interessant in dem Zusammenhang.
Antworten