Digitale Rechenanlagen

Werbung
Proseminar
Digitale Rechenanlagen
WS 12/13
Übungszettel 10
51. Die komplexe Multiplikation e + if = (a + ib)(c + id) = (ac − bd) + i(ad + bc) ist auf einer
Registermaschine (mit Registern R1, R2, . . . ) zu implementieren. Befehle sind: LOAD r,v,
STORE v,r, MULT r,r,r, ADD r,r,r, SUB r,r,r und NOP, wobei r ein beliebiges Register, v
eine Variable aus dem Speicher und NOP eine leere Operation ist, die nichts tut.
Jede Instruktion benötigt einen Taktzyklus. Allerdings gilt die Einschränkung, dass ein Register erst drei Taktzyklen nach dem Beschreiben wieder ausgelesen werden darf, also nach zwei
eingeschobenen Instruktionen.
Schreiben Sie das Programm zuerst schlecht, indem Sie Variablen erst unmittelbar vor der
ersten Benutzung laden und unmittelbar nach der Berechnung speichern. Fügen Sie NOPs ein,
um die Einschränkung zu berücksichtigen.
Versuchen Sie dann, die Instruktionen so umzuordnen, dass die Anzahl der NOPs minimiert
wird. Berechnen Sie in beiden Fällen die CPI-Rate, wobei NOP nicht als Instruktion zählt,
jedoch einen Taktzyklus verbraucht. Berechnen Sie auch den Speedup, der sich durch die
NOP-Minimierung ergibt.
52. Lesen Sie die Einführung in die DLX-Programmierung und die Dokumentation zu WinDLX
(oder Vergleichbares), versuchen Sie, einfache Programme in WinDLX laufen zu lassen, und
beantworten Sie folgende Fragen:
(a)
(b)
(c)
(d)
Welche Bedeutung haben .data und .text?
Was ist der Unterschied zwischen add, addu, addi, addui, addf und addd?
Was sind Pointer und wozu braucht man sie?
Was macht der Befehl jal?
53. Schreiben Sie ein DLX-Programm, das die abgerundete Wurzel b einer natürlichen Zahl a
mittels Intervallhalbierung berechnet, entsprechend folgendem Java-Codeausschnitt:
int a = 81, b; int u = 0, o = a, m = o/2;
while (m != u)
{ if (m*m > a) o = m; else u = m;
m = (o+u)/2;
}
b = m;
54. In einer DLX–Maschine sei das Multiplizierwerk fehlerhaft. Beheben Sie den Fehler, indem
Sie ein DLX–Unterprogramm für die Multiplikation nach dem Verfahren der Ägyptischen
Multiplikation schreiben.
(a) Geben Sie das Unterprogramm mit folgenden Übergabeparametern an: R1, R2 enthalten
die beiden zu multiplizierenden Zahlen, das Ergebnis wird in R3 übergeben. Nehmen Sie
an, dass Multiplikand und Multiplikator positive Integerwerte sind, die keinen Überlauf
produzieren. Das Unterprogramm soll nach dem Callee–Save–Prinzip gestaltet sein.
(b) Geben Sie ein Codefragment an, dass es auch erlaubt negative Zahlen unter den Voraussetzungen in a. zu multiplizieren und kennzeichnen Sie die Stellen in a., wo dieses
eingefügt werden soll.
(c) Testen Sie das Unterprogramm in WinDLX.
Herunterladen