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
Mindest Stackgröße
- Daryl_Dixon
- DOS-Übermensch
- Beiträge: 1119
- Registriert: Di 30. Jun 2015, 19:35
Re: Mindest Stackgröße
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
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
Re: Mindest Stackgröße
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?
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?
- Daryl_Dixon
- DOS-Übermensch
- Beiträge: 1119
- Registriert: Di 30. Jun 2015, 19:35
Re: Mindest Stackgröße
Dazu reicht jetzt mein Fachwissen nicht mehr aus. Ich gebe die Frage weiter an Deine anderenTomCat hat geschrieben:Wird da der Stack-Pointer (SP) von DOS benutzt, oder definiert sich DOS einen eigenen Stack?
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
Re: Mindest Stackgröße
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.
Re: Mindest Stackgröße
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!
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!