JASm Coding – Beispielprogramme 1 (Sprung, Addition, Multiplikation , Ausgabe und Funktion)

Bislang wurden die Kernelemente von JASm Core sowie einige hilfreiche Sprachelemente vorgestellt. Dies wurde an zweckdienlichen Beispielen präsentiert, doch noch steht unter anderem auch noch der Nachweis aus, dass die zwei Befehle SUB und JA tatsächlich ausreichend sind, um komplexere Aufgaben zu bewältigen.

In diesem Beitrag sollen nun einige weitergehende Codebeispiele dargestellt werden. Die Beispiele bauen in vielen Fällen aufeinander auf und nehmen so in ihrer Komplexität jeweils zu. Es ist auch in einigen Fällen nicht immer der effizienteste Lösungsansatz gewählt worden, da es hier immer noch um die Vermittlung der Sprache geht.

Sprünge

Zunächst einmal soll die Möglichkeit von unbedingten Sprüngen im Programm dargestellt werden. Mit dem JA Befehl existiert bereits ein bedingter Sprung (Bedingung: Wert größer als null). Für den unbedingten Sprung bieten sich unter anderem die beiden folgenden Optionen an.

Unbedingter Sprung – absolut

Der unbedingte Sprung an eine andere Stelle im Programm lässt sich recht einfach bewerkstelligen. Hierzu wird die Tatsache ausgenutzt, dass die Speicherstelle 0, die den Programmzeiger beinhaltet, nie 0 oder negativ sein kann, außer in dem Moment, wo das Programm kontrolliert enden soll.

Aus diesem Grund kann mit dem Sprungbefehl JA eine einfache Überprüfung eben dieser Adresse vorgenommen werden, die in jedem Fall positiv verläuft und damit einen Sprung an die angegebene Zieladresse veranlasst werden.

JA 0 @a

Hierdurch erfolgt in jedem Fall ein Sprung zur Speicherzelle a, da der Wert der Zelle 0 immer positiv (also größer null) ist.

          @Start      # Initialisierung des Programmzeigers
Step:     -3          # Schrittweite des Programmzeigers
Start:    JA 0 @Start # Endlosschleife

Dieses Beispiel realisiert die kürzeste Form einer Endlosschleife. Nach Austausch der Textmarken durch den Interpreter lautet der Code wie folgt:

Adresse(n)InhaltErläuterung
02Initialisierung des Programmzeigers
1-3Schrittweite des Programmzeigers
2-4JA 0 2Endlosschleife

Unbedingter Sprung – relativ

Eine andere Möglichkeit stellt die Manipulation des Programmzeigers durch den SUB Befehl dar. Hierdurch lassen sich relative Sprünge abbilden, also nicht der Sprung auf eine dedizierte Adresse, sondern um eine relative Distanz.

          @Start       # Initialisierung des Programmzeigers
Step:     -3           # Schrittweite des Programmzeigers
three:    3            # Konstante three, belegt mit 3
Start:    SUB 0 @three # Endlosschleife

Auch dieses Programm stellt eine Endlosschleife dar, bei der der Programmzeiger, der vor der Ausführung des Befehls in der Maschine um drei erhöht wird, durch den Befehl selber um diese drei wieder reduziert wird und damit wieder auf den SUB Befehl zeigt.

Nach Übersetzung der Textmarken sieht das Programm wie folgt aus:

Adresse(n)InhaltErläuterung
03Initialisierung des Programmzeigers
1-3Schrittweite des Programmzeigers
23Konstante three, belegt mit 3
3-5SUB 0 2Endlosschleife

Addition

Als Rechenoperator kam bislang lediglich die JASm-eigene Subtraktion SUB zum Einsatz. In diesem Beispiel soll nun gezeigt werden, wie eine Addition realisiert werden kann. Hierbei wird die Addition von Werten wird durch doppelte Subtraktion realisiert, da folgendes gilt:

a+b = a-(-b)

Der Quellcode lautet in JASm entsprechend

SUB @c @b
SUB @a @c

Als vollwertiges Programm bei dem die Summe von 10 und 5 ermittelt wird, sieht der Quellcode dann wie folgt aus:

          @Start    # Initialisierung des Programmzeigers
Step:     -3        # Schrittweite des Programmzeigers

REM Variablendefinition

a:        10        # Wert für a, hier: 10
b:        5         # Wert für b, hier: 5
c:        0         # Wert für c, initialisiert mit 0

REM Additionsroutine

Start:    SUB @c @b # c = c - b
          SUB @a @c # a = a - c
          SUB 0 0   # Programm beenden

Das Ergebnis der Addition befindet sich dann in der Zelle 1 (@a). Die Variable c dient hier nur als temporäre Variable um das Vorzeichen von b umzukehren.

Der Interpreter wird den mit Adressen versehenen Code wie folgt übersetzen:

Adresse(n)InhaltErläuterung
05Initialisierung des Programmzeigers
1-3Schrittweite des Programmzeigers
210Wert für a, hier: 10
35Wert für b, hier: 5
40Wert für c, initialisiert mit 0
5-7SUB 4 3c = c – b
8-10SUB 2 4a = a – c
11-13SUB 0 0Programm beenden
Beitrag vorlesen lassen

Kommentar hinterlassen

Nutze dieses Kommentarfeld um deine Meinung oder Ergänzung zu diesem Beitrag kundzutun. Verhalte dich bitte respektvoll und höflich! Kommentare werden vor der Veröffentlichung in der Regel moderiert und bei Verstößen gegen geltendes Recht, die guten Sitten, fehlendem Bezug oder missbräuchlicher Verwendung nicht freigegeben oder gelöscht.
Über die Angabe deines Namens, deiner E-Mail Adresse und deiner Webseite freuen wir uns, doch diese Felder sind optional. Deine E-Mail Adresse wird dabei zu keinem Zeitpunkt veröffentlicht.

Um mit dem Betreiber dieser Seite nicht-öffentlich in Kontakt zu treten, nutze die Möglichkeiten im Impressum.