Technische Universität München,
Fakultät für Informatik
Projekt II.11 – Spezifikation Mikrobefehle
Realisierung des Befehls: move RA,RB
- (1.Takt) Das in RA bezeichnete
Register in die ALU laden.
- (1.Takt) (Wert OR 0) in
Register RB schreiben.
- (1.Takt) Flags im Maschinenstatusregister
entsprechend setzen.
- (1.Takt) Sprung zum Mikrounterprogramm
Instruction Fetch (IFE).
Implementierung: Dokumentation, Mikrointruktionstabelle
Realisierung des Befehls: lsr *
- (1.Takt) Das durch RB
bezeichnete Register in die ALU laden.
- (1.Takt) Rechts-Shift
in der ALU durchführen.
- (1.Takt) Flags im Maschinenstatusregister
entsprechend setzen.
- (1.Takt) Nächsten
Maschinenbefehl durch IFE-Routine laden.
Implementierung: Dokumentation, Mikroinstruktionstabelle
- (1.Takt) Befehls-Zähler
auf dem Adreßbus ausgeben.
- (2.Takt) Konstantenfeld
über die ALU auf dem Adreßbus ausgeben.
- (3.Takt) Daten vom Datenbus
in die ALU laden (direkte Adressierung).
- (3.Takt) Rechts-Shift
durchführen und in R10 Ergebnis zwischenspeichern.
- (3.Takt) Flags im Maschinenstatusregister
entsprechend setzen.
- (3.Takt) Punkt 1 ausführen.
- (4.Takt) Punkt 2 ausführen
(Adresse liegt wieder auf dem Adreßbus).
- (5.Takt) Hauptspeicher
für Schreibzugriffe konfigurieren.
- (5.Takt) R10 über
ALU auf dem Datenbus ausgeben.
- (6.Takt)
Befehls-Zähler inkrementieren (Befehl ist zwei Byte
lang).
- (6.Takt)
Nächsten Maschinenbefehl durch IFE-Routine laden.
Implementierung: Dokumentation, Mikroinstruktionstabelle
- (1.Takt) RB-Register über
die ALU auf dem Adreßbus ausgeben.
- (2.Takt) Rechts-Shift
durchführen und in R10 Ergebnis zwischenspeichern.
- (2.Takt) Flags im Maschinenstatusregister
entsprechend setzen.
- (3.Takt) Punkt 1 ausführen
(Adresse liegt wieder auf dem Adreßbus).
- (4.Takt) Hauptspeicher
für Schreibzugriffe konfigurieren.
- (4.Takt) R10 über
ALU auf dem Datenbus ausgeben.
- (5.Takt)
Nächsten Maschinenbefehl durch IFE-Routine laden.
Implementierung: Dokumentation,
Mikroinstruktionstabelle
- (1.Takt) Befehls-Zähler
auf dem Adreßbus ausgeben.
- (2.Takt) "disp"
aus dem Datenbus über ALU in R10 zwischenspeichern.
- (3.Takt) R10 und RB in
der ALU addieren und auf dem Adreßbus ausgeben.
- (4.Takt) Rechts-Shift
durchführen und Ergebnis in R11 zwischenspeichern.
- (4.Takt) Flags im Maschinenstatusregister
entsprechend setzen.
- (5.Takt) Punkt 3 ausführen
(Adresse liegt wieder auf dem Adreßbus).
- (6.Takt) Hauptspeicher
für Schreibzugriffe konfigurieren.
- (6.Takt) R11 über
ALU auf dem Datenbus ausgeben.
- (7.Takt)
Befehls-Zähler inkrementieren (Befehl ist zwei Byte
lang).
- (7.Takt)
Nächsten Maschinenbefehl durch IFE-Routine laden.
Implementierung: Dokumentation,
Mikroinstruktionstabelle
- (1.Takt) RA MOD 16 in
der ALU berechnen.
- (1.Takt) Ergebnis nach
R10 laden (Schleifen-Zähler).
- (1.Takt) Flags im Mikrostatusregister
entsprechend setzen.
- (2.Takt) Zero-Flag
im Mikrostatusregister prüfen.
- (2.Takt) Falls
R10=0 (Zero=1) wird das Mikroprogramm verlassen (-> IFE).
- (3.Takt) In der ALU Rechts-Shift
auf RB durchführen.
- (3.Takt) Flags im Maschinenstatusregister
entsprechend setzen.
- (4.Takt) In der ALU auf
R10 die Konstante "1" subtrahieren (R10=R10-1).
- (4.Takt) Flags im Mikrostatusregister
entsprechend setzen.
- (5.Takt) Zero-Flag im
Mikrostatusregister prüfen.
- (5.Takt) Bei nicht gesetztem
Zero-Flag wird zu Punkt 6 gesprungen.
- (6.Takt) Nächsten
Maschinenbefehl durch IFE-Routine laden.
Implementierung: Dokumentation,
Mikroinstruktionstabelle
- (1.Takt) $000F in R10
laden (Vorbereitung für "imm MOD 16").
- (1.Takt) Befehls-Zähler
auf dem Adreßbus ausgeben.
- (2.Takt) Daten AND R10
über ALU in R10 laden (Schleifen-Zähler).
- (2.Takt) Flags im Mikrostatusregister
entsprechend setzen.
- (3.Takt) Zero-Flag
im Mikrostatusregister prüfen.
- (3.Takt) Falls
R10=0 (Zero=1) wird zu Punkt 13 gesprungen.
- (4.Takt)
In der ALU Rechts-Shift auf RB durchführen.
- (4.Takt)
Flags im Maschinenstatusregister entsprechend setzen.
- (5.Takt)
In der ALU auf R10 die Konstante "1" subtrahieren
(R10=R10-1).
- (5.Takt)
Flags im Mikrostatusregister entsprechend setzen.
- (6.Takt)
Zero-Flag im Mikrostatusregister prüfen.
- (6.Takt)
Bei nicht gesetztem Zero-Flag wird zu Punkt 7 gesprungen.
- (7.Takt)
Befehls-Zähler inkrementieren (Befehl ist zwei Byte
lang).
- (7.Takt)
Nächsten Maschinenbefehl durch IFE-Routine laden.
Implementierung: Dokumentation,
Mikroinstruktionstabelle
Realisierung des Befehls: bset *
Da die Maschine ein 16-Bit Wort nur um eine Stelle verschieben kann,
wird die Erstellung
der benötigten Bitmaske über eine Schleife implementiert. Die
Bitmaske wird bei allen
Adressierungen über RA gebildet und in R11 abgelegt.
- Erstellung der Bitmaske (Bestandteil jedes hier folgenden BSET-Befehls)
- (1.MIR) RA
MOD 16 in der ALU berechnen.
- (1.MIR) Ergebnis in R10
speichern (Schleifen-Zähler).
- (2.MIR) Die Konstante
32768 (binär: 1000000000000000) in R11 laden.
- (2.MIR) Nächste Mikroinstruktionsadresse
-> Stack (Schleife vorbereiten).
- (3.MIR) Den Wert in R11
über die ALU links-rotieren.
- (4.MIR) In der ALU auf
R10 die Konstante "1" subtrahieren (R10=R10-1).
- (4.MIR) Flags im Mikrostatusregister
entsprechend setzen.
- (5.MIR) NEG-Flag im Mikrostatusregister
prüfen.
- (5.MIR) Konditionierten
LOOP-Befehl ausführen.
- (1.-5.MIR) Erstellung
der Bitmaske in R11.
- (6.MIR) "R11
or RB" nach RB schreiben.
- (6.MIR) Nächsten
Maschinenbefehl durch IFE-Routine laden.
Implementierung: Dokumentation,
Mikroinstruktionstabelle
- (1.-5.MIR) Erstellung
der Bitmaske in R11.
- (5.MIR) Befehls-Zähler
auf dem Adreßbus ausgeben.
- (6.MIR) Daten auf dem
Adreßbus ausgeben (direkte Adressierung).
- (7.MIR) "R11 or Daten"
nach R10 schreiben.
- (7.MIR) Befehls-Zähler
auf dem Adreßbus ausgeben.
- (8.MIR) Daten auf dem
Adreßbus ausgeben (direkte Adressierung).
- (9.MIR) Hauptspeicher
für Schreibzugriffe konfigurieren.
- (9.MIR) R10 über
ALU auf dem Datenbus ausgeben.
- (10.MIR) Befehls-Zähler
inkrementieren (Befehl ist zwei Byte lang).
- (10.MIR) Nächsten
Maschinenbefehl durch IFE-Routine laden.
Implementierung: Dokumentation,
Mikroinstruktionstabelle
- (1.-5.MIR) Erstellung
der Bitmaske in R11.
- (6.MIR) RB auf dem Adreßbus
ausgeben.
- (7.MIR) "R11 or Daten"
nach R10 schreiben.
- (8.MIR) RB auf dem Adreßbus
ausgeben.
- (9.MIR) Hauptspeicher
für Schreibzugriffe konfigurieren.
- (9.MIR) R10 über
ALU auf dem Datenbus ausgeben.
- (10.MIR) Nächsten
Maschinenbefehl durch IFE-Routine laden.
Implementierung: Dokumentation,
Mikroinstruktionstabelle
- (1.-5.MIR) Erstellung
der Bitmaske in R11.
- (5.MIR) Befehls-Zähler
auf dem Adreßbus ausgeben.
- (6.MIR) "disp"
aus dem Datenbus über ALU in R10 zwischenspeichern.
- (7.MIR) R10 und RB in
der ALU addieren und auf dem Adreßbus ausgeben.
- (8.MIR) "R11 or Daten"
nach R11(!) schreiben.
- (9.MIR) R10 und RB in
der ALU addieren und auf dem Adreßbus ausgeben.
- (10.MIR) Hauptspeicher
für Schreibzugriffe konfigurieren.
- (10.MIR) R11 über
ALU auf dem Datenbus ausgeben.
- (11.MIR) Befehls-Zähler
inkrementieren (Befehl ist zwei Byte lang).
- (11.MIR) Nächsten
Maschinenbefehl durch IFE-Routine laden.
Implementierung: Dokumentation,
Mikroinstruktionstabelle
zurück zum Inhalt Projekt II.11
10.04.97 - Rolf
Drügh, Dominic
Kyritsis, Michael
Luber