0% fanden dieses Dokument nützlich (0 Abstimmungen)
6 Ansichten2 Seiten

Ueb 03

Als pdf oder txt herunterladen
Als pdf oder txt herunterladen
Als pdf oder txt herunterladen
Sie sind auf Seite 1/ 2

PR RECHNERORGANISATION 621.701 – 621.

703 WS 2018/19

Institut für Informationstechnologie (ITEC) Raffelsberger / Taschwer / Timmerer

_________________________________________________________

Ü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.

Achten Sie bei allen Assembler-Programmen darauf, dass die MIPS-Prozeduraufrufskonventionen


eingehalten werden!

Ü 3.1 MIPS-Prozeduraufrufe – Grundlagen

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.

Ü 3.2 MIPS – Funktion mit einem Parameter

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!

Ü 3.3 MIPS – Funktion mit zwei Parametern

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.

Ü 3.4 MIPS – Einfach rekursive Funktion

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.

Hinweis: es gilt f(n) = n * f(n-1) für n > 0 und f(0) = 1.

Ü 3.5 MIPS – Doppelt rekursive Funktion mit einem Parameter

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.6 MIPS – Doppelt rekursive Funktion mit zwei Parametern

Schreiben Sie eine rekursive MIPS-Assembler-Funktion zur Berechnung des Binomial-


koeffizienten b(n, k) (vgl. Übungsaufgabe 3.3). Übernehmen Sie das Hauptprogramm aus
Übungsaufgabe 3.3, um die Funktion zu testen.
Hinweis: 𝑏𝑏(𝑛𝑛, 𝑘𝑘) = 𝑏𝑏(𝑛𝑛 − 1, 𝑘𝑘 − 1) + 𝑏𝑏(𝑛𝑛 − 1, 𝑘𝑘) für 0 < 𝑘𝑘 ≤ 𝑛𝑛,
𝑏𝑏(𝑛𝑛, 0) = 𝑏𝑏(𝑛𝑛, 𝑛𝑛) = 1 für 𝑛𝑛 ≥ 0.

3 http://de.wikipedia.org/wiki/Fibonacci-Folge

Seite 2 von 2

Das könnte Ihnen auch gefallen