David Schirrmeister 776a6ec0f9 updatet
2024-05-10 10:19:19 +02:00

67 lines
2.1 KiB
Markdown

# 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)