# MU2 und MU3Rechner ## 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)