# MU2/3-Rechner
## MU2 Rechner
## Adressraum vergrößern
### Wortbreite vergrößern
- 16 Bit → 32 Bit
  - Register, Bus, ALU

### Adressberechnung mit Offset
- Adresse = Register(bereits vorhandene Adresse) + Offset
- Offset kann mit weniger Bits angegeben werden
  - Adresse hat volle Breite

**Wird benötigt für:**
- **Relative Adressierung** für Unterprogramme / Sprünge
- **Indizierte Adressierung** für Speicherzugriffe
  - Wie indirektes Laden und Speichern mit Offset
- Laden von **PC-relativen Konstanten**
  - Prozessoren mit fester Befehlsbreite
    - Nur kleine Konstanten können im Code dekodiert werden
  - Falls Konstanten in der Nähe des augenblicklichen Programms (_bspw. hinter Returnanweisung eines Unterprogramms_)
    - können geladen werden

### Relative Adressierung
- ![image_128.png](image_128.png)
- Code wird im Speicher verschiebbar

#### Labels
- Umsetzung von PC-relativen Sprüngen mit Labels
- ![image_129.png](image_129.png)

### Indizierte Adressierung
#### Beispiel Stack
![image_130.png](image_130.png)
- In Unterprogrammen wird dyn. Speicher reserviert, indem der Stackpointer dekrementiert wird
- Zugriff auf Speicher über Stack + Offset(in Befehl)
- PUSH & POP nicht ausreichend
  - bei mehreren Variablen auf dem Stack jeweils beim Lesen der Stack geräumt werden müsste

### Adressberechnung in der ALU
- Adresse als Ergebnis der ALU ohne Speicherung in ACC
- Keine absolute Adressierung (aus IR)
- Nur ALU schreibt auf Adressbus (ohne Multiplexer)
- 32 bit

#### Maximale Laufzeit:
![image_131.png](image_131.png)
- **Gesamtlaufzeit ist zu lang!**
- in einem Takt möglich
  - falls Taktfrequenz niedrig genug

## MU3: Einführung des Adressregisters
![image_132.png](image_132.png)
- Ein Takt mehr um Daten aus dem Speicher zu holen
- Taktfrequenz kann höher sein
  - Laufzeit pro Teilstück kürzer
- **Nachteil:**
  - Nutzen des PC und Inkrementieren geht nicht mehr parallel
    - in Aout muss vor Fetch eine Kopie des aktuellen PC stehen
      - _(Fetch beginnt bei Aout!)_

### Beispiel relative Sprünge
![image_133.png](image_133.png)

## Problem im Fetch-Zyklus
**Datentransferbefehle ändern Aout**

![image_134.png](image_134.png)