# MU4/5-Rechner ## Registeranzahl erhöhen ### Registerarchitektur - Gesamtzahl der Register ist normalerweise eine Zweierpotenz - 8 (ARM-Thumb), 16 (ARM), 32 (Power PC, MIPS) und mehr Register → Ergebnisse von Registern können in einem von n Registern gespeichert werden - Manchmal werden Spezialregister (_PC, SP, LR_) wie andere Register adressiert - Vorteil: Werte können in arithmetischen Operationen und zur Adressierung benutzt werden - _ARM: PC in R15, LR in R14, SP in R13_ **Adressierung der Quell- / Zielregister muss im Befehl enthalten sein** - Bei 16 Registern ist 4Bit (=n) Adressinformation für QR und ZR nötig - 2-Adress-Befehle (_bspw. add R0, R1 ; R0 += R1_) - brauchen 2n Bits zur Dekodierung - 3 Adress-Befehle (_bspw. add R0, R1, R2 ; R0 = R1+R2_) - brauchen 3n Bits zur Dekodierung - Prozessoren mit 16 Bit - 2-Adress-Befehle, wenig Register - Prozessoren mit 32 Bit - 3-Adress-Befehle, viele Register ## Konsequenzen aus der Registerarchitektur - Gut - Register erlauben schnellere Speicherung von Werten - arithmetische Befehle lassen sich in einem Takt ausführen - Register erlauben indirekten Zugriff auf Variablen - Inhalt eines Registers wird als Adresse genutzt - Registerbreite sollte groß genug für jede Adresse sein - Schlecht - Direkter Zugriff funktioniert bei einem Befehlssatz mit gleicher Breite aller Befehle nicht mehr - Laden von Konstanten (Immediate Werte) in ein Register ist schwierig - nur kleine Immediate Werte haben Platz im Befehlscode ## Link-Register für Unterprogrammaufrufe - Speichert Rücksprungadresse bei Ausführung eines Unterprogramms - (vorher: Push auf den Stack) - Am Ende des UP wird die Adresse wieder in den PC geschoben - (vorher: Pop vom Stack) - Erlaubt Unterprogrammaufrufe ohne Speicherung auf Stack ## MU4 mit Registersatz (Übergang von Akkumulator- zur Registerarchitektur) ![image_135.png](image_135.png) - Einfachste Operation (_add r1, r2, r3_) kann nicht erzeugt werden - Registerbank hat nur Zugriff auf A-Bus **Prozessor funktioniert so noch nicht!** _Registerbank braucht Zugriff auf A- und B-Bus_ ## MU5: Verbesserung des internen Bussystems und Shifter ![image_136.png](image_136.png) - meiste Befehle lassen sich realisieren - Jedes Register hat Ausgang auf A- und B-Bus - Operanden, die über B-Bus in ALU kommen, können vorher noch geschoben werden - Auf B-Bus können kleine Immediate-Werte aus IR in Berechnungen verwendet werden - Es werden noch zu viele Takte pro Operation benötigt - bisher konnten Registerinhalte auf A-Bus gelegt werden, Immediate auf B-Bus - nicht optimal, da arithmetische Operationen zwei Registeroperanden haben - Verbesserung, wenn Registerinhalte auf A-Bus und B-Bus gelegt werden können ### Shifter - erlaubt es Operanden des B-Bus vor der Verarbeitung nochmal zu schieben - Wichtig für Adressberechnungen - häufig ein Wortoffset in eine Adresse auf Byte-Basis umgewandelt ## MU5: Verbesserte ALU ![image_137.png](image_137.png) - Einsatz von Modifikatoren - Kann Eingang durchschalten - Kann alle Bits auf 0 / 1 setzen - Einsatz eines Shifters - Kann Wert um Shiftweite nach links / rechts schieben - Kann Rotation durchführen - Weitere Funktionen der ALU - Neben **A+B, A-B, A+B+1** - **A AND B** - **A OR B** - **NOT A** - **NOT B** - **A XOR B** ## MU5 Fetch-Zyklus ![image_138.png](image_138.png) - in Aout muss Kopie von PC stehen - vorheriger Befehl muss sicherstellen, dass das gegeben ist - Insbesondere Datentransfer-Befehle ## Arithmetische Operationen ![image_139.png](image_139.png) - brauchen ein Taktzyklus + Fetch ## Datentransfer ![image_140.png](image_140.png) ## Steuermatrix des MU5 ![image_141.png](image_141.png) ![image_142.png](image_142.png) ## Vergleich MU5 - ARM-Design - Datenverarbeitungsbefehle können wie bei ARM in einem Takt durchgeführt werden - Datentransferbefehle - MU5: 3 Takte - ARM: 2 Takte - Dout-Register gibt Informationen direkt an Speicher - Din braucht auch keinen Takt Verzögerung - ARM-Prozessor - Kann Daten über Din direkt in Registerbank zu schreiben - sonst wären einige Adressierungsarten nicht möglich ## MU5a ### Verbesserte Adressberechnung und Umstellung der Speicheradressierung ![image_143.png](image_143.png) #### Optimierung der Speicheradressierung - 32 Bit → Register, Bus, ALU - Speicher bisher wortweise - verbraucht für kleine Datenwerte viel Speicher - Umstellung auf byteweise Adressierung erlaubt Einführung neuer Befehle für Adressierung von Halbwörtern - zusätzlicher Incrementer für Register mit Speicheradressen - effiziente Inkrementierung um 2 oder 4 ![image_144.png](image_144.png) #### Speicheradressierung ![image_145.png](image_145.png) ![image_146.png](image_146.png) > AB 01 CD 23 steht im Speicher als 23 CD 01 AB