Mikroprogramm für CISC Prozessor

Diskutiere Mikroprogramm für CISC Prozessor im Hausaufgaben Bereich.
Kirby_Sike

Kirby_Sike

Also wir haben die Aufgabe jeweils ein Mikroprogramm für den Befehl SWAP und ADDL zu schreiben...soweit so gut, ich habe hier mal etwas pseudocode:



Code:
SWAP: tmp = $sp;
      $sp = $ac;
      $ac = tmp;
Durch diesen Befehl tauschen scheinbar der Stackpointer und das Arbeitsregister ihre Wert...Was ich mich jedoch fragen, warum tut man das und was bewirkt dieser Vorgang?
 
mihe7

mihe7

LOL, ja, mihe7 bei der Arbeit...

Kurz: Ein Tauschen bewirkt... ein Tauschen :) Warum macht man das? Ich sehe da verschiedene Gründe, wobei der Ausgangspunkt sein dürfte, dass im Akku ein Wert steht, der nicht verloren gehen darf.

1. Register bieten ja nur begrenzt Platz an. Ohne einen SWAP-Befehl müsstest Du temporär ein Register belegen.
2. POP, PUSH und MOVE sind drei Befehle, ein SWAP nur einer

Ein Anwendungsbeispiel: auf dem Stack liegt ein Wert, der erhöht werden soll. Der Inhalt des Akkus darf nicht verloren gehen und der inc-Befehl funktioniert nur mit dem Akku. SWAP, INC, SWAP ist kürzer als POP rx, PUSH ac, MOVE ac, rx, INC, POP rx, PUSH ac, MOVE ac, rx
 
Kirby_Sike

Kirby_Sike

LOL, ja, mihe7 bei der Arbeit...

Kurz: Ein Tauschen bewirkt... ein Tauschen :) Warum macht man das? Ich sehe da verschiedene Gründe, wobei der Ausgangspunkt sein dürfte, dass im Akku ein Wert steht, der nicht verloren gehen darf.

1. Register bieten ja nur begrenzt Platz an. Ohne einen SWAP-Befehl müsstest Du temporär ein Register belegen.
2. POP, PUSH und MOVE sind drei Befehle, ein SWAP nur einer

Ein Anwendungsbeispiel: auf dem Stack liegt ein Wert, der erhöht werden soll. Der Inhalt des Akkus darf nicht verloren gehen und der inc-Befehl funktioniert nur mit dem Akku. SWAP, INC, SWAP ist kürzer als POP rx, PUSH ac, MOVE ac, rx, INC, POP rx, PUSH ac, MOVE ac, rx
Was ist denn Arbeit? :p Ja gut mit dem von dir genannten Beispiel macht es schon Sinn :) Dankeee
 
Kirby_Sike

Kirby_Sike

@mihe7 irgendwie habe ich dennoch ein paar Frage Zeichen, wie würde es aussehen etwas von einer Speicherzelle ($ac) in eine irgendeine andere zu kopieren, also in Form einer Mikroprogrammzeile?

Hier sind mal ein paar weiter Infos zum Prozessor:

12956
12957
 
M

Meniskusschaden

Mal als Anfang: du willst aus der durch AC referenzierten Speicherzelle einen Wert auslesen. Das RAM-Adressregister wird über das B-Latch befüllt. Also muss Signal B schon mal 0001 enthalten.
 
mihe7

mihe7

Und natürlich musst Du im Befehl die anderen Bits auch passend setzen (z. B. RD, MD, MA)
 
Kirby_Sike

Kirby_Sike

@mihe7 Könntest du mal drüber schauen? Ich bin mir nicht ganz sicher ob das überhaupt sinn macht, was ich hier aufgeschrieben habe :)
Code:
Amux = 0, COND = 000, SHIFT = 00, ALU = 00, MD = 1, MA = 1, RD = 1, WR = 0, ENC = 0, C = 0000, A = 0000, B = 0000, ADDR = 00000000
Amux = 0, COND = 100, SHIFT = 00, ALU = 00, MD = 1, MA = 0, RD = 1, WR = 0, ENC = 0, C = 0000, A = 0000, B = 0000, ADDR = 00000001
Amux = 0, COND = 000, SHIFT = 00, ALU = 10, MD = 0, MA = 0, RD = 1, WR = 1, ENC = 1, C = 0100, A = 0010, B = 0000, ADDR = 00000000  # tir= $sp
Amux = 0, COND = 000, SHIFT = 00, ALU = 10, MD = 0, MA = 0, RD = 1, WR = 1, ENC = 1, C = 0010, A = 0001, B = 0000, ADDR = 00000000  # $sp= $ac
Amux = 0, COND = 000, SHIFT = 00, ALU = 10, MD = 0, MA = 0, RD = 1, WR = 1, ENC = 1, C = 0001, A = 0100, B = 0000, ADDR = 00000000  # $ac= tir
 
mihe7

mihe7

Ich denke mal, Du musst die Übertragung aus dem RAM in mehreren Schritten erledigen.
1. b := sp, rd
2. warte, bis übertragung beendet
3. tir := memory-i/o-register + b (d. h. amux=1, b = 0, c = 4 (tir), enc=1, wr=1)
 
Thema: 

Mikroprogramm für CISC Prozessor

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben