Abgabe: Dienstag, 22. Juli 1999
Jan Beinersdorf
Susanne Stärz
Übungsgruppe B
Algorithmische Idee:
Vor der eigentlichen Interpretation
des Programmes muß eine lexikalische und eine syntaktische Analyse
durchgeführt werden. Die lexikalische Analyse wird durch das Programm
aus Programmierübung P1 behandelt.
Die syntaktische Analyse (syntax.class)
wird wieder anhand eines Deterministischen Endlichen Automaten durchgeführt.
Aus einer Eingabedatei eingabe werden Zeichen für Zeichen die
Lexeme, die in der lexikalische Analyse erstellt wurden, ausgelesen und
dadurch der Zustand der DEA beeinflußt. Zusätzlich werden zwei
neue Dateien vars (*.var) und labels (*.lab) angelegt, die
nacheinander alle Variablen bzw. Marken und deren Adersse enthalten. Diese
Dateien übernehmen später die Aufgabe der Symboltabelle.
Die syntaktische Analyse ist
erfolgreich, wenn alle im Buch von Klaeren beschriebenen Befehle die korrekte
Anzahl und Art von Parametern haben und keine unzulässigen Befehle
oder Zeichen gefunden werden.
Der Interpreter liest aus den
drei oben genannten Dateien (eingabe und
symbole) die Befehle
aus und speichert sie in ein zweidimensionales Array RAM von variabler
Länge und vier Spalten, wobei die erste Spalte den Befehl enthält
und die folgenden drei dessen Parameter; zugleich werden die Adressen der
Marken und Variablen decodiert und fest als 32-bit Integer als Parameter
der Sprungbefehle im Speicher abgelegt. Die Compilerbefehle 21 (VAR) und
22 (LABEL) werden ignoriert, da sie nicht mehr gebraucht werden.
Der eigentliche Interpretationsvorgang
findet in der Methode RunStep() statt, die zugleich einen Wahrheitswert
zurückgibt, der anzeigt, ob der Befehlszähler ip auf –1
zeigt. Dies bedeutet, daß das Programm erfolgreich beendet wurde.
Die Methode ließt den Befehl und dessen Parameter an der Speicherstelle
ip aus und entscheidet dann, welche Operation auszuführen ist.
Zu beachten ist hierbei, daß die Speicherstellen im Ram und im noch
nicht übersetzten Programm um den Wert 1 voneinander abweichen; d.h.
daß die Stelle RAM[0][x] im Programm die Zeile 1 repräsentiert
usw. Beim Ladevorgang und während der Ausführung wird diese Abweichung
jedoch kompensiert, so daß die Programme nicht besonders modifiziert
werden brauchen. Während der Ausführung werden evtl. der Datenstapel
delta und/oder der Prozedurstapel pi verändert. Die
Befehle 17 (READ), 18 (WRITE) und 24 (OUT1)) bewirken eine Ausgabe
auf dem Bildschirm. READ erwartet zusätzlich eine Eingabe von der
Konsole. Jeder ausgeführte Befehl wird in der Variablen
letzterBefehl
dokumentiert, mit samt einer evtl. auftretenden Veränderung der Stapel
etc. Diese Variable dient dazu, eine Ausgabe in die Datei TraceAusgabe
(*.trc) zu machen, falls dies vom Benutzer in der Variablen TraceMode
verlangt wird.
Sowohl beide Analyseprogramme
als auch der Interpreter funktionieren unabhängig voneinander. Das
Programm alles.java faßt diese Programme zu einem zusammen; diesem
wird lediglich eine sm-Datei als Parameter angegeben.
1) Folgende neue Befehle wurden von mir zusätzlich implementiert:
OUT [delta=d1.d2....dn.x] D [ip=i] } [delta=d1.d2....dn] D [ip=i+1] Ausgabe: x als Unicode-Zeichen
RAT [delta=d1.d2....dn.x.y] D [ip=i] } [delta=d1.d2....dn] D [ip=i+1] Ausgabe: x/y als doppelt genaue
AND [delta=d1.d2....dn.x.y] D [ip=i] } [delta=d1.d2....dn.(x and y)] D [ip=i+1] (bitwise and)
OR [delta=d1.d2....dn.x.y] D [ip=i] } [delta=d1.d2....dn.(x or y)] D [ip=i+1] (bitwise or)
XOR [delta=d1.d2....dn.x.y] D [ip=i] } [delta=d1.d2....dn.(x xor y)] D [ip=i+1] (bitwise xor)
NOT [delta=d1.d2....dn.x] D [ip=i] } [delta=d1.d2....dn.x] D [ip=i+1] (bitwise not)
SHL [delta=d1.d2....dn.(x0.x1...x30.x31)] D [ip=i] } [delta=d1.d2....dn.(x1...x30.x31.0)] D [ip=i+1] (shift left)
SHR [delta=d1.d2....dn.(x0.x1...x30.x31)] D [ip=i] } [delta=d1.d2....dn.(0.x0.x1...x30)] D [ip=i+1] (shift right)
BITCMP [delta=d1.d2....dn.(x0.x1...x30.x31).y] D [ip=i] } [delta=d1.d2....dn.1] D [ip=i+1] falls xy=1
Folgende neue Kompilerbefehle
wurden zusätzlich von mir implementiert:
$“Nachricht“ erstellt ein Reihe von CONST-Befehlen, die in umgekehrter Reihenfolge die Werte von Nachricht auf den Datenstapel schreiben; das erste Zeichen ist 0, woran das Ende der Zeichenkette erkannt werden kann.
Spezifikation
der Klasse alles.java:
Deklarationen:
Typen:
prozedur - ein Aktiverungsblock, der Rücksprungadresse rueck, Niveaudifferenz level und ein variables
eindimensionales Array vars für lokale Variablen beinhaltet.
prozedurstack - ein Stapel, der Aktivierungsblöcke beinhaltet, die durch vor verknüpft sind
datenstack - ein Stapel,
der Integerwerte i aufnimmt und durch vor verknüpft ist
Methoden:
String prozedurstack.allout(prozedurstack pi) - gibt alle Aktivierungsblöcke des Stapels pi als Zeichenkette
zurück
String datenstack.allout(datenstack d) - gibt alle Daten des Stapels d als Zeichenkette zurück
void sm_inter.main(String[] parameter) - das Hauptprogramm des Interpreters, wird in alles.class nicht
verwendet
void sm_inter.Fehler(int i) - produziert einen Laufzeitfehler i und beendet das Programm
prozedurstack sm_inter.base(int n,prozedurdtack p) - folgt des statischen Links im Datensack p bis zur Tiefe n
int sm_inter.ReadConInt() - ließt ein Integer von der Tastatur und gibt es zurück
boolean sm_inter.RunStep() - führt den nächsten Befehl an ip aus und gibt true zurück, wenn ip!=-1
void sm_inter.RamToString() - Wandelt den Speicherinhalt in ein Array aus String um und legt dieses in
programm ab
void sm_inter.openLext(String[] parameter) - ließt die Datei parameter[0]+“.lex“ in den RAM[][], entfernt dabei VAR und LABEL und decodiert Adressen. RAM[][] enthält dann ein vollständiges und ausführbares
SM-Programm
int sm_inter.getAdr(int sym,String datei) - Sucht das Lexem sym in der Datei datei und gibt dessen Adresse
zurück, wenn es gefunden wurde
int syntax.readLex(RandomAccessFile eingabe) - ließt ein Zeichen aus der Eingabedatei eingabe
int syntax.syntaktischeAnalyse(String[] parameter) - das eigentliche Hauptprogramm, legt die Ausgabedateien
vars und labels an, analysiert die Lexeme in parameter[0]+“.lex“. Gibt die Anzahl der Zeilen zurück, die
nicht LABEL oder VAR einhielten.
void syntax.main(String[] parameter) - das Hauptprogramm, ruft nur syntaktischeAnalyse auf und wird im
alles.class
nicht benutzt.
Konstanten:
int
sm_inter.normaleGroesse=999
- falls keine Ram-Größe angegeben wird, benutze diesen Wert
Eingabe:
syntax.eingabe - Eingabedatei zur Syntaxanalyse
sm_inter.eingabe - Eingabedatei für den Interpreter
sm_inter.TraceAusgabe
- Ausgabedatei für Befehle im TraceMode
Vorbedingungen:
syntax.eingabe
und
sm_inter.eingabe - lexikalisch analysiertes SM-Programm
Ausgabe:
syntax.vars - Ausgabedatei für Variablen
syntax.labels
- Ausgabedatei für Labels
Spezifikation der Klassen und Methoden für Teilprobleme:
Die lexikalische Analyse wird
durch die Klasse analyse.class durchgeführt. Deren Spezifikation wurde
bereits in Programmieraufgabe P1 besprochen.
Klasse syntax:
Führt
die syntaktische analyse durch.
Methode int ReadLex(RandomAccessFile einagbe)
Gibt das nächste Lexem der Eingabedatei zurück.
Eingabe: eingabe - die zu lesende Datei
Ausgabe:
des nächste Lexem als Integer, oder Laufzeitfehler bei einem Dateifehler
Methode int syntaktischeAnalyse(String[] parameter)
Öffnet die Ein- und Ausgabedateien und führt die Analyse durch.
Eingabe: parameter - die dem Programm übergebenen Parameter, wobei aus parameter[0] die Namen der Ein- und Ausgabedatei gebildet werden.
Ausgabe:
die Anzahl der SM-Befehle in der Eingabedatei (ohne Label- und Var-Befehle),
evtl. diverse Laufzeitfehler
Methode void main(String[] parameter)
Ruft syntaktischeAnalyse auf.
Eingabe: parameter - s.o.
Ausgabe:
keine
Klasse sm_inter:
Interpretiert
das SM-Programm.
Klasse prozedur:
Ein Aktivierungsblock.
Konstruktor prozedur(int r, int l, int[] v)
Initialisiert den Aktivierungsblock mit den angegebenen Werten.
Eingabe: r - Rücksprungadresse, l - Niveaudifferenz, v - lokale Variablen
Ausgabe:
das neue Element
Klasse prozedurstack:
Der Prozedurstapel.
Konstruktor prozedurstack(prozedurstack int v,int r, int l, int[] var)
Erzeugt einen neuen Aktivierungsblock mit den angegebenen Werten.
Eingabe: r - Rücksprungadresse, l - Niveaudifferenz, var - lokale Variablen, v - Vorgänger
Ausgabe:
Stack mit einem neuen Element
Methode String allout(prozedurstack pi)
Gibt alle auf dem Stapel befindlichen Elemente als ein String zurück, das oberste zuerst. Die Ausgabe ist also von links nach rechts zu lesen. (Im Buch von Klaeren steht das neueste Element hingegen am weitesten rechts.)
Eingabe: pi - das Element, von dem ab ausgegeben werden soll (in diesem Programm grundsätzlich das Oberste)
Ausgabe:
alle Elemente des Stacks in der Form <Adr.Niveau.(lokVar1,...,lokVar2)>...
Klasse datenstack:
Der Datenstapel.
Konstruktor datenstack(datenstack v, int neu)
Erzeugt ein neues Element auf dem Datenstapel und initialisiert es.
Eingabe: neu - neues Element, v - Vorgänger
Ausgabe:
der Stack mit einem neuen Element.
Methode String allout(datenstack d)
Gibt alle auf dem Stapel befindlichen Elemente als ein String zurück
Eingabe: d - das Element, von dem ab ausgegeben werden soll (in diesem Programm grundsätzlich das Oberste)
Ausgabe:
alle Elemente des Stacks
Methode void main(String[] parameter)
Ruft die Methoden openLex, RamToString und RunStep auf und führt so die Interpretation durch.
Eingabe: parameter - Programmparameter, aus parameter[0] wird der Dateiname der Eingabedatei abgeleitet
Ausgabe:
Interpretation eines SM-Programms oder Fehlermeldungen
Methode void Fehler(int i)
Beendet das Programm mit einem Laufzeitfehler
Eingabe: i - eine Fehlernummer zwischen 16 und 23 (einschließlich)
Ausgabe:
Laufzeitfehler
Methode prozedur base(int n, prozedurstack p)
Findet einen bestimmten Aktivierungsblock im Prozedurstapel.
Eingabe: n - gewünschte Niveaudifferenz, p - der Prozedurstapel
Ausgabe:
der gesuchte AB, oder eine Fehlermeldung, falls es diesen nicht gibt (z.B.
p=null wird)
Methode int ReadConInt()
Ließt einen ganzzahligen Wert von der Tastatur.
Eingabe: keine
Ausgabe:
ein Integer oder eine Fehlermeldung, falls das Lesen scheitert, oder 0
falls ungültige Eingabe
Methode boolean RunStep()
Führt den nächsten (durch ip angegebenen) SM-Befehl aus.
Eingabe: keine
Ausgabe:
true, falls es noch weitere Befehle gibt (ip!=-1), sonst false
Methode void RamToString()
Wandelt den in RAM[][] gespeicherten Arbeitsspeicherinhalt in ein Array von Strings um.
Eingabe: keine
Ausgabe:
keine
Methode void OpenLex(String[] parameter)
Dimensioniert den Speicher und ließt die Eingabedatei ein. Labels und Vars werden dabei übersprungen, da es sich nur um Compilerbefehle handelt.
Eingabe: parameter - Programmparameter, wobei aus parameter[0] die Namen der Eingabedateien (.lex, .var, .lab) gebildet werden und aus parameter[1] die gewünschte Arbeitsspeichergröße
Ausgabe:
keine
Methode int getAdr(int sym, String datei)
Sucht in der durch datei angegebenen Datei nach der Adresse der Marke oder Variablen sym.
Eingabe: sym - gesuchtes Symbol, datei - Eingabedatei
Ausgabe:
Adresse des Symbols
Klasse alles
Vereint
alle o.g. Programmteile.
Methode void main(String[] parameter)
Ruft zuerst die syntaktische Analyse auf und dann den Interpreter.
Eingabe: parameter - parameter[0] enthält den Dateinamen
Ausgabe:
keine
Variablen- und Konstantenbedeutung:
alles.class (Eingabeparameter s.o.)
String[] np - Eingabeparameter für den Interpreter. np[0] enthält den Dateinamen, np[1] die Ramgröße
long jetzt - die aktuelle UTC Zeit in Millisekunden
int[][] RAM - Arbeitsspeicher
normaleGroesse - die Größe des Arbeitsspeichers, falls diese nicht angegeben wurde
groesse - Größe des Arbeitsspeichers
String[] programm - das Programm im Arbeitsspeicher als Zeichenkette(n)
String letzterBefehl - der zuletzt ausgeführte SM-Befehl mit evtl. geänderten Stapeln und ip
int letzteAusgabe - die letzte Ganzzahlausgabe Ausgabe auf den Bildschirm
boolean GUI - false im Textmodus
boolean traceMode - true im Trace Modus
boolean KonAus - true, um eine Ausgabe des letzten Befehls auf den Bildschirm zu erzeugen
int counter - Anzahl der abgearbeiteten Befehle
int ip - Zeiger auf den nächsten Befehl
prozedurstack pi - der Prozedurstapel
datenstack delta - der Datenstapel
RandomAccessFile TraceAusgabe - Ausgabedatei für den Trace Modus
BufferedReader in - Tastatureingabe
int zwischen - allgemeiner Zwischenspeicher
int befehl - zu bearbeitender Befehl
int para1, para2, para3 - dessen Parameter
int var1, var2 - Operatoren bei arithmetischen Operationen („Rechenregister“)
int adr - nimmt bei Sprungbefehlen die Ziel- oder Rücksprungadresse auf („Adressregister“)
boolean jmp - zeigt an, ob ein bedingter Sprung ausgeführt wird oder nicht („Compareflag“)
file test - eine Datei, die nur zur Überprüfung auf Existenz benötigt wird
boolean fertig - gibt an, ob der Lesevorgang beendet wurde
int muell - nimmt nicht benötigte Rückgabewerte von anderen Methoden auf
int nochnZähler - wieviele Zeilen wurden gelesen?
RandomAcessFile symbole - die Eingabedatei bei der Suche nach Adressen
int gelesen - Inhalt der Eingabedatei
syntax.class
int gelesen - gelesenes Zeichen aus der Eingabedatei
int zaehler - Position im Programm
boolean fertig - wurde der Lesevorgang beendet?
RandomAccessFile eingabe - die Eingabedatei
RandomAccessFile vars - die Ausgabedatei für Variablen und deren Adressen
RandomAccessFile labels - die Ausgabedatei für Sprungmarken und deren Adressen
int varSym - eine Variable
int varAdr - deren Adresse
int labelSym - eine Marke
String alle - alle Lexeme, die ich bisher gelesen habe
int Befehlszaehler - Rückgabe der syntaktischen Analyse, die nicht benötigt wird, falls das Programm alleine aufgerufen wurde
Daß die lexikalische Analyse „funktioniert“, wurde bereits in der Spezifikation zu P1 gezeigt.
Folgende
Programme wurden erfolgreich getestet:
jmptest.sm
call
0,anf,1
jmp
0
label anf read read sub store
0,1
load 0,1 je w1 const 0 write
label w1 load 0,1 jne w2 const 10 write
label w2 load 0,1 jg w3 const 1 write
label w3 load 0,1 jl w4 const 0 const 1 sub write
label w4 load 0,1 jge w5 const 2 write
label w5 load 0,1 jle w6 const 0 const 2 sub write
label w6 ret |
Führe
Programm aus:
?
2
?
1
0 -1 -2
Programmende erreicht. 29 Zyklen. Zur
Ausführung wurden 5210 msec. benötigt.
|
CALL
0,3,1. ip=2 Pi=<1,0,(0)>.
READ. ip=3 Delta=2. READ. ip=4 Delta=1.2. SUB. 2-1=1 ip=5 Delta=1. STORE 0,1. ip=6 Delta=null Pi=<1,0,(1)>. LOAD 0,1. ip=7 Delta=1. JE 11 (false). ip=8 Delta=null CONST 0. ip=9 Delta=0. WRITE. ip=10 Delta=null LOAD 0,1. ip=11 Delta=1. JNE 15 (true). ip=12 Delta=null LOAD 0,1. ip=15 Delta=1. JG 19 (true). ip=16 Delta=null LOAD 0,1. ip=19 Delta=1. JL 25 (false). ip=20 Delta=null CONST 0. ip=21 Delta=0. CONST 1. ip=22 Delta=1.0. SUB. 0-1=-1 ip=23 Delta=-1. WRITE. ip=24 Delta=null LOAD 0,1. ip=25 Delta=1. JGE 29 (true). ip=26 Delta=null LOAD 0,1. ip=29 Delta=1. JLE 35 (false). ip=30 Delta=null CONST 0. ip=31 Delta=0. CONST 2. ip=32 Delta=2.0. SUB. 0-2=-2 ip=33 Delta=-2. WRITE. ip=34 Delta=null RET. ip=35 Ziel=1 (6) Pi=null JMP
0. ip=2
|
basetest.sm
call
0,anf,1
jmp
0
label anf const 1 store 1,1 load 1,1 write call 1,sub1,0 ret
label sub1 load 2,1 const 1 add store 2,1 load 2,1 write load 2,1 call 1,sub2,0 ret
label sub2 load 3,1 const 1 add store 3,1 load 3,1 write ret |
Führe
Programm aus:
1 2 3
Programmende erreicht. 24 Zyklen. Zur
Ausführung wurden 1100 msec. benötigt.
|
CALL
0,3,1. ip=2 Pi=<1,0,(0)>.
CONST 1. ip=3 Delta=1. STORE 1,1. ip=4 Delta=null Pi=<1,0,(1)>. LOAD 1,1. ip=5 Delta=1. WRITE. ip=6 Delta=null CALL 1,9,0. ip=8 Pi=<7,1,()>.<1,0,(1)>. LOAD 2,1. ip=9 Delta=1. CONST 1. ip=10 Delta=1.1. ADD. 1+1=2 ip=11 Delta=2. STORE 2,1. ip=12 Delta=null Pi=<7,1,()>.<1,0,(2)>. LOAD 2,1. ip=13 Delta=2. WRITE. ip=14 Delta=null LOAD 2,1. ip=15 Delta=2. CALL 1,18,0. ip=17 Pi=<16,1,()>.<7,1,()>.<1,0,(2)>. LOAD 3,1. ip=18 Delta=2.2. CONST 1. ip=19 Delta=1.2.2. ADD. 2+1=3 ip=20 Delta=3.2. STORE 3,1. ip=21 Delta=2. Pi=<16,1,()>.<7,1,()>.<1,0,(3)>. LOAD 3,1. ip=22 Delta=3.2. WRITE. ip=23 Delta=2. RET. ip=24 Ziel=16 (5) Pi=<7,1,()>.<1,0,(3)>. RET. ip=17 Ziel=7 (5) Pi=<1,0,(3)>. RET. ip=8 Ziel=1 (6) Pi=null JMP 0. ip=2 |
nük1.sm
call
0,anf,2
jmp 0 var n,1 var
k,2
label anf read store 0,n read store 0,k load 0,k load 0,n call 0,nueberk,3 write ret
var erg,3 label nueberk store 0,n store 0,k (*read write*) load 0,k jg weiter1 const 1 store 0,erg load 0,erg ret
label weiter1 load 0,n load 0,k sub jne weiter2 const 1 store 0,erg load 0,erg ret
label weiter2 load 0,k const 1 sub load 0,n const 1 sub call 1,nueberk,3 load 0,k load 0,n const 1 sub call 1,nueberk,3 add store 0,erg load 0,erg ret
(*binkoeff n 0 = 1 *) (*binkoeff n k = if n==k then 1 *) (*
else binkoeff (n-1) (k-1) + binkoeff (n-1) k*)
|
Führe
Programm aus:
?
4
?
2
6
Programmende erreicht. 191 Zyklen. Zur
Ausführung wurden 3350 msec. benötigt.
|
CALL
0,3,2. ip=2 Pi=<1,0,(0,0)>.
READ. ip=3 Delta=4. STORE 0,1. ip=4 Delta=null Pi=<1,0,(4,0)>. READ. ip=5 Delta=2. STORE 0,2. ip=6 Delta=null Pi=<1,0,(4,2)>. LOAD 0,2. ip=7 Delta=2. LOAD 0,1. ip=8 Delta=4.2. CALL 0,12,3. ip=11 Pi=<9,0,(0,0,0)>.<1,0,(4,2)>. STORE 0,1. ip=12 Delta=2. Pi=<9,0,(4,0,0)>.<1,0,(4,2)>. STORE 0,2. ip=13 Delta=null Pi=<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,2. ip=14 Delta=2. JG 20 (true). ip=15 Delta=null LOAD 0,1. ip=20 Delta=4. LOAD 0,2. ip=21 Delta=2.4. SUB. 4-2=2 ip=22 Delta=2. JNE 28 (true). ip=23 Delta=null LOAD 0,2. ip=28 Delta=2. CONST 1. ip=29 Delta=1.2. SUB. 2-1=1 ip=30 Delta=1. LOAD 0,1. ip=31 Delta=4.1. CONST 1. ip=32 Delta=1.4.1. SUB. 4-1=3 ip=33 Delta=3.1. CALL 1,12,3. ip=11 Pi=<34,1,(0,0,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,1. ip=12 Delta=1. Pi=<34,1,(3,0,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,2. ip=13 Delta=null Pi=<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,2. ip=14 Delta=1. JG 20 (true). ip=15 Delta=null LOAD 0,1. ip=20 Delta=3. LOAD 0,2. ip=21 Delta=1.3. SUB. 3-1=2 ip=22 Delta=2. JNE 28 (true). ip=23 Delta=null LOAD 0,2. ip=28 Delta=1. CONST 1. ip=29 Delta=1.1. SUB. 1-1=0 ip=30 Delta=0. LOAD 0,1. ip=31 Delta=3.0. CONST 1. ip=32 Delta=1.3.0. SUB. 3-1=2 ip=33 Delta=2.0. CALL 1,12,3. ip=11 Pi=<34,1,(0,0,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,1. ip=12 Delta=0. Pi=<34,1,(2,0,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,2. ip=13 Delta=null Pi=<34,1,(2,0,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,2. ip=14 Delta=0. JG 20 (false). ip=15 Delta=null CONST 1. ip=16 Delta=1. STORE 0,3. ip=17 Delta=null Pi=<34,1,(2,0,1)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,3. ip=18 Delta=1. RET. ip=19 Ziel=34 (14) Pi=<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,2. ip=35 Delta=1.1. LOAD 0,1. ip=36 Delta=3.1.1. CONST 1. ip=37 Delta=1.3.1.1. SUB. 3-1=2 ip=38 Delta=2.1.1. CALL 1,12,3. ip=11 Pi=<39,1,(0,0,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,1. ip=12 Delta=1.1. Pi=<39,1,(2,0,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,2. ip=13 Delta=1. Pi=<39,1,(2,1,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. |
LOAD
0,2. ip=14 Delta=1.1.
JG 20 (true). ip=15 Delta=1. LOAD 0,1. ip=20 Delta=2.1. LOAD 0,2. ip=21 Delta=1.2.1. SUB. 2-1=1 ip=22 Delta=1.1. JNE 28 (true). ip=23 Delta=1. LOAD 0,2. ip=28 Delta=1.1. CONST 1. ip=29 Delta=1.1.1. SUB. 1-1=0 ip=30 Delta=0.1. LOAD 0,1. ip=31 Delta=2.0.1. CONST 1. ip=32 Delta=1.2.0.1. SUB. 2-1=1 ip=33 Delta=1.0.1. CALL 1,12,3. ip=11 Pi=<34,1,(0,0,0)>.<39,1,(2,1,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,1. ip=12 Delta=0.1. Pi=<34,1,(1,0,0)>.<39,1,(2,1,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,2. ip=13 Delta=1. Pi=<34,1,(1,0,0)>.<39,1,(2,1,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,2. ip=14 Delta=0.1. JG 20 (false). ip=15 Delta=1. CONST 1. ip=16 Delta=1.1. STORE 0,3. ip=17 Delta=1. Pi=<34,1,(1,0,1)>.<39,1,(2,1,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,3. ip=18 Delta=1.1. RET. ip=19 Ziel=34 (14) Pi=<39,1,(2,1,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,2. ip=35 Delta=1.1.1. LOAD 0,1. ip=36 Delta=2.1.1.1. CONST 1. ip=37 Delta=1.2.1.1.1. SUB. 2-1=1 ip=38 Delta=1.1.1.1. CALL 1,12,3. ip=11 Pi=<39,1,(0,0,0)>.<39,1,(2,1,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,1. ip=12 Delta=1.1.1. Pi=<39,1,(1,0,0)>.<39,1,(2,1,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,2. ip=13 Delta=1.1. Pi=<39,1,(1,1,0)>.<39,1,(2,1,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,2. ip=14 Delta=1.1.1. JG 20 (true). ip=15 Delta=1.1. LOAD 0,1. ip=20 Delta=1.1.1. LOAD 0,2. ip=21 Delta=1.1.1.1. SUB. 1-1=0 ip=22 Delta=0.1.1. JNE 28 (false). ip=23 Delta=1.1. CONST 1. ip=24 Delta=1.1.1. STORE 0,3. ip=25 Delta=1.1. Pi=<39,1,(1,1,1)>.<39,1,(2,1,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,3. ip=26 Delta=1.1.1. RET. ip=27 Ziel=39 (1) Pi=<39,1,(2,1,0)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. ADD. 1+1=2 ip=40 Delta=2.1. STORE 0,3. ip=41 Delta=1. Pi=<39,1,(2,1,2)>.<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,3. ip=42 Delta=2.1. RET. ip=43 Ziel=39 (1) Pi=<34,1,(3,1,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. ADD. 1+2=3 ip=40 Delta=3. STORE 0,3. ip=41 Delta=null Pi=<34,1,(3,1,3)>.<9,0,(4,2,0)>.<1,0,(4,2)>.LOAD 0,3. ip=42 Delta=3. RET. ip=43 Ziel=34 (14) Pi=<9,0,(4,2,0)>.<1,0,(4,2)>. |
LOAD
0,2. ip=35 Delta=2.3.
LOAD 0,1. ip=36 Delta=4.2.3. CONST 1. ip=37 Delta=1.4.2.3. SUB. 4-1=3 ip=38 Delta=3.2.3. CALL 1,12,3. ip=11 Pi=<39,1,(0,0,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,1. ip=12 Delta=2.3. Pi=<39,1,(3,0,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,2. ip=13 Delta=3. Pi=<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,2. ip=14 Delta=2.3. JG 20 (true). ip=15 Delta=3. LOAD 0,1. ip=20 Delta=3.3. LOAD 0,2. ip=21 Delta=2.3.3. SUB. 3-2=1 ip=22 Delta=1.3. JNE 28 (true). ip=23 Delta=3. LOAD 0,2. ip=28 Delta=2.3. CONST 1. ip=29 Delta=1.2.3. SUB. 2-1=1 ip=30 Delta=1.3. LOAD 0,1. ip=31 Delta=3.1.3. CONST 1. ip=32 Delta=1.3.1.3. SUB. 3-1=2 ip=33 Delta=2.1.3. CALL 1,12,3. ip=11 Pi=<34,1,(0,0,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,1. ip=12 Delta=1.3. Pi=<34,1,(2,0,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,2. ip=13 Delta=3. Pi=<34,1,(2,1,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,2. ip=14 Delta=1.3. JG 20 (true). ip=15 Delta=3. LOAD 0,1. ip=20 Delta=2.3. LOAD 0,2. ip=21 Delta=1.2.3. SUB. 2-1=1 ip=22 Delta=1.3. JNE 28 (true). ip=23 Delta=3. LOAD 0,2. ip=28 Delta=1.3. CONST 1. ip=29 Delta=1.1.3. SUB. 1-1=0 ip=30 Delta=0.3. LOAD 0,1. ip=31 Delta=2.0.3. CONST 1. ip=32 Delta=1.2.0.3. SUB. 2-1=1 ip=33 Delta=1.0.3. CALL 1,12,3. ip=11 Pi=<34,1,(0,0,0)>.<34,1,(2,1,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,1. ip=12 Delta=0.3. Pi=<34,1,(1,0,0)>.<34,1,(2,1,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,2. ip=13 Delta=3. Pi=<34,1,(1,0,0)>.<34,1,(2,1,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,2. ip=14 Delta=0.3. JG 20 (false). ip=15 Delta=3. CONST 1. ip=16 Delta=1.3. STORE 0,3. ip=17 Delta=3. Pi=<34,1,(1,0,1)>.<34,1,(2,1,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,3. ip=18 Delta=1.3. RET. ip=19 Ziel=34 (14) Pi=<34,1,(2,1,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,2. ip=35 Delta=1.1.3. LOAD 0,1. ip=36 Delta=2.1.1.3. CONST 1. ip=37 Delta=1.2.1.1.3. SUB. 2-1=1 ip=38 Delta=1.1.1.3. CALL 1,12,3. ip=11 Pi=<39,1,(0,0,0)>.<34,1,(2,1,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,1. ip=12 Delta=1.1.3. Pi=<39,1,(1,0,0)>.<34,1,(2,1,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,2. ip=13 Delta=1.3. |
Pi=<39,1,(1,1,0)>.<34,1,(2,1,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>.
LOAD 0,2. ip=14 Delta=1.1.3. JG 20 (true). ip=15 Delta=1.3. LOAD 0,1. ip=20 Delta=1.1.3. LOAD 0,2. ip=21 Delta=1.1.1.3. SUB. 1-1=0 ip=22 Delta=0.1.3. JNE 28 (false). ip=23 Delta=1.3. CONST 1. ip=24 Delta=1.1.3. STORE 0,3. ip=25 Delta=1.3. Pi=<39,1,(1,1,1)>.<34,1,(2,1,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,3. ip=26 Delta=1.1.3. RET. ip=27 Ziel=39 (1) Pi=<34,1,(2,1,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. ADD. 1+1=2 ip=40 Delta=2.3. STORE 0,3. ip=41 Delta=3. Pi=<34,1,(2,1,2)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,3. ip=42 Delta=2.3. RET. ip=43 Ziel=34 (14) Pi=<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,2. ip=35 Delta=2.2.3. LOAD 0,1. ip=36 Delta=3.2.2.3. CONST 1. ip=37 Delta=1.3.2.2.3. SUB. 3-1=2 ip=38 Delta=2.2.2.3. CALL 1,12,3. ip=11 Pi=<39,1,(0,0,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,1. ip=12 Delta=2.2.3. Pi=<39,1,(2,0,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. STORE 0,2. ip=13 Delta=2.3. Pi=<39,1,(2,2,0)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,2. ip=14 Delta=2.2.3. JG 20 (true). ip=15 Delta=2.3. LOAD 0,1. ip=20 Delta=2.2.3. LOAD 0,2. ip=21 Delta=2.2.2.3. SUB. 2-2=0 ip=22 Delta=0.2.3. JNE 28 (false). ip=23 Delta=2.3. CONST 1. ip=24 Delta=1.2.3. STORE 0,3. ip=25 Delta=2.3. Pi=<39,1,(2,2,1)>.<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,3. ip=26 Delta=1.2.3. RET. ip=27 Ziel=39 (1) Pi=<39,1,(3,2,0)>.<9,0,(4,2,0)>.<1,0,(4,2)>. ADD. 2+1=3 ip=40 Delta=3.3. STORE 0,3. ip=41 Delta=3. Pi=<39,1,(3,2,3)>.<9,0,(4,2,0)>.<1,0,(4,2)>. LOAD 0,3. ip=42 Delta=3.3. RET. ip=43 Ziel=39 (1) Pi=<9,0,(4,2,0)>.<1,0,(4,2)>. ADD. 3+3=6 ip=40 Delta=6. STORE 0,3. ip=41 Delta=null Pi=<9,0,(4,2,6)>.<1,0,(4,2)>. LOAD 0,3. ip=42 Delta=6. RET. ip=43 Ziel=9 (18) Pi=<1,0,(4,2)>. WRITE. ip=10 Delta=null RET. ip=11 Ziel=1 (6) Pi=null JMP
0. ip=2
|
optest.sm
call
0,anf,2
jmp
0
label anf read read store 0,1 store 0,2 load 0,1 load 0,2 add write load 0,1 load 0,2 sub write load 0,1 load 0,2 mul write load 0,1 load 0,2 div write load 0,1 load 0,2 mod write ret |
Führe
Programm aus:
?
22
?
33
55 11 726 1 11
Programmende erreicht. 27 Zyklen. Zur
Ausführung wurden 3130 msec. benötigt.
|
CALL
0,3,2. ip=2 Pi=<1,0,(0,0)>.
READ. ip=3 Delta=22. READ. ip=4 Delta=33.22. STORE 0,1. ip=5 Delta=22. Pi=<1,0,(33,0)>. STORE 0,2. ip=6 Delta=null Pi=<1,0,(33,22)>. LOAD 0,1. ip=7 Delta=33. LOAD 0,2. ip=8 Delta=22.33. ADD. 33+22=55 ip=9 Delta=55. WRITE. ip=10 Delta=null LOAD 0,1. ip=11 Delta=33. LOAD 0,2. ip=12 Delta=22.33. SUB. 33-22=11 ip=13 Delta=11. WRITE. ip=14 Delta=null LOAD 0,1. ip=15 Delta=33. LOAD 0,2. ip=16 Delta=22.33. MUL. 33*22=726 ip=17 Delta=726. WRITE. ip=18 Delta=null LOAD 0,1. ip=19 Delta=33. LOAD 0,2. ip=20 Delta=22.33. DIV. 33/22=1 ip=21 Delta=1. WRITE. ip=22 Delta=null LOAD 0,1. ip=23 Delta=33. LOAD 0,2. ip=24 Delta=22.33. MOD. 33%22=11 ip=25 Delta=11. WRITE. ip=26 Delta=null RET. ip=27 Ziel=1 (6) Pi=null JMP 0. ip=2 |
bit.sm
call
0,3,2
jmp
0
read read store 0,1 store 0,2 load 0,2 load 0,1 and write load 0,2 load 0,1 or write load 0,2 not write load 0,2 load 0,1 xor write load 0,2 shl write load 0,1 shr write load 0,2 load 0,1 bitcmp write ret |
Führe
Programm aus:
?
22
?
33
0 55 -23 55 44 16 0
Programmende erreicht. 32 Zyklen. Zur
Ausführung wurden 7140 msec. benötigt.
|
CALL
0,3,2. ip=2 Pi=<1,0,(0,0)>.
READ. ip=3 Delta=22. READ. ip=4 Delta=33.22. STORE 0,1. ip=5 Delta=22. Pi=<1,0,(33,0)>. STORE 0,2. ip=6 Delta=null Pi=<1,0,(33,22)>. LOAD 0,2. ip=7 Delta=22. LOAD 0,1. ip=8 Delta=33.22. AND. 22&33=0 ip=9 Delta=0. WRITE. ip=10 Delta=null LOAD 0,2. ip=11 Delta=22. LOAD 0,1. ip=12 Delta=33.22. OR. 22|33=55 ip=13 Delta=55. WRITE. ip=14 Delta=null LOAD 0,2. ip=15 Delta=22. NOT. ~22=-23 ip=16 Delta=-23. WRITE. ip=17 Delta=null LOAD 0,2. ip=18 Delta=22. LOAD 0,1. ip=19 Delta=33.22. XOR. 22^33=55 ip=20 Delta=55. WRITE. ip=21 Delta=null LOAD 0,2. ip=22 Delta=22. SHL. 22=>44 ip=23 Delta=44. WRITE. ip=24 Delta=null LOAD 0,1. ip=25 Delta=33. SHR. 33=>16 ip=26 Delta=16. WRITE. ip=27 Delta=null LOAD 0,2. ip=28 Delta=22. LOAD 0,1. ip=29 Delta=33.22. BITCMP. bit 22 von 33=0 ip=30 Delta=0. WRITE. ip=31 Delta=null RET. ip=32 Ziel=1 (6) Pi=null JMP 0. ip=2 |
textout.sm
call
0,anf,1
jmp
0
label
anf
(* const 99 out
*)
$"Alle meine Entchen..." label weiter store 0,1 load 0,1 je ende load 0,1 out jmp
weiter
label ende ret |
Führe
Programm aus:
Alle meine Entchen... Programmende erreicht. 154 Zyklen. Zur
Ausführung wurden 880 msec. Benötigt.
|
CALL
0,3,1. ip=2 Pi=<1,0,(0)>.
CONST 0. ip=3 Delta=0. CONST 46. ip=4 Delta=46.0. CONST 46. ip=5 Delta=46.46.0. CONST 46. ip=6 Delta=46.46.46.0. CONST 110. ip=7 Delta=110.46.46.46.0. CONST 101. ip=8 Delta=101.110.46.46.46.0. CONST 104. ip=9 Delta=104.101.110.46.46.46.0. CONST 99. ip=10 Delta=99.104.101.110.46.46.46.0. CONST 116. ip=11 Delta=116.99.104.101.110.46.46.46.0. CONST 110. ip=12 Delta=110.116.99.104.101.110.46.46.46.0. |
CONST 69. ip=13 Delta=69.110.116.99.104.101.110.46.46.46.0.
CONST 32. ip=14 Delta=32.69.110.116.99.104.101.110.46.46.46.0.
CONST 101. ip=15 Delta=101.32.69.110.116.99.104.101.110.46.46.46.0.
CONST 110. ip=16 Delta=110.101.32.69.110.116.99.104.101.110.46.46.46.0.
CONST 105. ip=17 Delta=105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
CONST 101. ip=18 Delta=101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
CONST 109. ip=19 Delta=109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
CONST 32. ip=20 Delta=32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
CONST 101. ip=21 Delta=101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
CONST 108. ip=22 Delta=108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
CONST 108. ip=23 Delta=108.108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
CONST 65. ip=24 Delta=65.108.108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
STORE 0,1. ip=25 Delta=108.108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0. Pi=<1,0,(65)>.
LOAD 0,1. ip=26 Delta=65.108.108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=108.108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=65.108.108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=108.108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0. Pi=<1,0,(108)>.
LOAD 0,1. ip=26 Delta=108.108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=108.108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0. Pi=<1,0,(108)>.
LOAD 0,1. ip=26 Delta=108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=108.101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0. Pi=<1,0,(101)>.
LOAD 0,1. ip=26 Delta=101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=101.32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0. Pi=<1,0,(32)>.
LOAD 0,1. ip=26 Delta=32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=32.109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0. Pi=<1,0,(109)>.
LOAD 0,1. ip=26 Delta=109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=109.101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=105.110.101.32.69.110.116.99.104.101.110.46.46.46.0. Pi=<1,0,(101)>.
LOAD 0,1. ip=26 Delta=101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=101.105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=110.101.32.69.110.116.99.104.101.110.46.46.46.0. Pi=<1,0,(105)>.
LOAD 0,1. ip=26 Delta=105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=110.101.32.69.110.116.99.104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=105.110.101.32.69.110.116.99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=101.32.69.110.116.99.104.101.110.46.46.46.0. Pi=<1,0,(110)>.
LOAD 0,1. ip=26 Delta=110.101.32.69.110.116.99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=101.32.69.110.116.99.104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=110.101.32.69.110.116.99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=101.32.69.110.116.99.104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=32.69.110.116.99.104.101.110.46.46.46.0. Pi=<1,0,(101)>.
LOAD 0,1. ip=26 Delta=101.32.69.110.116.99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=32.69.110.116.99.104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=101.32.69.110.116.99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=32.69.110.116.99.104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=69.110.116.99.104.101.110.46.46.46.0. Pi=<1,0,(32)>.
LOAD 0,1. ip=26 Delta=32.69.110.116.99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=69.110.116.99.104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=32.69.110.116.99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=69.110.116.99.104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=110.116.99.104.101.110.46.46.46.0. Pi=<1,0,(69)>.
LOAD 0,1. ip=26 Delta=69.110.116.99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=110.116.99.104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=69.110.116.99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=110.116.99.104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=116.99.104.101.110.46.46.46.0. Pi=<1,0,(110)>.
LOAD 0,1. ip=26 Delta=110.116.99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=116.99.104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=110.116.99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=116.99.104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=99.104.101.110.46.46.46.0. Pi=<1,0,(116)>.
LOAD 0,1. ip=26 Delta=116.99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=99.104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=116.99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=99.104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=104.101.110.46.46.46.0. Pi=<1,0,(99)>.
LOAD 0,1. ip=26 Delta=99.104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=104.101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=99.104.101.110.46.46.46.0.
OUT. ip=29 Delta=104.101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=101.110.46.46.46.0. Pi=<1,0,(104)>.
LOAD 0,1. ip=26 Delta=104.101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=101.110.46.46.46.0.
LOAD 0,1. ip=28 Delta=104.101.110.46.46.46.0.
OUT. ip=29 Delta=101.110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=110.46.46.46.0. Pi=<1,0,(101)>.
LOAD 0,1. ip=26 Delta=101.110.46.46.46.0.
JE 31 (false). ip=27 Delta=110.46.46.46.0.
LOAD 0,1. ip=28 Delta=101.110.46.46.46.0.
OUT. ip=29 Delta=110.46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=46.46.46.0. Pi=<1,0,(110)>.
LOAD 0,1. ip=26 Delta=110.46.46.46.0.
JE 31 (false). ip=27 Delta=46.46.46.0.
LOAD 0,1. ip=28 Delta=110.46.46.46.0.
OUT. ip=29 Delta=46.46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=46.46.0. Pi=<1,0,(46)>.
LOAD 0,1. ip=26 Delta=46.46.46.0.
JE 31 (false). ip=27 Delta=46.46.0.
LOAD 0,1. ip=28 Delta=46.46.46.0.
OUT. ip=29 Delta=46.46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=46.0. Pi=<1,0,(46)>.
LOAD 0,1. ip=26 Delta=46.46.0.
JE 31 (false). ip=27 Delta=46.0.
LOAD 0,1. ip=28 Delta=46.46.0.
OUT. ip=29 Delta=46.0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=0. Pi=<1,0,(46)>.
LOAD 0,1. ip=26 Delta=46.0.
JE 31 (false). ip=27 Delta=0.
LOAD 0,1. ip=28 Delta=46.0.
OUT. ip=29 Delta=0.
JMP 25. ip=30
STORE 0,1. ip=25 Delta=null Pi=<1,0,(0)>.
LOAD 0,1. ip=26 Delta=0. JE 31 (true). ip=27 Delta=null RET. ip=31 Ziel=1 (6) Pi=null JMP 0. ip=2