Ueb 03
Ueb 03
Ueb 03
703 WS 2018/19
_________________________________________________________
Übungsblatt 3
Abgabe der MIPS-Assembler-Programme: Die Lösungen zu den Übungsaufgaben 3.2 – 3.6 sind vor
Ende der Kreuzelfrist via Moodle abzugeben (nur für angekreuzte Aufgaben). Packen Sie dafür den
MIPS-Assembler-Code als Textdateien, die mit MARS ausführbar sind, in eine einzige ZIP-Datei.
Machen Sie sich mit den MIPS-Prozeduraufrufskonventionen vertraut, und beantworten Sie
folgende Fragen:
(a) Wie erfolgt die Parameterübergabe an Prozeduren? Welche Rolle spielen dabei Register und
Stack?
(b) Was versteht man unter einem procedure call frame? Unter welchen Umständen kann darauf
verzichtet werden?
(c) Worin besteht der Unterschied zwischen caller-saved bzw. callee-saved Registern? Erklären
Sie anhand der Konventionen den Gebrauch der Register $v0, $a0, $t2, $sp, $fp, $ra und
$s0.
Implementieren Sie die Funktion f(n) = n! (Fakultät 1 einer ganzen Zahl n ≥ 0) als (nicht rekursive)
MIPS-Assembler-Funktion, und schreiben Sie ein MIPS-Programm, das die Funktionswerte für
n = 0, 1, …, 10 am Bildschirm ausgibt! (Jeder Wert soll in einer neuen Zeile erscheinen.)
Geben Sie zudem (nur für die Präsentation, nicht für die Abgabe) die Werte aller im
Hauptprogramm verwendeten Register vor und nach dem Funktionsaufruf an!
Schreiben Sie eine MIPS-Assembler-Funktion, die den Binomialkoeffizienten 2 b(n, k) nach einer
der unten angeführten Formeln berechnet. Falls nötig, können Sie die Funktion aus
Übungsaufgabe 3.2 übernehmen und aufrufen. Erstellen Sie ein MIPS-Programm, das die
ganzzahligen Parameter n und k von der Tastatur einliest (Sie dürfen annehmen, dass 0 ≤ k ≤ n
gilt), b(n, k) durch Funktionsaufruf berechnet und das Ergebnis am Bildschirm ausgibt!
1 https://de.wikipedia.org/wiki/Fakult%C3%A4t_(Mathematik)
2 https://de.wikipedia.org/wiki/Binomialkoeffizient
Seite 1 von 2
𝑘𝑘
𝑛𝑛 𝑛𝑛! 𝑛𝑛 − 𝑘𝑘 + 𝑖𝑖
𝑏𝑏(𝑛𝑛, 𝑘𝑘) = � � = =�
𝑘𝑘 𝑘𝑘! (𝑛𝑛 − 𝑘𝑘)! 𝑖𝑖
𝑖𝑖=1
Hinweis: Falls Sie die letzte Formel verwenden, achten Sie bei der iterativen Produktbildung
darauf, die Multiplikation jeweils vor der Division auszuführen, um stets ganzzahlige Quotienten
zu gewährleisten.
Schreiben Sie eine rekursive MIPS-Assembler-Funktion, die die Fakultätsfunktion f(n) aus
Übungsaufgabe 3.2 implementiert. Übernehmen Sie das Hauptprogramm von derselben
Aufgabe, um Ihre Implementierung zu testen.
Schreiben Sie eine MIPS-Assembler-Funktion, die die n-te Fibonacci-Zahl F(n) durch Rekursion
berechnet (n ≥ 1 und ganzzahlig). Die Fibonacci-Zahlen sind wie folgt definiert 3:
𝐹𝐹(1) = 𝐹𝐹(2) = 1
𝐹𝐹(𝑛𝑛) = 𝐹𝐹(𝑛𝑛 − 1) + 𝐹𝐹(𝑛𝑛 − 2) für 𝑛𝑛 > 2
Übernehmen Sie das Hauptprogramm aus Übungsaufgabe 3.2, um die ersten zehn Fibonacci-
Zahlen (n = 1, 2, …, 10) am Bildschirm auszugeben.
3 http://de.wikipedia.org/wiki/Fibonacci-Folge
Seite 2 von 2