N
Hi.
CSR schrieb:
...und jedes segment darf max. 64kb gross sein.
Das hat weniger etwas mit "duerfen" zu tun, als damit, dass man nur 16Bit breite Offset-Adressen verwenden kann.
Damit laesst sich nunmal nicht mehr als 64kb adressieren.
CSR schrieb:
wie kann ich das verstehen heisst, das das das stacksegment nur 256 byte gross ist oder wie...
Eigentlich heisst das, dass dein Stapel maximal 256byte fassen kann.
Praktisch wird hierbei das Register SP mit dem Wert 256 initialisiert.
Da der Stapel nach unten waechst, wird nach 256Byte ein Ueberlauf auftreten -> der Stapel ist voll.
Der Ausdruck "Stacksegment" beschreibt in dem Zusammenhang also kein ganzes RealMode-Segment im eigentlichen Sinne, sondern nur den fuer den Stack bereitgestellten Speicherbereich.
CSR schrieb:
in meinem buch steht das wenn man diese anweisung nicht macht, dass dann der speicher automatisch auf 1024byte = 1kb gestellt wird....wieso nur 1kb, wieso nicht 64 ?
Ist eben default beim TASM und zudem eigentlich auch ganz sinnvoll so.
Mir ist bisher zumindest noch kein sinnvolles Stueck Code untergekommen, das mehr als 1kb Stack gebraucht haette.
CSR schrieb:
add bx, 2 ;PLUS 2 ? GLEICH ER ZEIGT AUF DEN TEXT ODER WIE ?
Jo.
CSR schrieb:
add bl, buffer.anz ;ZEIGT ER JETZT AUF DAS LETZTE ZEICHEN DES TEXTES ODER WOHIN ?
Fast. Er zeigt nun direkt hinter das letzte Zeichen.
CSR schrieb:
adc bh, 0 ;WIESO DAS ? ALSO WENN CARRY GESETZT IST KIREGT BH EINE 1 ZUADDIERT FÜR WAS IST DAS GUT ?
Insgesammt soll Das Byte buffer.anz auf bx addiert werden.
Das geht nunmal aber net so einfach, da bei der Instruktion "add" beide Operanden gleich lang sein muessen.
Also wird buffer.anz erstmal auf bl addiert und der Uebertrag (aehnlich schriftlicher Addition) dieser Rechnung auf bh.
Hm... Am besten, ich versuche das nochmal anhand eines Beispiels zu verdeutlichen:
Gegeben sei bl=F8h; bh=01h
bx enthaelt dann die Zahl 01F8h
Nun folgende Rechnung:
bx + 10h ergibt 0208h
=> aufgeteilt macht das bl=08h und bh=02h
Haettest du die 10h jetzt nur zu bl addiert, haettest du in bx 0108h stehen und das CF gesetzt. Mit "adc bh, 0" wird nun noch eins zu bh dazuaddiert, womit du dann in bx auch 0208h stehen haettest.