U05 - Wintersemester PDF

Title U05 - Wintersemester
Author Mou Ammari
Course Rechnerarchitektur und Rechnernetze
Institution Universität Bayreuth
Pages 2
File Size 97.4 KB
File Type PDF
Total Downloads 51
Total Views 150

Summary

Wintersemester...


Description

Lehrstuhl für Angewandte Informatik II Universität Bayreuth, Universitätsstraße 30, 95447 Bayreuth PD Dr. Matthias Korch Dr. Natalia Kalinnik Dr. Andreas Prell Matthias Stachowski, M.Sc.

Tel.: 0921/55 7705 Tel.: 0921/55 7704 Tel.: 0921/55 7709 Tel.: 0921/55 7710

Büro: AI 2.11 Büro: AI 2.10 Büro: AI 2.14 Büro: AI 2.15

Internet: https://elearning.uni-bayreuth.de/course/view.php?id=18016 E-Mails: {korch, natalia.kalinnik, andreas.prell, matthias.stachowski}@uni-bayreuth.de

5. Übung zur Vorlesung „Rechnerarchitektur und Rechnernetze“ Wintersemester 2017/2018

15. 11. 2017

Abgabe: Mittwoch, 22. 11. 2017, 14.15 Uhr (vor Beginn der Vorlesung, H33) Hinweis: Um Ihre Lösungen der Programmieraufgaben testen zu können, benötigen wir diese zusätzlich zur schriftlichen Abgabe in digitaler Form als reine Textdateien (*.s oder *.asm; keine Word-Dokumente o. ä.). Senden Sie uns diese bitte an die E-Mail-Adresse [email protected] mit einem Vermerk, welchen MIPS-Simulator (Mars, SPIM) Sie auf welcher Plattform (Windows, Linux etc.) benutzt haben. Die Lösungen der Programmieraufgaben werden nur dann als richtig gewertet, wenn sowohl eine E-Mail-Abgabe als auch eine schriftliche Abgabe vorliegen und die Programme nachvol lziehbar kommentiert sind. (6 + 2 Punkte)

Aufgabe 5.1

(a) Schreiben Sie ein MIPS-Assemblerprogramm, das zuerst einen Integer n einliest, dann n Integerzahlen a1 , . . . , an einliest, auf den Stack schreibt und in umgekehrter Reihenfolge wieder ausgibt. Dokumentieren Sie Ihr Programm kurz und prägnant. Achtung: Der Stackpointer $sp soll immer auf die letzte belegte Speicherzelle des Stacks zeigen! (b) Geben Sie die Adresse der Speicherzelle an, auf die der Stackpointer $sp zeigt, nachdem Sie den Simulator Ihrer Wahl aufgerufen und das Assemblerprogramm aus Aufgabe (a) geladen haben. Starten Sie dann das Assemblerprogramm mit der Eingabe n = 5 und fünf beliebigen Integerzahlen für a1 , . . . , a5 . Auf welche Speicherzelle zeigt der Stackpointer $sp, nachdem die fünf Integerzahlen auf den Stack geschrieben wurden? Unter welchen Adressen sind die Werte a1 , a2 , a3 , a4 , a5 im Stack gespeichert?

(4 Punkte)

Aufgabe 5.2 Betrachten Sie folgendes (unoptimiertes) MIPS-Assemblerprogramm: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

. text . g lo bl main # in t p roc B (in t a , in t b) # { # in t c = 0; # c = a + b; # retu rn c; # } p rocB : a ddi $sp , $sp , -8 sw $ra , 4( $sp ) sw $zero , 0( $sp ) a dd $t0 , $a0 , $a 1 sw $t0 , 0( $sp ) lw $v0 , 0( $sp )

1

lw $ra , 4( $sp ) a ddi $sp , $sp , 8 jr $ra # in t p roc A (in t a , in t b) # { # ret u rn a * p ro cB ( a , b ); # } p rocA : a ddi $sp , $sp , -12 sw $ra , 8( $sp ) sw $a 1 , 4( $sp ) sw $a 0 , 0( $sp ) j a l p rocB lw $a 0 , 0( $sp ) lw $a 1 , 4( $sp )

35 36 37 38 39 40 41 42 43 44

lw mu l a ddi jr

45 46 47 48 49 50 51 52 53

$ra , 8( $sp ) $v0 , $a0 , $v0 $sp , $sp , 12 $ra

# in t main () # { # p rin t_in t ( p rocA (2 , 3)); # exit (); # }

main : li $a 0 , 2 li $a 1 , 3 j a l p rocA move $a0 , $v0 li $v0 , 1 sysca ll li $v0 , 10 sysca ll

Illustrieren Sie, wie sich der Laufzeitstack während der Ausführung des Programms verändert, indem Sie den Laufzeitstack (mit Stackpointer) und die dort gespeicherten Werte zu folgenden Zeitpunkten skizzieren: (a) bevor Prozedur procA aufgerufen wird, zu Beginn von Zeile 48, (b) nachdem Prozedur procA aufgerufen wurde, zu Beginn von Zeile 29, (c) nachdem Prozedur procB aufgerufen wurde, zu Beginn von Zeile 15, und (d) nachdem Prozedur procB beendet wurde, zu Beginn von Zeile 33. Hinweis: “Zu Beginn von Zeile x” bedeutet, dass die Anweisung in Zeile x noch nicht ausgeführt wurde. Die Programmausführung beginnt bei Label main. (5 + 3 Punkte)

Aufgabe 5.3

(a) Schreiben Sie in der MIPS-Assemblersprache eine Prozedur, die das Produkt zweier ganzer Zahlen (positiv oder negativ) mittels Addition durch Ausnutzung der Beziehung a · b = sgn(b) ·

|b| X

a

i=1

berechnet und zurückgibt. (sgn bezeichnet die Vorzeichenfunktion, die positiven Zahlen den Wert +1, negativen Zahlen den Wert −1 und der 0 den Wert 0 zuordnet.) Orientieren Sie sich bei der Umsetzung an folgendem Pseudocode: int mult(int a, int b) { int p = 0; for (int i = 1; i...


Similar Free PDFs