MPR Projekt 9 - Benutzerdokumentation

 

Gliederung

  1. Bemerkungen zur Dokumentation
  2. Beschreibung der Maschinenbefehle
    1. Der MOVE-Befehl
    2. Der DEC-Befehl
    3. Der CMP-Befehl
    4. Der SCF-Befehl
    5. Der RLC-Befehl
    6. Der JMPNC-Befehl
  3. Ein Beispielprogramm


Projektüberblick MPR Frames anzeigen
Zurück zur Homepage

Bemerkungen zur Dokumentation

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 enthalten ist. RB kann die hexadezimalen Werte von 0 bis 7 annehmen.

RB:

Registeradressierung

Der Quell- und Zieloperand sind identisch. Der Quelloperand befindet sich in einem Pozessorregister, dessen Nummer im Feld RB enthalten ist. RB kann die hexadezimalen Werte von 0 bis 7 annehmen.

IMM:

Unmittelbare Adressierung

Der Operand ist direkt im Konstantenfeld des Zweiwortbefehles angegeben.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

Beschreibung der Maschinenbefehle



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

move - Datentransport

Adressierungsart 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
Adresse Wert Mnemonic Ergebnis nach Ausführung
0000 F400 move r0 Register r0 := 0002
0001 0002
0004 F406 move r6 Register r6 := 8796
0005 8796


Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

DEC - Dekrementieren

Adressierungsart 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
Adresse Wert Mnemonic Ergebnis nach Ausführung
0000 F400 move r0 Register r0 := 0002
0001 0002
0002 4400 dec r0 Register r0 := 0001
0003 4400 dec r0 Register r0 := 0000
0004 4400 dec r0 Register r0 := FFFF



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

CMP - Arithmetischer Vergleich

Adressierungsart 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.
  • 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.
Beispiel
Adresse Wert Mnemonic Werte der Statusbits
0000 F400 move r0
0001 0001
0002 3000 cmp r0 Z = 1 1.
0003 0001
0004 3000 cmp r0 C = 1, N = 1 2.
0005 0002
0006 3000 cmp r0 C = 1, N = 1, OVR = 1 3.
0007 8000
0008 F400 move r0
0009 8000
000A 3000 cmp r0 O = 1 4.
000B 0001
000C F400 move r0
000D 8001
000E 3000 cmp r0 N = 1 5.
000F 0001

Erläuterungen:

  1. Sowohl im Quellregister RB als auch im Konstantenfeld des Befehls sind zwei identische Werte, nämlich der Wert 0001h. Hier wird also nur das Zero-Flag gesetzt.
  2. Im Quellregister RB ist der Wert 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.
  3. Im Quellregister RB ist der Wert 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.
  4. Im Quellregister RB ist der Wert 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.
  5. Im Quellregister RB ist der Wert 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.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

SCF - Setzen des Carry-Flags

Adressierungsart
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
Adresse Wert Mnemonic Werte der Statusbits
0000 F500 scf C = 1
0001 F400 move r0
0002 8000
0003 3000 cmp r0 OVR = 1
0004 0001
0005 F500 scf C = 1, OVR = 1


Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

RLC - Rotieren nach links über das Carry-Flag

Adressierungsart 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
Adresse Wert Mnemonic Ergebnis nach Ausführung
0000 F400 move r0 Register r0 := 8080
0001 8080
0002 6400 rlc r0 Register r0 := 0100, C = 1, N = 1
0003 6400 rlc r0 Register r0 := 0201, C = 0
0004 6400 rlc r0 Register r0 := 0402, C = 0
0005 6400 rlc r0 Register r0 := 0804, C = 0


Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

JMPNC - Bedingter Sprung

Adressierungsart 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
Adresse Wert Mnemonic Ergebnis nach Ausführung
0000 F500 scf C = 1
0001 8D00 jmpnc kein Sprung
0002 0005
0003 F400 move r0 Register r0 := 0000
0004 0000
0005 6400 rlc r0 Carry = 0, Zero = 1
0006 8D00 jmpnc Sprung zu Speicheradresse 0099
0007 0099



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

Ein Beispielprogramm

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


Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage