Programmieraufgabe P2

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:

    MOD [delta=d1.d2....dn.x.y] D [ip=i] } [delta=d1.d2....dn.(x modulo y)] D [ip=i+1]

    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

    Fließkommazahl

    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

[delta=d1.d2....dn.1] D [ip=i+1] falls xy=0

 
 

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.)


 
 
    BufferedReader in - Eingabe von der Tastatur

    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

    sm_inter.class
    RandomAccessFile eingabe - Eingabedatei

    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 t -allgemeiner Zähler

    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 Zustand - Zustand des DEA, der die syntaktische Analyse durchführt

    int gelesen - gelesenes Zeichen aus der Eingabedatei

    int zaehler - Position im Programm

    boolean fertig - wurde der Lesevorgang beendet?

    file test - eine Datei, die nur zur Überprüfung auf Existenz benötigt wird

    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

Tests:

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