|
Zurück zur Homepage |
Um nähere Informationen zur Architektur der Maschine oder zu den Befehlsformaten des Rechners zu erhalten verwenden Sie bitte das Pflichtenheft und die Spezifikation oder die Beschreibung der Mikroprogrammierbaren Maschine sowie die Aufgabenstellung für das Sommersemester 99. Im folgenden sind lediglich die verwendeten Abkürzungen näher erklärt:
Abkürzungen für die Flags:
OVR | Overflow - Flag |
N | Negative - Flag |
Z | Zero - Flag |
C | Carry - Flag |
Im folgenden verwendete Adressierungsarten:
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
- DatentransportAdressierungsart | src: imm dst: RB |
||||||||||||||||||||
Opcode | F5 |
||||||||||||||||||||
Funktion | dst = src | ||||||||||||||||||||
Ausführungszeit | 5 Takte | ||||||||||||||||||||
Beschreibung | Der Befehl MOVE IMM, RB kopiert eine 16-Bit-Zahl aus dem Konstantenfeld des Zweiwortbefehls in das Register,
das in RB angegeben ist. |
||||||||||||||||||||
Beispiel |
|
|
Zurück zur Homepage |
DEC
- DekrementierenAdressierungsart | dst: RB |
||||||||||||||||||||||||
Opcode | 44 |
||||||||||||||||||||||||
Funktion | dst = dst - 1 | ||||||||||||||||||||||||
Ausführungszeit | 4 Takte | ||||||||||||||||||||||||
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. |
||||||||||||||||||||||||
Beispiel |
|
|
Zurück zur Homepage |
CMP
- Arithmetischer VergleichAdressierungsart | src: imm dst: RB |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Opcode | 30 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Funktion | dst - src | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ausführungszeit | 6 Takte | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Beispiel |
|
Erläuterungen:
RB
als auch im Konstantenfeld des Befehls sind zwei identische Werte, nämlich der Wert
0001h
. Hier wird also nur das Zero-Flag gesetzt.0001h
angegeben, im Konstantenfeld steht der Wert 0002h
. Es gilt also, daß der
Inhalt des Konstantenfeldes größer ist als der Wert des Registers RB
, demzufolge wird das Carry-Flag gesetzt. Des weiteren
ist das Ergebnis (FFFFh
) negativ, demzufolge wird das Negative-Flag gesetzt.0001h
angegeben, im Konstantenfeld steht der Wert 8000h
. Es gilt also, daß der
Inhalt des Konstantenfeldes größer ist als der Wert des Registers RB
, demzufolge wird das Carry-Flag gesetzt. Des weiteren
ist das Ergebnis (8001h
) negativ, demzufolge wird auch das Negative-Flag gesetzt. Der Übertrag in das Bit 15 ist 0 der
Übertrag aus dem Bit 15 ist hingegen 1, daher wird auch das Overflow-Flag gesetzt.8000h
angegeben, im Konstantenfeld steht der Wert 0001h
. Der Wert des Registers
RB
ist also größer als der des Inhalt Konstantenfeldes, demzufolge kann das Carry-Flag nicht gesetzt werden. Das Ergebnis
(7FFFh
) ist positiv. Der Übertrag in das Bit 15 ist 1 der Übertrag aus dem Bit 15 ist hingegen 0, daher wird das Overflow-Flag
gesetzt.8001h
angegeben, im Konstantenfeld steht der Wert 0001h
. Der Wert des Registers
RB
ist also größer als der des Inhalt Konstantenfeldes, demzufolge darf das Carry-Flag nicht gesetzt werden. Das Ergebnis
(8000h
) ist negativ demzufolge wird das Negative-Flag gesetzt.
|
Zurück zur Homepage |
SCF
- Setzen des Carry-FlagsAdressierungsart | |||||||||||||||||||||||||||||
Opcode | F4 |
||||||||||||||||||||||||||||
Funktion | Carry - Flag = 1 | ||||||||||||||||||||||||||||
Ausführungszeit | 4 Takte | ||||||||||||||||||||||||||||
Beschreibung | Der Befehl SCF setzt im Maschinenstatusregister das Carry - Flag auf 1. Die anderen Statusbits des
Maschinenstatusregisters werden dabei nicht verändert. |
||||||||||||||||||||||||||||
Beispiel |
|
|
Zurück zur Homepage |
RLC
- Rotieren nach links über das Carry-FlagAdressierungsart | dst: RB |
||||||||||||||||||||||||||||
Opcode | 64 |
||||||||||||||||||||||||||||
Funktion | dst = dst um ein Bit nach links über das Carry Flag rotiert. | ||||||||||||||||||||||||||||
Ausführungszeit | 4 Takte | ||||||||||||||||||||||||||||
Beschreibung | 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. Der Wert der anderen Flags des
Maschinenstatusregisters wird entsprechend des Eingangswertes der Schiebeoperation gesetzt. |
||||||||||||||||||||||||||||
Beispiel |
|
|
Zurück zur Homepage |
JMPNC
- Bedingter SprungAdressierungsart | src: imm |
||||||||||||||||||||||||||||||||||||
Opcode | 8D |
||||||||||||||||||||||||||||||||||||
Funktion | Falls nc (no carry): PC = src | ||||||||||||||||||||||||||||||||||||
Ausführungszeit | 6 Takte bei Sprung; 5 Takte sonst | ||||||||||||||||||||||||||||||||||||
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. |
||||||||||||||||||||||||||||||||||||
Beispiel |
|
|
Zurück zur Homepage |
Als Beispielprogramm dien uns die Nachbildung des bscanf
Befehles mit Maschinenbefehlen. Das Maschinenprogramm erwartet, daß
der zu überprüfende Wert im Register r0 liegt. Im Register r1 steht dann das Ergebnis.
Zunächst wird mittels scf das Carry Flag im Maschinenstatusregister gesetzt. Das ist wichtig, da sonst das Programm nicht terminiert, wenn der zu überprüfende Wert keine binäre 1 enthält.
Mittels move
wird nun die Konstante 10 hex in das Register r1 geschrieben. Der Wert im Register r0 wird nun nach links geschoben.
Anschließend wird das Register r1 dekrementiert.
Ist das Carry Flag nun noch nicht gesetzt (d.h. es wurde noch keine binäre 1 in das Carry Bit geschoben), so erfolgt ein Sprung zu dem Befehl
rlc
. Wurde es hingegen gesetzt so stoppt die Ausführung des Programms und das Ergebnis liegt vor.
Adresse | Wert | Mnemonic |
---|---|---|
0000 | F500 | scf |
0001 | 8D01 | move r1 |
0002 | 0010 | |
0003 | F400 | rlc r0 |
0004 | 4401 | dec r1 |
0005 | 8D00 | jmpnc |
0006 | 0003 |
|
Zurück zur Homepage |