|
Zurück zur Homepage |
Bei der Zielarchitektur handelt eine reine 16-Bit Architektur. Als Register stehen zur Verfügung:
Befehlszähler: | Der Befehlszähler adressiert den als nächstes auszuführenden Befehl. Er wird automatisch nach jedem Befehl auf den im Speicher unmittelbar folgenden Befehl fortgeschaltet. Sprung- und Unterprogrammbefehle können den Befehlszähler direkt setzen. |
8 Allzweckregister: | Die acht Allzweckregister (r0 - r7) können beliebige 16 Bit Werte aufnehmen. |
Kellerzeiger (SP): | Zeigt auf den zuletzt gekellerten Wert. |
Statusinformationen werden von der ALU im Maschinenstatusregister abgelegt. Folgende Flags stehen zur Verfügung:
OVR | Overflow - Flag |
N | Negative - Flag |
Z | Zero - Flag |
C | Carry - Flag |
Der Hauptspeicher umfaßt einen Adreßraum von 64K Worten a 16 Bit.
Von der Zielarchitektur wird durchgehend ein Zweiadreß-Befehlsformat benutzt. Je nach Verwendung der Adressierungsarten im Befehl, ergeben sich Einwort- bzw. Zweiwort-Befehle. Im Feld Opcode ist der 8-Bit Operationscode des Befehls enthalten, in dem auch die verwendeten Adressierungsarten codiert sind.
Einwort-Befehle:
15 ........... 8 | 7 | 6 ... 4 | 3 | 2 ... 0 |
Opcode | 0 | RA | 0 | RB |
Zweiwort-Befehle:
15 ........... 8 | 7 | 6 ... 4 | 3 | 2 ... 0 | 15 ....................................... 0 | ||
Opcode | 0 | RA | 0 | RB | Konstantenfeld |
Der Befehlssatz der Zielarchitektur ist weitgehend orthogonal, d.h. im allgemeinen kann bei jedem Befehl jede beliebige, sinnvolle Kombination von Adressierungsarten verwendet werden. Ausnahmen sind die Kombination von Speicher- und unmittelbarer Adressierung, die durch das verwendete Befehlsformat ausgeschlossen wird, sowie einige spezielle Befehle. Es werden insgesamt fünf verschiedene Adressierungsarten für Operanden unterstützt. Die drei von den zu implementierenden Befehlen verwendeten Kombinationen sind im folgenden kurz aufgeführt:
IMM, RB : |
Unmittelbar adressierter Quelloperand bzw. Registeradressierung Der Quelloperand ist direkt im Konstantenfeld des Zweiwortbefehles angegeben. Der Zieloperand befindet sich in einem Pozessorregister, dessen
Nummer im Feld |
RB : |
Registeradressierung Der Quell- und Zieloperand sind identisch. Der Quelloperand befindet sich in einem Pozessorregister, dessen Nummer im Feld |
IMM : |
Unmittelbare Adressierung Der Operand ist direkt im Konstantenfeld des Zweiwortbefehles angegeben. |
|
Zurück zur Homepage |
|
Zurück zur Homepage |
MOVE
- DatentransportOperanden & Opcode:
src | dst | OpCode |
IMM |
RB |
F4 |
Funktion: dst := src
Bescreibung: Der Befehl MOVE IMM, RB
kopiert eine 16-Bit-Zahl aus dem Konstantenfeld des Zweiwortbefehls in das
Register, das in RB
angegeben ist.
|
Zurück zur Homepage |
DEC
- Herunterzählen um 1Operanden & Opcode:
src | dst | OpCode |
RB |
44 |
Funktion: dst := dst - 1
Beschreibung: Der Befehl DEC RB
zählt die 16-Bit-Zahl, die sich in dem Register befindet, welches durch
RB
angegeben ist um 1 herunter. Die Statusbits im Maschinenstatusregister werden dabei nicht verändert.
|
Zurück zur Homepage |
CMP
- Arithmetischer VergleichOperanden & Opcode:
src | dst | OpCode |
IMM |
RB |
30 |
Funktion: dst - src
Beschreibung: Der Befehl CMP IMM, RB
subtrahiert die 16-Bit-Zahl aus dem Konstantenfeld des Zweiwortbefehles von
der 16-Bit-Zahl aus dem Register, das in RB
angegeben ist, und setzt entsprechend der nachfolgenden Spezifikation die Statusbits im MSR.
Das Ergebnis wird anschließend verworfen, der Wert des Registers wird also nicht verändert.
Carry = 1, wenn der Wert des Konstantenfeldes größer ist als der Wert des Registers, das in RB
adressiert ist (bei der
Interpretation als vorzeichenlose Zahlen)
Zero = 1, wenn das Ergebnis gleich Null ist, also der Wert des Konstantenfeldes gleich dem Wert des Registers ist, das in RB
adressiert ist.
N = dem 15. Bit des Ergebnisses. Also das Vorzeichen, 1 für Zahlen kleiner als Null, wenn die Zahlen als Vorzeichenbehaftet interpretiert werden.
OVR = 1, wenn der Übertrag in das 15. Bit ungleich dem Übertrag aus dem 15. Bit ist, also der Überlauf.
|
Zurück zur Homepage |
SCF
- Setzen des Carry-FlagsOperanden & Opcode:
src | dst | OpCode |
F5 |
Funktion: Carry-Flag := 1
Beschreibung: Der Befehl scf
setzt im Maschinenstatusregister das Carry - Flag auf 1.
|
Zurück zur Homepage |
SCF
- Rotieren nach links über Carry-FlagOperanden & Opcode:
src | dst | OpCode |
RB |
64 |
Funktion: dst := dst um ein Bit nach links über das Carry Flag rotiert.
Beschreibung: Der Befehl RLC RB
rotiert den Inhalt des Registers, das in RB
angegeben ist um eine
Bitposition nach links, wobei das Carry - Flag mit einbezogen wird. Es wird also der Inhalt von Bit 15 in das Carry - Flag geschrieben, der Inhalt
vom Carry-Flag ins Bit 0, und der Inhalt des i-ten Bits in das Bit i+1.
|
Zurück zur Homepage |
JMPNC
- Bedingter SprungOperanden & Opcode:
src | dst | OpCode |
IMM |
8D |
Funktion: Falls nc (no carry): PC := src
Beschreibung: Der Befehl JMPNC
prüft das Carry - Flag im Maschinenstatusregister. Falls das Carry - Flag
nicht gesetzt ist, wird die Befehlsausführung mit dem Befehl fortgeführt, dessen Adresse im Konstantenfeld des Zweiwortbefehls angegeben
ist. Der Befehlszähler wird also mit dem Inhalt des Konstantenfeldes geladen. Ist das Carry - Flag nicht gesetzt, so wird die
Befehlsausführung mit dem nächsten Befehl fortgesetzt.
|
Zurück zur Homepage |
BSCANF
- Bit-Suche vorwärtsBeschreibung: Der Befehl BSCANF
sucht im Quelloperanden nach der am weitesten links stehenden
(höchstwertigen) binären 1 und schreibt deren Bitposition in den Zieloperanden. Enthält der Quelloperand keine binäre 1, ist er
also gleich Null, so wird der Zieloperand auf den Wert -1 gesetzt.
Dieser Befehl ist mittels eines Maschinenprogrammes, welches nur die vorstehenden Befehle verwendet zu implementieren.
|
Zurück zur Homepage |
Die Implementierung der Befehle erfolgt unter der Simulationsmaschine MIC, Version 5.2. Die implementierten Befehle sollen auf Geschwindigkeit und korrekte Funktion überprüft werden.
|
Zurück zur Homepage |
|
Zurück zur Homepage |