04 Wie arbeitet ein Malbolge-Programm?

Ein Malbolge-Programm wird in einem Speicher aus 3^10 Zellen ausgeführt. Jeder Speicherzelle enthält einen Wert zwischen 0 und 59048.

Für die Ausführung werden drei Register benötigt:

  • C ist der Befehlszeiger, der auf den aktuell auszuführenden Befehl zeigt. Das Register wird nach jedem Befehl automatisch erhöht.
  • D ist der Daten-Zeiger, der auf den aktuell zu bearbeitenden Wert zeigt. Das Register wird nach jedem Befehl automatisch erhöht.
  • A ist das Register, das für die Datenein- und ausgabe genutzt wird.

Programmausführung

Laden des Programms

Beim Laden des Programms werden Leerzeichen, Tabulatoren und Zeilenumbrüche ignoriert. Beim Beschreiben der Speicherzellen wird geprüft, ob es sich um einen gültigen Befehl handelt. Wenn nicht, wird die Ausführung abgebrochen.

Sollte beim Schreiben der Speicherbereich überschritten werden, wird die Programmausführung abgebrochen.

Nach dem Einlesen des Programms wird der verbleibende Speicherbereich mit der Crazy-Funktion gefüllt.

Initialisieren der Register

Die Register C, D und A werden auf 0 gesetzt.

Ausführen des Programm

  • Lesen der Speicherzelle C
  • Prüfen auf Gültigkeit
  • Ausführen des Befehls
  • Verschlüsseln der Speicherzelle C
  • Erhöhen von C und D

Befehle

BefehlBeschreibung
i4jump [D]Setzt den Inhalt des Befehlszeigers C auf [D]
<5out AGibt den Inhalt von A als ASCII-Zeichen aus
/23in ALiest ein Zeichen und legt den ASCII-Wert in A ab
*39rot [D]
mov A, [D]
Rotiert den Inhalt der Speicherzelle [D] um eine Stelle nach rechts und legt das Ergebnis in A ab
j40movd D, [D]Kopiert den Inhalt der Speicherzelle [D] nach D
p62D = crazy A, [D]
mov A, [D]
Wendet die crazy-Funktion auf den Inhalt der Speicherzelle [D] sowie den Wert in A an
068nopKeine Funktion
v81haltBeendet das Programm