i

Die Bonsai-Maschinensprache

Zielsetzung

Ziel ist es, die beiden folgenden Aufgaben für den Bonsai-Modellrechner zu lösen:

  • die Codierung der Assembler-Befehle
  • die Zusammenführung von Programm und Daten im Speicher

Zur Verdeutlichung betrachten wir das folgende Assemblerprogramm

0 jmp 3
1 inc 0
2 dec 1
3 tst 1
4 jmp 1
5 hlt

und die folgende Speicherbelegung:

0: 3
1: 2

Codierung der Befehle

In einem realen Rechner werden die zu verarbeitenden Befehle binär codiert.

Wir orientieren uns hier zunächst am bisher betrachteten Speichermodell: Der Speicher besteht aus Registern, in die natürliche Zahlen abgelegt werden können. Bei der Codierung der Befehle verwenden wir daher (vorerst) auch natürliche Zahlen.

inc ... → 1 ...
dec ... → 2 ...
jmp ... → 3 ...
tst ... → 4 ...
hlt ... → 5 ...

Beachte, dass es sich hier um eine zweckmäßige, aber auch willkürliche Festlegung handelt.

Ein Bonsai-Assemblerbefehl setzt sich aus einem Operationsteil und einem Adressteil zusammen. So besteht etwa der Befehl jmp 1 aus der Operation jmp und der Adresse 1.

jmp 1
  | |
  3 0001

Bei der Codierung eines Bonsai-Assemblerbefehls wird der Operationsteil durch den oben gezeigten Code ersetzt. Die Adresse wird hier als 4-stellige Zahl geschrieben. Für den Befehl jmp 1 ergibt sich so der Code 30001.

Beachte, dass die Zweiteilung in einen Operationsteil und einen Adressteil auch bei codierten Befehlen gegeben ist. An der ersten Stelle des Codes kann man nach wie vor den Befehl ablesen.

Zusammenführung von Programm und Daten im Speicher

Wenn man das gesamte oben gezeigte Assemblerprogramm codiert, dann ergibt sich ein neues Problem.

0: 30003
1: 10000
2: 20001
3: 40001
4: 30001
5: 50000

Der inc-Befehl 10000 bezieht sich auf ein Register, in dem nicht das zu verarbeitende Datum steht, sondern ein Teil des Programms selbst.

Die zu verarbeitenden Daten müssen also in anderen Registern gespeichert werden (z.B. in den Registern 7 und 8). Die Adressteile der Befehle inc, dec und tst müssen dann natürlich entsprechend angepasst werden.

0: 30003
1: 10007
2: 20008
3: 40008
4: 30001
5: 50000
6:
7: 00003
8: 00002

Bei dieser Codierung beginnt das codierte Programm in Speicherzelle 0. Möglich ist es auch, das Programm an einer anderen Speicherzelle beginnen zu lassen. Hier muss dann mit einem geeigneten Sprungbefehl der Programmbeginn erreicht werden, da die Programmausführung - typischerweise für eine CPU - nach einem Reset immer an der Stelle 0 beginnt.

 0: 30003
 ...
 3: 30006
 4: 10011
 5: 20012
 6: 40012
 7: 30004
 8: 50000
 ...
11: 00003
12: 00002

Aufgabe 1

Gegeben ist das folgende Programm und die zu verarbeitenden Daten. Entwickle ein passende Speicherbelegung für Programm und Daten.

Programm:

0 tst 1
1 jmp 3
2 jmp 6
3 dec 1
4 inc 0
5 jmp 0
6 hlt

Daten:

0: 3
1: 2

Suche

v
100.119.3.2.2
dev.inf-schule.de/entwuerfe/bonsai/sprachen/maschinensprache/bonsaimaschinensprache
dev.inf-schule.de/100.119.3.2.2
dev.inf-schule.de/@/page/wRZFvR3MyFahki65

Rückmeldung geben