Blatt01 Ws1920 Loesung Korr
Blatt01 Ws1920 Loesung Korr
Blatt01 Ws1920 Loesung Korr
Lösungsvorschlag zu Übungsblatt 1
Abgabe: Donnerstag 31.10.2019, 12:00 Uhr (Postkasten der Veranstaltung und E-Mail an
Tutor)
• Dieses Übungsblatt muss im Team abgegeben werden (Einzelabgaben sind nicht erlaubt!).
• Bitte zur Angabe von Namen, Übungsgruppe und Teamnummer das Deckblatt verwenden!
• Die Zeitangaben geben zur Orientierung an, wie viel Zeit für eine Aufgabe später in der
Klausur vorgesehen wäre; gehen Sie davon aus, dass Sie zum jetzigen Zeitpunkt wesentlich
länger brauchen und die angegebene Zeit erst nach ausreichender Übung erreichen.
* leichte Aufgabe / ** mittelschwere Aufgabe / *** schwere Aufgabe
Aufgabe 1 + 2 (Maschinenprogramme)
a) (Maschinenprogramm erstellen)
(i) (*, 2 Minuten) Erstellen Sie ein Maschinenprogramm, das den Wert an S1 verdoppelt und
dann zurückgibt.
P1: ADD S1, S1
P2: RÜCKGABE S1
(ii) (**, 4 Minuten) Erstellen Sie ein Maschinenprogramm, das den Wert an S1 verdreifacht
und dann zurückgibt.
P1: INIT S2
P2: ADD S2, S1
P3: ADD S1, S2
P4: ADD S1, S2
P5: RÜCKGABE S1
(iii) (**, 6 Minuten) Erstellen Sie ein Maschinenprogramm, das 0 zurückgibt, wenn der Wert
an S1 gleich Null ist, und sonst 1 zurückgibt.
P1: SPRUNG0 P3, S1
P2: RÜCKGABE D2
P3: RÜCKGABE D1
D1: 0
D2: 1
(iv) (***, 8 Minuten) Erstellen Sie ein Maschinenprogramm, das die an S1 und S2 gespeicherten
Werte multipliziert und das Ergebnis zurückgibt.
P1: INIT S3
P2: SPRUNG0 P6, S2
P3: ADD S3, S1
P4: DEKREMENT S2
P5: SPRUNG P2
P6: RÜCKGABE S3
b) (Maschinenprogramm zu C-Funktion)
In dieser Teilaufgabe ist jeweils eine C-Funktion vorgegeben. Sie sollen ein Maschinenprogramm
erstellen, das diese C-Funktion realisiert. Geben Sie dazu jeweils an, welche Adressen Sie für
Eingabeparameter und lokale Variablen benutzen.
int get_odd(int a)
{
a = a + a;
--a;
return a;
}
Eingabeparameter a = Adresse S1
P1: ADD S1, S1
P2: DEKREMENT S1
P3: RÜCKGABE S1
int is_odd(int a)
{
int r = 0;
while (a != 0) {
if (r == 0) {
++r;
} else {
--r;
}
2
--a;
}
return r;
}
Eingabeparameter a = Adresse S1
Variable r = Adresse S2
P1: INIT S2
P2: SPRUNG0 P9, S1
P3: SPRUNG0 P6, S2
P4: DEKREMENT S2
P5: SPRUNG P7
P6: INKREMENT S2
P7: DEKREMENT S1
P8: SPRUNG P2
P9: RÜCKGABE S2
c) (C-Funktion zu Maschinenprogramm)
In dieser Teilaufgabe ist jeweils ein Maschinenprogramm vorgegeben. Sie sollen eine C-Funktion
erstellen, die durch dieses Maschinenprogramm realisiert wird. Geben Sie dazu jeweils an, welche
Konstanten, Eingabeparameter und lokale Variablen Sie den verwendeten Adressen zuordnen,
und geben Sie der C-Funktion einen Namen, der die von ihr (bzw. die vom Maschinenprogramm)
ausgeführte Aufgabe beschreibt.
P1: INIT S2
P2: ADD S2,S1
P3: SUB S1,S2
P4: SUB S1,S2
P5: RÜCKGABE S1
Eingabeparameter a = Adresse S1
int get_neg (int a) {
return -a;
}
P1: INIT S3
P2: ADD S3,S2
P3: SUB S3,S1
P4: SUB S3,S1
P5: SPRUNG0 P7,S3
P6: RÜCKGABE D1
P7: RÜCKGABE D2
D1: 0
D2: 1
Eingabeparameter a = Adresse S1
Eingabeparameter b = Adresse S2
int is_double(int a, int b) {
return (b == 2 * a);
}
P1: INIT S2
P2: SPRUNG0 P6,S1
P3: ADD S2,S1
P4: DEKREMENT S1
P5: SPRUNG P2
P6: RÜCKGABE S2
3
Eingabeparameter a = Adresse S1
Variable b = Adresse S2
int gauss_sum(int a) {
int b = 0;
while (a != 0) {
b = b + a;
--a;
}
return b;
}
In dieser Aufgabe sollen Sie die Abarbeitung eines Maschinenbefehls durch die CPU mittels
Fetch/Decode/Execute/Write-Back
beschreiben, wobei Sie dabei auf eine detaillierte Darstellung der Kommunikation zwischen Spei-
cherwerk und Steuerwerk verzichten (siehe Folien 97 und 98 aus Kapitel 2).
Geben Sie dabei insbesondere alle relevanten Register und deren jeweilige Belegung an.
4
c) (*, 6 Minuten) Beschreiben Sie die Abarbeitung des Maschinenbefehls an Adresse P3
1. Fetch:
Hole den Inhalt von SZ P3 über RM nach IR
Setze Befehlszähler PC auf den nächsten Adresswert P4
2. Decode:
Erkenne, dass es sich um die ADD-Operation für die SZ S1 und S2 handelt
(E) Lade Inhalt von SZ S1 über RM nach AR1
(E) Lade Inhalt von SZ S2 über RM nach AR2
3. Execute:
(V) Führe ADD-Operation aus (Ergebnis liegt in AR3)
4. Write-Back:
(A) Schreibe Ergebnis von AR3 über WM nach SZ S2
In dieser Aufgabe sollen Sie detailliert die Kommunikation zwischen Steuerwerk und Speicher-
werk über Register und Steuersignale bei Schreib- und Lesevorgängen beschreiben (siehe Folie
102).
Geben Sie dabei insbesondere alle relevanten Register und deren jeweilige Belegung an.
a) (**, 8 Minuten) Beschreiben Sie detailliert die Kommunikation zwischen Steuerwerk und
Speicherwerk beim Lesen des Befehls im Fetch-Schritt der Abarbeitung des Maschinenbe-
fehls an Adresse P1.
– Steuerwerk ’schreibt’ P1 nach AM
– Steuerwerk setzt D auf Lesen (0)
– Steuerwerk sendet A
– Speicherwerk ’liest’ Adresse von AM (P1)
– Speicherwerk ’schreibt’ Befehl an dieser Adresse nach RM
– Speicherwerk sendet T
– Steuerwerk ’schreibt’ Befehl von RM nach IR
b) (**, 8 Minuten) Beschreiben Sie detailliert die Kommunikation zwischen Steuerwerk und
Speicherwerk beim Lesen des ersten Operanden im Decode-Schritt der Abarbeitung des
Maschinenbefehls an Adresse P3.
– Steuerwerk ’schreibt’ Adresse S2 nach AM
– Steuerwerk setzt D auf Lesen (0)
– Steuerwerk sendet Signal A
– Speicherwerk ’liest’ Adresse von AM (S2)
– Speicherwerk ’schreibt’ Wert an dieser Adresse nach RM
– Speicherwerk sendet T
– Steuerwerk ’schreibt’ Wert von RM nach AR
5
c) (**, 8 Minuten) Beschreiben Sie detailliert die Kommunikation zwischen Steuerwerk und
Speicherwerk beim Schreiben des Ergebnisses im Write-Back-Schritt der Abarbeitung des
Maschinenbefehls an Adresse P3.
– Steuerwerk ’schreibt’ Adresse S2 nach AM
– Steuerwerk ’schreibt’ Wert von AR nach WM
– Steuerwerk setzt D auf Schreiben (1)
– Steuerwerk sendet Signal A
– Speicherwerk ’liest’ Adresse von AM (S2)
– Speicherwerk ’liest’ Wert von WM
– Speicherwerk überschreibt Inhalt der SZ S2 mit diesem Wert
– Speicherwerk sendet T