Mindest Stackgröße

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Antworten
TomCat
MemMaker-Benutzer
Beiträge: 87
Registriert: Do 1. Dez 2011, 17:16

Mindest Stackgröße

Beitrag von TomCat »

Hi,

wie groß muss eigentlich das Stack-Segment sein?
Bzw. wie tief nutzen die Int 21h oder Bios-Aufrufe den Stack?
Bisher habe ich einfach ca. 10.000 Byte dem Stack bereitgestellt, obwohl ich im eigenen Code allenfalls 20 Byte benötigt habe, da meine Unterprogramm-Tiefe nicht hoch ist.
Ich will halt nicht unnötig Bytes im ohnehin geringen Adressraum (real-mode) verbraten.

THX
TomCat
Benutzeravatar
Daryl_Dixon
DOS-Übermensch
Beiträge: 1347
Registriert: Di 30. Jun 2015, 19:35

Re: Mindest Stackgröße

Beitrag von Daryl_Dixon »

Ich nehme mal an wir sprechen von einem DOS-System und nicht von Win95/98 oder so.
Den STACKS-Eintrag brauchst Du nur wenn eine bestimmte Software die Du nutzt, diesen
Eintrag benötigt (kann in den seltensten Fällen auch ein Treiber sein) oder wenn Du Fehler-
meldungen wie "Überlauf des internen Speichers" bzw "Exception Error 12" erhältst.

Ist beides nicht der Fall, würde ich ohne STACKS arbeiten. Bei Fehlermeldungen zu einem
Stapelüberlauf würde ich die Einstellung "STACKS=0,0" also Anzahl=0, Größe=0 versuchen.

Bei einem Hardware-Interrupt weist das Betriebssystem einen (1!) STACK aus der definierten
Anzahl zu. Bei einem "STACKS=0,0" geschieht dies nicht. Normalerweise fährt man damit
also am besten und man spart wie Du richtig geschrieben hast wertvollen Hauptspeicher.
Wenn Dein System mit diesem Wert Probleme haben sollte kannst Du zunächst die Werte
erhöhen oder den Eintrag mal komplett aus der Config.sys entfernen.

Standard-Wert ist 9,128

vG; Daryl_Dixon
TomCat
MemMaker-Benutzer
Beiträge: 87
Registriert: Do 1. Dez 2011, 17:16

Re: Mindest Stackgröße

Beitrag von TomCat »

Danke für die lange Antwort.

es geht mir nicht um den Eintrag in der Config.sys sondern um die Stackgröße die ich im eigenen Programm im Real-Mode definiere. Ruft mein Programm z.B. einen Int 21h auf, um z.b. auf die HDD zuzugreifen. Wird da der Stack-Pointer (SP) von DOS benutzt, oder definiert sich DOS einen eigenen Stack?
Benutzeravatar
Daryl_Dixon
DOS-Übermensch
Beiträge: 1347
Registriert: Di 30. Jun 2015, 19:35

Re: Mindest Stackgröße

Beitrag von Daryl_Dixon »

TomCat hat geschrieben:Wird da der Stack-Pointer (SP) von DOS benutzt, oder definiert sich DOS einen eigenen Stack?
Dazu reicht jetzt mein Fachwissen nicht mehr aus. Ich gebe die Frage weiter an Deine anderen
Programmierkollegen ^^. Ich würde mal aus dem Bauch raus auf Antwort (a) tippen aber das
hilft Dir natürlich auch nicht weiter..

vG; Daryl_Dixon
wobo
DOS-Guru
Beiträge: 613
Registriert: So 17. Okt 2010, 14:40

Re: Mindest Stackgröße

Beitrag von wobo »

DOS, BIOS und TSR-Programme nutzen den Stack des Hauptprogramms (Architektur-Entscheidung von IBM). PC - Intern 3.0 empfiehlt für das Hauptprogramm mindestens einen Stack von 256 byte und verwendet in den eigenen Beispiel-Programmen immer einen Stack von 512 byte. Ich würde daher 512 byte ansetzen.
TomCat
MemMaker-Benutzer
Beiträge: 87
Registriert: Do 1. Dez 2011, 17:16

Re: Mindest Stackgröße

Beitrag von TomCat »

Danke! das ist mal ne klare Aussage.

Da ich Bios-Aufruf auch von Unterprogrammen aufrufe, kann es sein, dass der Stackpointer bereits tiefer liegt darum definiere ich jetzt 1000 Byte Stack um auf der sicheren Seite zu sein.
Danke nochmal!
Antworten