von Frederik Holst Als Vorbereitung für die vielfältigen Möglichkeiten des DLI wollen wir uns aber heute doch einmal mit Grundlagen der Assemblerprogrammierung beschäftigen, und zwar mit dem Stack. Stack ist englisch und bedeutet soviel wie Stapel. Auf dem Stack werden Werte gestapelt und können von dort bei Bedarf abgeholt werden. Der Bereich des Stacks geht von 511 bis 256. Der erste Wert wird bei 511 abgelegt und der Stackzeiger um eins zurückgesetzt, das geschieht aber ganz von allein und braucht uns nicht zu beunruhigen. Das Ganze geht so weiter bis Speicherstelle 256 erreicht ist, wenn dann noch ein Wert kommt, dann wird der wieder bei 511 abgelegt, der Stackk schlägt also um. So befinden sich z.B. die Register (Akku, X, Y und andere) dort. Aber auch Rücksprungadressen werden dort gespeichert. Immer wenn Sie mit JSR eine Subroutine anspringen, dann wird der Ort, an den Zurückgesprungen werden soll auf dem Stack vermerkt. Der Stack ist auch Schnittstelle zwischen BASIC und Assembler. Wie ganz zu Anfang unserer Serie bemerkt, soll die Maschinensprache für zeitkritische Routinen eingesetzt werden. Daß diese mittels X=USR(Adresse) aufgerufen werden, wissen wir schon. Nun will man aber auch Werte an das aufgerufene Assemblerprogramm übergeben. Dies kann ebenfalls mittels des USR Befehls erfolgen. Wir schreiben uns dazu eine ganz einfache Routine: ORG $A800 LDA #0 STA 710 RTS Mit dieser Routine schalten wir den Bildschirmhintergrund schwarz. Wenn wir aber die Farbe jederzeit verändern wollen, vom BASIC aus sozusagen, was machen wir dann ? Für Stackarbeiten gibt es zwei wichtige Befehle: PLA und PHA. PLA steht für PulL Akkumulator und PHA steht für PusH Akkumulator. Mit diesen Befehlen können wir den Wert, der im Akku steht auf dem Stack abladen (PHA) oder den Wert der im Stack ist in den Akku laden (PLA) Wir wollen uns in unserem Beispiel einen Wert vom Stack holen, verändern unser Listing also folgendermaßen: ORG $A800 PLA PLA STA 710 RTS Warum denn nun zwei PLA ? Für die Theorie wäre ein PLA genug gewesen, doch unsere Routine muß ja vom BASIC aufgerufen werden mittels X=USR($A800,Y). Und BASIC erwartet immer als ersten Assemblerbefehl ein PLA, das sich auf den weiteren Programmablauf aber nicht auswirkt. Für Y können wir jeden Wert nehmen, den wir dann als Hintergrundfarbe haben möchten. In der nächsten Folge widmen wir uns wieder dem DLI und da werden wir sehen, warum der Stack auch für die DLIs wichtig ist.