Hi Rei,
das mit dem Programm zumindest war gar nicht so schwer! <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" />
(Mann, wann war das? 2. oder 3. Semester? - Zu lang her... <img src="/ubbthreads/images/graemlins/rolleyes.gif" alt="" /> <img src="/ubbthreads/images/graemlins/delight.gif" alt="" /> )
Das am Anfang verwirrende ist nur, daß der AssemblerDemoInterpreter
a. zum einen bei seinem HS halt erst mit Adressen im 900er Bereich beginnt
b. zunächst nicht genügend Hauptspeicher-Adressen zur Verfügung zu stehen scheinen.
Zu ersterem mußt Du Dein Programm entsprechend modifizieren, und zwar da wo die Adress-Zahlen Deiner 3 Speicherstellen im Quelltext vorkommen und an den Punkten an denen noch Adressen des Hauptspeichers angegeben werden.
Ich habe diesen anstatt 120, 121, 122 beim Test analog 920, 921 und 922 zugewiesen.
Folgerichtig müssen die ersten Zeilen Deines Programmes so umgeschrieben werden und ab HS-Adresse 900 im ADI eingegeben werden:
HS Inhalt
900 MOV 1
901 920
902 CJP
903 999
904 SUB 0
905 1
906 STO
907 921
...
Dabei ergibt sich auch automatisch die Lösung für Problem b. Denn sobald Du die letzte angezeigte Adress-Zeile ausgefüllt hast und "Pfeil-nach-unten" drückst, erscheint sogleich (wie von Zauberhand! <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" /> ) eine weitere usw.usf.
Kleine Anmerkung noch zur Zeile:
902 CJP
903 999 <--
Die Zahl dort ist ziemlich unerheblich und kann beliebig gewählt werden, solange sie nur außerhalb des HS-Bereichs liegt, den Dein Programm belegt (also niedriger 900, größer 922)!
Die Zahl dient nämlich nur dazu, daß das Programm an diese Adresse springt, sobald der Test des vorangegangenen Befehls positiv ausfällt.
Dieser heißt CJP, was soviel bedeutet wie "Conditional JumP", also einen bedingten Sprung.
Dies wiederum sagt aus, daß das Programm an die Adresse (hier:) 999 springt, wenn eine bestimmte Bedingung (Annahme: Test auf Gleichheit zweier Variablen) während des Ablaufs erfüllt wird.
Ich denke zumindest die eine der Vergleichszahlen ist im AC (hilft mir mal einer auf die Sprünge, bitte? Was heißt das nochmal? A... Counter? Oder doch ACcumulator?).
Die andere Speicheradresse, mit deren Inhalt CJP den Wert in AC vergleicht, konnte ich bis jetzt noch nicht ausfindig machen.
In Quintessenz ist die Funktion des CJP jedenfalls, wenn das Programm an einen Punkt kommt, an dem seine Bedingung erfüllt ist, daß er Dein Programm dann beendet (da es mit der leeren Adresse 999 zu der er springt nicht mehr weitergeht).
Es handelt sich sozusagen also um eine Art "Exit-Routine".
Sonst würde Dein Programm ewig laufen - das tut es nämlich. Es läuft in Schleifen ab dem zweiten Durchgang immer wieder von HS-Adresse 902 bis 916/917.
Diese letzteren beiden Zeilen befördert es nämlich immer wieder durch den "JMP (= JuMP) 902" an die Adresse mit dem CJP, bis eben dessen Test erfolgreich ist und er im Anschluß anstatt bei 904 weiterzumachen, an die Ende-Adresse 999 geht.
Hast Du das soweit verstanden? Ich weiß, ein klein wenig umständlich und wirr. Sorry! <img src="/ubbthreads/images/graemlins/shame.gif" alt="" />
Was die Frage der Funktionsfähigkeit des Programmes angeht, kann ich noch nichts sagen, da ich den Algorithmus noch nicht richtig geblickt habe, da Mathematik (deswegen folgte dann leider auch nur noch Semester 4 <img src="/ubbthreads/images/graemlins/rolleyes.gif" alt="" /> <img src="/ubbthreads/images/graemlins/sad.gif" alt="" /> ).
Könntest Du vielleicht nochmal auch den mathematischen Term für diese `Gauss-Formel´ posten, die hier vom Programm angeblich durchgerechnet werden soll?
Bis dahin tschüß,
Ragon, der Zahlenmagier (HUAAH! <img src="/ubbthreads/images/graemlins/rolleyes.gif" alt="" /> <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" /> <img src="/ubbthreads/images/graemlins/delight.gif" alt="" /> )