Der Computer als System
Für einen Mikroprozessor muss nun die zugehörige Maschinensprache
definiert werden. Um eine einfache Softwarerealisation eines
Mikroprozessors zu ermöglichen (im Unterricht wurde eine
„Hardwarevariante“ mit Locad2002 aufgebaut), soll der „Computer“ die
folgende Struktur haben:
1. Speicher: Der Arbeitsspeicher enthält 256 von 0 bis 255 nummerierte
Speicherplätze für Binärwörter beliebiger Länge, welche durch die
Angabe ihrer Adresse (=Speicherplatznummer) angesprochen, d.h. gelesen
oder beschrieben werden können. Operationscode und Operandencode stehen
immer in derselben Zelle. Die Codierung erfolgt hexadezimal.
2. Der Prozessor besteht aus Rechenwerk und Steuerwerk. Das Rechenwerk
führt auf Veranlassung des Steuerwerks sämtliche arithmetischen und
logischen Operationen durch. Folgende Arbeitsregister sind Bestandteil
des Computers:
a) Erstes Arbeitsregister ist der Akkumulator (AX); er nimmt jeweils
den Inhalt einer Zelle eines Datenspeichers auf.
b) Zweites Arbeitsregister ist ein Speicherregister (BX), das ebenfalls
Inhalte einer Zelle eines Datenspeichers aufnehmen kann.
c) Das dritte Arbeitsregister ist das Befehlsregister (OP): es nimmt
jeweils den ersten Teil einer Zelle des Programmspeichers, und zwar den
momentan auszuführenden Befehl auf.
d) Das vierte Arbeitsregister ist das Datenregister (DR); es nimmt den
zweiten Teil einer Zelle des Programmspeichers, die gewünschte
Speicherzelle, auf.
e) Das fünfte Arbeitsregister ist der Befehlszähler (IP). Er beinhaltet
eine Adresse des Speichers, nämlich die des Befehls, der gerade zur
Ausführung ansteht.
f) Das sechste Arbeitsregister beinhaltet eine 1.
3. Eingaben und Ausgaben erfolgen direkt über die Speicherzellen, eine
eigene Eingabe/Ausgabeeinheit entfällt momentan.
Transportbefehle:
|
MOV [nn],AX |
11nn |
Speichere Akkuinhalt in Adresse nn |
|
MOV AX,nn |
12nn |
Lade Konstante nn in den Akkumulator |
|
MOV BX,[nn] |
13nn |
Lade den Inhalt von Adresse nn in das Register BX |
|
MOV [nn],BX |
14nn |
Speichere Inhalt von Register BX in Adresse nn |
|
MOV BX,nn |
15nn |
Lade Konstante in Register BX |
|
MOV BX, AX |
1600 |
Speichere den Akkumulatorinhalt in Register BX |
|
MOV AX, BX |
1700 |
Speichere Inhalt von Register BX in Akku |
Verarbeitungsbefehle:
|
ADD AX,[nn] |
20nn |
Addiere zum Akkuinhalt den Inhalt von Adresse nn |
|
ADD AX, nn |
21nn |
Addiere zum Akkuinhalt nn |
|
ADD AX, BX |
2200 |
Addiere zum Akkuinhalt BX |
|
SUB AX,[nn] |
23nn |
Subtrahiere vom Akkuinhalt den Inhalt von Adresse nn |
|
SUB AX,nn |
24nn |
Subtrahiere vom Akkuinhalt nn |
|
SUB AX, BX |
2500 |
Subtrahiere vom Akkuinhalt den Inhalt von BX |
|
SUB AX, AX |
2600 |
Setze Akkuinhalt auf Null |
|
MUL AX,[nn] |
27nn |
Multipliziere den Akkuinhalt mit dem von Adresse nn |
|
MUL AX, nn |
28nn |
Multipliziere den Akkuinhalt mit nn |
|
MUL AX, BX |
2900 |
Multipliziere den Akkuinhalt mit dem Inhalt von Register BX |
|
DIV AX,[nn] |
2Ann |
Dividiere den Akkuinhalt durch den Inhalt von Adresse nn |
|
DIV AX, nn |
2Bnn |
Dividiere den Akkuinhalt durch nn |
|
DIV AX, BX |
2C00 |
Dividiere den Akkuinhalt durch den Inhalt von Register BX |
|
INC [nn] |
2Dnn |
Erniedrige den Wert von nn um 1 |
|
INC AX |
2E00 |
Erniedrige den Wert vom Akku um 1 |
|
INC BX |
2F00 |
Erniedrige den Wert von BX um 1 |
|
DEC [nn] |
30nn |
Erhöhe den Wert von nn um 1 |
|
DEC AX |
3100 |
Erhöhe den Wert vom Akku um 1 |
|
DEC BX |
3200 |
Erhöhe den Wert von BX um 1 |
Sprungbefehle
|
JMP [nn] |
40nn |
Springe nach Adresse nn, d.h. schreibe Adresse in den Befehlszähler |
|
JEZ [nn] |
41nn |
Springe nach Adresse nn, wenn Akkuinhalt =0, andernfalls erhöhe Befehlszähler um 1 |
|
JNE [nn] |
42nn |
Springe nach Adresse nn, wenn Akkuinhalt <>0, andernfalls erhöhe Befehlszähler um 1 |
|
JLZ [nn] |
43nn |
Springe nach Adresse nn, wenn Akkuinhalt <0, andernfalls erhöhe Befehlszähler um 1 |
|
JLE [nn] |
44nn |
Springe nach Adresse nn, wenn Akkuinhalt <=0, andernfalls erhöhe Befehlszähler um 1 |
|
JGZ [nn] |
45nn |
Springe nach Adresse nn, wenn Akkuinhalt >0, andernfalls erhöhe Befehlszähler um 1 |
|
JGE [nn] |
46nn |
Springe nach Adresse nn, wenn Akkuinhalt >=0, andernfalls erhöhe Befehlszähler um 1 |
Sonstige Befehle
|
HALT |
9900 |
Programmende |