Bonsai Einführung Python Bonsai-Assembler Interpreter Übersetzungsschablonen Assemblerprogramme Compiler Maschinensprache Architektur Mikroprogrammierung Binäre Codierung Hardware Bau Simulation Baukasten debug 386-Assembler Betriebssystem ET-3400 Profi5E Glossar Util Literatur Holzcomputer Lehrplan Links
Pfad: Startseite / Fächer / Informatik / Material / Bonsai / Interpreter
Autor: mk
17.01.2012 15:44:32
1742
Interpreter

Bonsai-Datei-Format

Das Simulations-Programm speichert Bonsai-Programme in folgendem Format ab. Zuerst kommen die Befehle, der Opcode besteht aus 3 groß geschriebenen Zeichen, dann folgt die Adresse (2 Zeichen, rechtsbündig). Die Datenzeilen werden durch ein # eingeleitet, dann folgt der Registerinhalt als Zahl (5 Zeichen, rechtsbündig). Es folgen Kommentarzeilen, die mit ; eingeleitet werden.

TST 2
JMP 4
HLT
DEC 2
INC 1
JMP 1
#    2
#    3
;einfaches Additionsprogramm
;
;
;
;
;
;
;
;
;

Interpreter in Python

Interpreter bonsai.py, ADD1.BON,DIVMODPY.BON

Wie schnell rechnet die Hardware 130:7 bei 1 MHz?

divmodpy.bon, bonsaitakt.py

[';Daten', 130, 7, 18, 4, 0, 0]
inc(3+4): 1068
dec(3+4): 1046
jmp(3+1): 1806
tst(3+3): 1016
Takte: 28118

28118 Takte brauchen ca. 0,03s.

Interpreter, der auch relative Adressierung versteht

Der Interpeter boni.py benötigt ply. Der Interpreter kann Eingaben der folgenden Form verarbeiten, dh. man kann symbolische Namen und relative Sprünge (jmp (-3) springt 3 Stellen rückwärts) verwenden. Solchermaßen erstellte 'Code-Schnipsel' sind damit leicht zu einem Ganzen zusammenbaubar.

a = 3
b = 2

tst b
jmp (+2)
jmp (+4)
dec b
inc a
jmp (-5)

print a
print b

Wer Genaueres wissen will, kann sich die Sprachdefinition (aus parser.out) ansehen.

Rule 0     S' -> bon
Rule 1     bon -> befehl bon
Rule 2     bon -> 
Rule 3     befehl -> inc
Rule 4     befehl -> dec
Rule 5     befehl -> jmp
Rule 6     befehl -> tst
Rule 7     befehl -> zuw
Rule 8     befehl -> print
Rule 9     inc -> INC VAR
Rule 10    dec -> DEC VAR
Rule 11    jmp -> JMP NUMBER
Rule 12    jmp -> JMP ( NUMBER )
Rule 13    tst -> TST VAR
Rule 14    zuw -> VAR = NUMBER
Rule 15    print -> PRINT VAR

Terminals, with rules where they appear

(                    : 12
)                    : 12
=                    : 14
DEC                  : 10
INC                  : 9
JMP                  : 11 12
NUMBER               : 11 12 14
PRINT                : 15
TST                  : 13
VAR                  : 9 10 13 14 15
error                : 

Nonterminals, with rules where they appear

befehl               : 1
bon                  : 1 0
dec                  : 4
inc                  : 3
jmp                  : 5
print                : 8
tst                  : 6
zuw                  : 7

Parsing method: LALR