JASm Core – eine esoterische Programmiersprache

JASm Maschine

Bei der JASm Maschine handelt es sich um einen einfachen Computer, der die beiden JASm Befehle auswerten kann. Zusätzlich hat er einen (theoretisch) unendlichen Speicher. Die weiteren Anforderungen sind äußerst überschaubar, sodass sich die Maschine sehr leicht implementieren lässt.

Speicher und Speicheradressen

Der Speicher der JASm Maschine ist theoretisch unbegrenzt und in Speicherzellen aufgeteilt. Die einzelnen Speicherzellen fassen beliebige und beliebig große Werte, wobei es sich in der Praxis um vorzeichenbehaftete ganze Zahlen handelt.

Die Adressen der Speicherzellen sind als (positive) Ganzzahlen zu betrachten und fortlaufend aufsteigend, beginnend bei 0 angelegt. Die Speicherzelle 0 hat dabei eine gesonderte Funktion als Programmzeiger. Darüber hinaus besteht auch die Möglichkeit Speicherzellen mit negativen Adressen anzusprechen, die für weitere gesonderte Funktionen wie zur Ein- und Ausgabe reserviert sind.

Der Inhalt der Speicherzellen wird mit 0 vorbelegt, so sie nicht durch den Code bereits anderweitig definiert oder genutzt wurden.

Programmzeiger

Die Speicherzelle 0 der JASm Maschine beinhaltet die Adresse des nächsten Programmschritts. Initial sollte diese Zelle mit der Adresse des ersten Befehls beinhalten. Im normalen Programmablauf wird dieser Wert bei der Ausführung eines Befehls um drei erhöht, bzw. im Falle einer positiven Prüfung im JA Befehl durch die Sprungadresse ersetzt.

Die erste Zeile des Programmcodes wird für die Zuweisung der Speicherzelle 0 genutzt, sodass der Wert der Speicherzelle 0 mindestens 1 betragen muss.

In der zweiten Zelle (Zelle 1) ist die Schrittweite für den Programmzeiger zu hinterlegen. Üblicherweise ist dies -3. Die Schrittweite gibt den Wert an, um den der Programmzähler vor jeder Operation reduziert wird. (Drei Zellen voraus entspricht einer Reduktion um -3.)

Mit JASm kann man sowohl den Programmzeiger als auch die Schrittweite des Programmzeigers manipulieren. Beides sollte allerdings mit Bedacht geschehen. Würde die Schrittweite 0 lauten, wird sich das Programm in eine Endlosschleife an der nächsten Zelle begeben. Eine Schrittweite von 3 ließe das Programm „rückwärts“ laufen …

Zu bedenken ist, dass die nächste Adresse für das Programm bereits VOR der Ausführung der aktuellen Operation berechnet wird. Die Manipulation des Schrittweitenzählers würde demnach erst mit der nächsten Operation greifen.

Die Programmausführung wird korrekt terminiert, wenn der Programmzeiger in der Zelle 0 den Wert 0 annimmt, also auf sich selber zeigt.

Ein- und Ausgabe

Von sich aus kann die JASm Maschine keine Tastatureingabe einlesen oder Bildschirmausgabe produzieren. Dies lässt sich allerdings über einen eine Adressierung spezieller Speicherzellen realisieren.

So wird die fiktive Speicheradresse -1 zum Auslesen eines Zeichens von der Tastatur genutzt. Das Schreiben auf diese negative Adresse entspricht der Ausgabe einer Konsole.

SUB -1 3 # gibt den Inhalt der Speicherzelle 3 aus

Weitere negative Speicheradressen können theoretisch für andere Ein- und Ausgabegeräte genutzt werden.

Programmabbruch

Die JASm Maschine kennt keine fehlerhafte Anweisung, da jeder Wert als SUB (Wert <= 0) oder JA (>0) interpretiert werden kann und unbekannte Speicherzellen mit dem Wert 0 vorbelegt werden. Um einen geordneten Programmabbruch zu vollführen, muss der Programmzeiger auf sich selbst, also auf 0 gesetzt werden

SUB 0 0 # Programm beenden

Zugleich ist durch die Tatsache, dass ungenutzter Speicher mit 0 initialisiert wird, sichergestellt, dass bei einem Sprung an eine undefinierte Speicheradresse (Zelleninhalt: 0 0 0 = SUB 0 0) das Programm automatisch beendet wird.

Beispielprogramm

Das folgende Beispielprogramm berechnet die Differenz von 10 und 5. Das Ergebnis verbleibt dann in der Speicherzelle 7, in der sich zu Programmstart der Wert 10 befindet.

2       # Initialisierung des Programmzeigers, zeigt auf Zelle 2
-3      # Schrittweite des Programmzeigers
SUB 7 8 # Subtraktion der Speicherzellen 7 und 8
SUB 0 0 # Programm beenden
10      # Wert 10
5       # Wert 5

Dieses Programm sieht im Speicher der JASm Maschine vor der Ausführung wie folgt aus:

AdresseInhaltErläuterung
02Programmzeiger, Initialer Verweis auf Zelle 2
1-3Schrittweite des Programmzeigers
20SUB
38Parameter 1 für SUB
49Parameter 2 für SUB
50SUB
60Parameter 1 für SUB
70Parameter 2 für SUB
810Wert, später Ergebnis
95Wert

Laufzeitumgebung

Eine in JavaScript implementierte JASm Maschine findet sich im vierten Beitrag dieser Reihe.

Und weiter?

Damit ist das wichtigste zu JASm beschrieben. Allerdings ist das Programmieren auf dieser Ebene noch äußerst umständlich, sodass im nächsten Beitrag noch ein paar Sprachkonstrukte wie Kommentare, Adressbezeichner und ASCII Konvertierungen eingeführt werden. Diese Elemente werden durch einen Interpreter/Compiler in JASm Core Code umgewandelt, sodass sich für die JASm Maschine und den JASm Core Code hieraus keinerlei Änderungen mehr ergeben.

Inhalt

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.