Beruflich Dokumente
Kultur Dokumente
Computertechnik/Computersysteme SS 2004
30.07.2004
Prüfungsdauer: 90 Minuten
Bitte ankreuzen:
Name: Musterlösung
EI
Vorname: IT
TUM-BWL
Matr. Nr.: INF
Unterschrift:
DVP
Hörsaal: DHP
GOP
Reihe: Platz:
Hinweise:
• Heftklammern nicht lösen
• Nur die ausgeteilten und gehefteten
Lösungsblätter werden bewertet
• Keine Bleistifte! Punkte
• Die Prüfung besteht aus 18 Seiten
• Die angegebene Anzahl der pro Auf- Aufgabe 1
gabe zu erreichenden Punkten ist als
Aufgabe 2
vorläufiger Richtwert zu betrachten
• Die mit einem Stern (*) gekennzeich-
Aufgabe 3
neten Aufgaben sind unabhängig von der
Lösung vorangegangener Aufgaben lösbar
• Lösungen ohne erkennbaren Lösungs- Aufgabe 4
weg werden mit 0 Punkten bewertet
Gesamt
DVP/DHP Computertechnik
Seite 2 GOP Computersysteme
In dieser Aufgabe soll ein MMIX-Programm zur Berechnung der Klaus von Klitzing-
Konstanten Rk = h/e2 ≈ 25 812,807 Ω implementiert werden, wobei h dem Planckschen
Wirkungsquantum (6,626 ⋅ 10 – 34 Js) und e der Elementarladung (1,602 ⋅ 10 – 19 C)
entspricht.
* a) Geben Sie die Anweisung an, die den Stackpointer als globales Register mit dem
Namen SP anlegt und gleichzeitig mit dem Wert 0x4000000000000000 initiali-
siert. (1 Punkt)
SP GREG #4000000000000000
* b) Geben Sie die Anweisungen an, mit denen Sie h und e als 32-Bit breite Gleitkom-
ma-Zahl im Speicher zu Beginn des Datensegments als Tetra ablegen und durch
die Namen H bzw. E ansprechbar machen.
Treffen Sie eine geeignete Maßnahme, so dass Sie die Konstanten später auch
wirklich adressieren können. (4 Punkte)
Hinweis: Die 32 Bit Gleitkomma-Codierung von h lautet 0x85C306B, die von e lau-
tet 0x203D26D0.
LOC Data_Segment
GREG @
H TETRA #85C306B 6.6260757e-34
E TETRA #203D26D0 1.6021765e-19
* c) Geben Sie den Code an, mit dem Sie ein 32-Bit breites Datenwort für das Ergebnis
deklarieren. Das Datenwort soll über den Namen Rk angesprochen werden kön-
nen. (1 Punkt)
Rk TETRA
* d) Geben Sie den Code der Funktion Main an, der den Namensraum Main: bereit-
stellt und innerhalb des Namensraums Main: die Register $1, $2 und $3 durch
die Namen h, e und Rk ansprechbar macht. (3 Punkte)
PREFIX Main:
h IS $1
e IS $2
Rk IS $3
DVP/DHP Computertechnik
GOP Computersysteme Seite 3
Nach dem Einlesen der beiden 32 Bit breiten Konstanten h und e sollen diese der
Funktion fdiv32 zur Division wie folgt auf dem Stack übergeben werden:
0x4000000000000000 (BOS)
* f) Führen Sie die Parameterübergabe aus und rufen Sie dann die über die globale
Marke fdiv32 ansprechbare Funktion fdiv32 auf. Legen Sie die Rücksprungad-
resse dabei in Register $0 ab. (4 Punkte)
GO $0,:fdiv32 1. Funktionsaufruf
Das Ergebnis wird von der Funktion fdiv32 wie folgt auf dem Stack zurückgegeben:
* g) Lesen Sie vom Stack das Ergebnis der Division h/e in das Register Rk ein und le-
gen Sie es dann für einen weiteren Aufruf von fdiv32 als Dividend auf dem Stack
ab. Legen Sie als Divisor wieder e auf dem Stack ab und rufen Sie die Funktion
fdiv32 dann wie in der vorangegangenen Teilaufgabe auf. (5 Punkte)
GO $0,:fdiv32 2. Funktionsaufruf
DVP/DHP Computertechnik
Seite 4 GOP Computersysteme
* h) Laden Sie die nun berechnete Klitzing-Konstante vom Stack in das Register Rk
und speichern Sie Rk anschliessend in dem in Teilaufgabe c) angelegten 32 Bit
breiten Datenwort mit dem globalen Namen Rk ab. Beenden Sie zum Abschluss
das Hauptprogramm mit einer geeigneten Anweisung. (4 Punkte)
* i) Beenden Sie den Namensraum Main: mit einer geeigneten Anweisung. (1 Punkt)
PREFIX :
Im Folgenden soll die Funktion fdiv32 implementiert werden, wobei als Pufferregister
bei jeder Aufgabe die Register buf1 und buf2 verwendet werden können.
Nehmen Sie an, dass für die Funktion fdiv32 der Namensraum fdiv32: angelegt
wurde und die in der Funktion fdiv32 verwendeten Register bereits wie folgt auf den
Stack gesichert wurden:
STO dividend,:SP,0
STO divisor,:SP,1*8
STO mant_dividend,:SP,2*8
STO mant_divisor,:SP,3*8
STO exp_dividend,:SP,4*8
STO exp_divisor,:SP,5*8
STO vz,:SP,6*8
STO buf1,:SP,7*8
STO buf2,:SP,8*8
STO $0,:SP,9*8
* j) Geben Sie den MMIX-Code an, mit dem Sie die zuvor in den Teilaufgaben f) und g)
auf den Stack abgelegten Übergabe-Parameter in die Register dividend und
divisor einlesen. (2 Punkte)
LDO dividend,:SP,10*8
LDO divisor,:SP,11*8
Die verwendeten 32 Bit breiten Gleitkommazahlen sind nun wie folgt in den Registern
dividend und divisor abgelegt:
63 32 31 30 23 22 0
00... ...0 vz e f
vz e–127
Wert: (–1) ⋅ 1.f ⋅ 2
Mantisse
DVP/DHP Computertechnik
GOP Computersysteme Seite 5
* k) Berechnen Sie aus den in den Registern dividend und divisor abgelegten
Parametern das Vorzeichen des Quotienten derart, dass es nach der Berechnung
wie nachfolgend angegeben im Register vz abgelegt ist. (3 Punkte)
63 32 31 30 0
00... ...0 vz 00... ...0
XOR vz,dividend,divisor
SRU vz,vz,31
SLU vz,vz,31
* l) Berechnen Sie aus den in den Registern dividend und divisor abgelegten
Parametern den Exponenten des Quotienten. Führen Sie die Berechnung so durch,
dass der Exponent des Quotienten am Schluss wie nachfolgend angegeben im Re-
gister exp_dividend abgelegt ist. (6 Punkte)
Hinweis: Zur Pufferung der Exponenten können Sie die Register exp_dividend
und exp_divisor verwenden.
63 8 7 0
00... ...0 e
SLU exp_dividend,dividend,33
SRU exp_dividend,exp_dividend,56
SLU exp_divisor,divisor,33
SRU exp_divisor,exp_divisor,56
SUB exp_dividend,exp_dividend,exp_divisor
ADD exp_dividend,exp_dividend,127
* m) Geben Sie den MMIX-Code an, mit dem Sie aus den in den Registern dividend
und divisor stehenden Werten die Mantissen mant_dividend und mant_divisor
extrahieren und in die Register mant_dividend und mant_divisor wie nach-
folgend angegeben ablegen. (6 Punkte)
Hinweis: Als Zwischenpuffer können Sie das Register buf1.
63 24 23 22 0
00... ...0 1 f
Mantisse
SLU mant_dividend,dividend,41
SLU mant_divisor,divisor,41
SRU mant_dividend,mant_dividend,41
SRU mant_divisor,mant_divisor,41
SET buf1,1
SLU buf1,buf1,23
OR mant_dividend,mant_dividend,buf1
OR mant_divisor,mant_divisor,buf1
DVP/DHP Computertechnik
Seite 6 GOP Computersysteme
* n) Schieben Sie den Inhalt von mant_dividend um 24 Stellen nach links und Tei-
len Sie die so erhaltene 48 Bit breite Mantisse mant_dividend durch die 24 Bit brei-
te Mantisse mant_divisor. Sorgen Sie dafür, dass das Divisionsergebnis im Regis-
ter mant_dividend abgelegt wird. (2 Punkte)
SLU mant_dividend,mant_dividend,24
DIVU mant_dividend,mant_dividend,mant_divisor
Nach der Division kann die im Register mant_dividend befindliche Mantisse des
Ergebnisses entweder 24 oder 25 Bit breit sein:
63 24 23 22 0
00... ...0 1 f
63 25 24 23 0
00... ...0 1 f
* o) Geben Sie den MMIX-Code an, der die soeben berechnete Mantisse des Quotien-
ten in Abhängigkeit von Bit 24 renormalisiert und den Bruchteil f wie in der nachfol-
genden Skizze angegeben extrahiert. In Abhängigkeit von Bit 24 der Ergebnis-
Mantisse soll dabei auch noch der im Register exp_dividend abgelegte Expo-
nent (vgl. Skizze zu Teilaufgabe l) renormalisiert werden. (7 Punkte)
Hinweis: Als Zwischenpuffer können Sie die Register buf1 und buf2 verwenden.
63 23 22 0
00... ...0 f
SRU buf1,mant_dividend,24
SUB exp_dividend,exp_dividend,1
ADD exp_dividend,exp_dividend,buf1
SET buf2,41
SUB buf2,buf2,buf1
SLU mant_dividend,mant_dividend,buf2
SRU mant_dividend,mant_dividend,41
DVP/DHP Computertechnik
GOP Computersysteme Seite 7
In den Registern vz, exp_dividend und mant_dividend sind jetzt wie in den
Skizzen zu den Teilaufgaben k), l) und o) angegeben das Vorzeichen, der Exponent
und der Bruchteil f des berechneten Quotienten enthalten.
* p) Geben Sie den MMIX-Code an, mit dem Sie den Exponenten um eine geeignete
Anzahl an Stellen verschieben und dann mit dem Vorzeichen und dem Bruchteil f
im Register buf1 zusammensetzen. (3 Punkte)
SLU exp_dividend,exp_dividend,23
OR buf1,exp_dividend,mant_dividend
OR buf1,buf1,vz
Im Folgenden sind die Anweisungen angegeben, mit denen das Ergebnis auf dem
Stack abgelegt wird und die gesicherten Register wieder hergestellt werden.
STO buf1,:SP,11*8
LDO dividend,:SP,0
LDO divisor,:SP,1*8
LDO mant_dividend,:SP,2*8
LDO mant_divisor,:SP,3*8
LDO exp_dividend,:SP,4*8
LDO exp_divisor,:SP,5*8
LDO vz,:SP,6*8
LDO buf1,:SP,7*8
LDO buf2,:SP,8*8
LDO $0,:SP,9*8
* q) Geben Sie den Code an, der den Stackpointer auf das Ergebnis zeigen lässt und
anschliessend wieder zum Funktionsaufrufer zurückspringt. (2 Punkte)
Hinweis: Die Rücksprungadresse befindet sich in Register $0.
ADD :SP,:SP,11*8
GO $0,$0,0
DVP/DHP Computertechnik
Seite 8 GOP Computersysteme
Start
Produkt[0]
Produkt[0] == 1 Produkt[0] == 0
nein
n Runden?
ja
Ende
Multiplikand (n Bit)
n Bit
n Bit
rechts schieben
* a) Führen Sie den oben angegebenen Algorithmus für die Multiplikation 5 ⋅ 13 = 65 für
die Wortbreite n = 4 im Dualsystem durch. (8 Punkte)
Hinweis: Produkt[0] meint das LSB des Produkt-Registers.
Multiplikand
0 1 0 1
Addierer
Multiplikand ⋅ Multiplikator = Produkt
Summe
0 0 0 0 1 1 0 1 Initialisierung
0 1 0 1 1 1 0 1
1. Runde
0 0 1 0 1 1 1 0
0 0 0 1 0 1 1 1 2. Runde
0 1 1 0 0 1 1 1
3. Runde
0 0 1 1 0 0 1 1
1 0 0 0 0 0 1 1
4. Runde
0 1 0 0 0 0 0 1
Beim gerade durchgeführten Algorithmus wird unmittelbar vor dem Ende das Produkt
noch einmal um eine Stelle nach rechts geschoben.
* b) Wie gross darf das Ergebnis aufgrund dieser Tatsache maximal sein, damit es von
obigem Algorithmus noch korrekt berechnet werden kann? (2 Punkte)
Das MSB des Ergebnisses muss den Wert Null haben. Das Ergebnis darf also ma-
ximal 22n-1 -1 sein, um korrekt berechnet werden zu können.
Betrachten Sie die aus dem Skript bekannte und nachfolgend noch einmal abgebildete
Schaltung zur Multiplikation nach dem oben angegebenen Algorithmus:
Produkt[0]
Steuerung
0
Clk_Produkt
Clk
Init/>>1
Multiplikator Init/>>1
0 0..n-1 0..n-1
n
Produkt 2n
1
>>1
n..2n-1
n Produkt
n..2n-1
⇔
Clk_Mkand
MULU Multiplexer
0 1
2n 2n
n n
0
n Clk n Bit
Add n
Multiplikand
Multipli-
n kand
n n
* c) Welcher Term liegt allgemein am Eingang des Produkt-Registers an, wenn die
Steuerleitung Multiplexer auf LOW-Pegel, also auf 0 liegt? (2 Punkte)
Am Eingang des Produkt-Registers liegt dann der von n auf 2n Bit erweiterte Multi-
plikator an.
* d) Welcher Term liegt allgemein am Eingang des Produkt-Registers an, wenn die
Steuerleitung Multiplexer auf HIGH-Pegel, also auf 1 liegt? (3 Punkte)
Am Eingang des Produkt-Registers liegt dann im oberen n Bit breiten Halbwort die
Summe „Multiplikand + oberes Halbwort Produktregister“ an.
Am Eingang des unteren n Bit breiten Halbworts liegt dabei der bereits im Produkt-
Register gespeicherte untere Teil des Halbworts an.
DVP/DHP Computertechnik
GOP Computersysteme Seite 11
Der nachfolgend angegebene Moore-Automat dient zur Steuerung der links abgebilde-
ten Schaltung.
• Die Zustände 1 und 2 dienen hierbei der Initialisierung (vgl. obere Abb. auf S. 8)
• In den Zuständen 3 und 4 wird die vom Addierer berechnete Summe Produkt
links + Multiplikand in den linken Teil des Produkt-Registers übernommen
* e) Tragen Sie in den bereits vorgefertigten Moore-Automaten für jeden Zustand die
benötigten Ausgangswerte ein und geben Sie die benötigten Zustandsübergänge
mit geeigneten Bedingungen an, so dass die links abgebildete Schaltung den auf
der Seite 8 oben abgebildeten Algorithmus durchführt. Verwenden Sie hierzu das
Signal Produkt[0] und das Signal Runde_n, das in der n. Runde den Wert „1“ hat
und sonst den Wert „0“ aufweist. (12 Punkte)
1 2 5 6
Init Init rechtsschieben rechtsschieben
Multiplexer = 0 Multiplexer = 0 Multiplexer = X Multiplexer = X
Clk_Produkt = 0 Clk_Produkt = 1 Clk_Produkt = 0 Clk_Produkt = 1
Clk_Mkand = 0 Clk_Mkand = 1 Clk_Mkand = 0 Clk_Mkand = 0
Init/>>1 = 0 Init/>>1 = 0 Init/>>1 = 1 Init/>>1 = 1
Runde_n = 1
immer Produkt[0] == 0 immer
Produkt[0] == 1
immer
3 4 7
Addition Addition Ende
Multiplexer = 1 Multiplexer = 1 Multiplexer = X
Clk_Produkt = 0 Clk_Produkt = 1 Clk_Produkt = 0
Clk_Mkand = 0 Clk_Mkand = 0 Clk_Mkand = 0
Init/>>1 = 0 Init/>>1 = 0 Init/>>1 = X
immer
immer
Im Folgenden ist ein anderer, nicht korrekter Zustandsautomat für die Steuerung der
oben abgebildeten Multiplikations-Schaltung angegeben.
Runde_n == 0
1 2 5 6
Init Init rechtsschieben rechtsschieben
Multiplexer = 0 Multiplexer = 1 Multiplexer = 0 Multiplexer = 1
Clk_Produkt = 0 Clk_Produkt = 0 Clk_Produkt = 0 Clk_Produkt = 0
Clk_Mkand = 0 Clk_Mkand = 1 Clk_Mkand = 0 Clk_Mkand = 1
Init/>>1 = 0 Init/>>1 = 0 Init/>>1 = 1 Init/>>1 = 1
0
==
n
e_
nd
Ru
3 4 7
Addition Addition Ende
Multiplexer = X Multiplexer = X Multiplexer = 1
Clk_Produkt = 0 Clk_Produkt = 1 Clk_Produkt = 0
Clk_Mkand = 0 Clk_Mkand = 1 Clk_Mkand = X
Init/>>1 = 0 Init/>>1 = 0 Init/>>1 = 1
Runde_n = 0
immer
Runde_n = 1
aktueller Zustand
3
4
X X X X 0
4
0 0 0 0 1
4
1 0 1 0 2
Bit 3: Multiplexer
4
X 0 0 0 3 4 Bit 2: Clk_Produkt
4 Bit1: Clk_Mkand
X 1 1 0 4
4 Bit 0: Init/<<1
0 0 0 1 5
4
1 0 1 1 6
4
1 0 X 1 7
DVP/DHP Computertechnik
GOP Computersysteme Seite 13
Nehmen Sie im Folgenden an, dass der 2 Bit breite Rundenzähler wie in der Übung
implementiert wurde (Runde 1 ⇔ 01, Runde 2 ⇔ 10, Runde 3 ⇔ 11, Runde 4 ⇔ 00)
und das Signal Runde_n genau dann den Wert 1 hat, wenn der Rundenzähler auf 00
steht und sonst den Wert 0 hat. (Wortbreite n = 4)
* g) Tragen Sie für den oben gegebenen Moore-Automaten in nachstehendes PLA ge-
eignete Verbindungen ein, mit denen die Zustandsübergangsfunktion für Bit 1 reali-
siert wird. (10 Punkte)
1 2 5 7
Produkt [0]
UND-Bereich
Bit 0
Zustand Bit 1
Bit 2
Bit 3
Runden-
zähler
Bit 4
ODER-Bereich
Multiplexer
Clk_Produkt
Clk_Mkand
Init/>>1
Bit 0
Bit 1 Folgezustand
Bit 2
Bit 3 neuer
Bit 4 Rundenzähler
DVP/DHP Computertechnik
Seite 14 GOP Computersysteme
X-Auswahl
64 Clk3
Clk4
32
BZ Registerblock
64 Schreiben Zugriffs- Schrei-
8 Art ben
64 Schreib- 64 64
Daten $X Lese- $X $X Schreib-
Adresse 16..23 Daten $X Daten
32 0 64 64
BR Schreiben/ Lese- $Y
Befehls- Lesen $X Daten $Y 64
1 64 Erg Lese- Lese
Speicher Lese- ALU ALU
Adr.
Daten
0
$Z 0 Dat.
8..15 Daten $Z 64
Daten Lesen $Y Daten- Erg
1
0..7 Dir ALU
32 Lesen $Z 1 Speicher
Op.
8 64
64
0
16..23 56 X X X
8 8 8
64
Zeile 2-3
Zeile
1-3
Zeile
2-4
1-4
Es tritt folgender Strukturkonflikt auf: Wenn der LDO-Befehl aus Zeile 1 die ausge-
lesenen Daten in das Register $3 schreiben will, will gleichzeitig der STO-Befehl
aus Zeile 4 den Wert des Registers $3 auslesen.
Der Konflikt aus Teilaufgabe c) wird durch die in der Teilaufgabe a) eingezeichne-
ten Forwarding-Pfade automatisch gelöst, da der Wert aus Register $3 direkt aus
dem Datenpfad abgegriffen werden kann, und nicht erst aus dem Registerblock ge-
laden werden muss. Es müssen also keine Stalls eingefügt werden.
Nehmen Sie Im Folgenden an, dass das Register $0 mit dem Wert 0x1F0 belegt ist,
der ALU-Steuercode zur Addition den Wert 0x01 hat und mindestens 10 Befehle vor
dem LDO-Befehl das Register $254 nicht mehr verändert wurde.
* e) Geben Sie die Inhalte der nachfolgend abgebildeten Pipeline-Register für den Zeit-
punkt an, zu dem der LDO-Befehl gerade in das letzte Pipeline-Register geladen
wurde. Nehmen Sie an, dass alle notwendigen Forwarding-Pfade im Datenpfad ge-
schaltet waren. (10 Punkte)
Reg.Schr.: 0
ES
Erg.Ausw.: egal
Sp.Schr.: 1 Reg.Schr.: 1
SP
Zugr.-Art: STO Erg.Ausw.: 1
* a) Tragen Sie in nachfolgende Skizze die Anzahl der Bits ein, die für den Schlüssel,
die Set-Nummer und die Byteauswahl benötigt werden, wenn der Cachespeicher
über 8192 Sets verfügt. (3 Punkte)
Zugriffsadresse = 64 Bit
v
v
Set 0
v
v Rahmen
v
Set 1
v
v
v
Set 8191
v
* b) Wieviele zusätzliche Befehle können beim Laden eines Befehls durch Prefetching
maximal mitgeladen werden? Begründung! (2 Punkte)
44 · 4 = 176 1-Bit-Adress-Vergleicher.
DVP/DHP Computertechnik
GOP Computersysteme Seite 17
Der direkt abgebildete Daten-Cache des MMIX sei wie folgt aufgebaut:
Zugriffsadresse = 64 Bit
Rahmen 0 v
Rahmen 1 v
v
v
v
v
v
Rahmen 65535 v
* e) Geben Sie die Cache-Grösse in der Einheit MByte an. Rechenweg! (2 Punkte)
* f) Tragen Sie für die angegebenen Adressen in nachfolgende Tabelle die zugehörige
Rahmennummer hexadezimal ein. (4 Punkte)
Adresse Rahmen
0x2000 0000 0000 0008 0x0000
0x2000 0000 0000 0080 0x0002
0x2000 0000 000A 0010 0x2800
0x2000 0000 07B0 0123 0xC004
DVP/DHP Computertechnik
Seite 18 GOP Computersysteme
Konzeptpapier