# 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

