2.1 KiB
2.1 KiB
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
- Prozessoren mit fester Befehlsbreite
Relative Adressierung
Labels
Indizierte Adressierung
Beispiel Stack
- 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:
- Gesamtlaufzeit ist zu lang!
- in einem Takt möglich
- falls Taktfrequenz niedrig genug
MU3: Einführung des Adressregisters
- 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!)
- in Aout muss vor Fetch eine Kopie des aktuellen PC stehen
- Nutzen des PC und Inkrementieren geht nicht mehr parallel
Beispiel relative Sprünge
Problem im Fetch-Zyklus
Datentransferbefehle ändern Aout