• Keine Ergebnisse gefunden

Übungen zur Vorlesung Grundlagen der Rechnerarchitektur - Sommersemester 2019 -

N/A
N/A
Protected

Academic year: 2022

Aktie "Übungen zur Vorlesung Grundlagen der Rechnerarchitektur - Sommersemester 2019 -"

Copied!
10
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Übungen zur Vorlesung

Grundlagen der Rechnerarchitektur

- Sommersemester 2019 -

Übungsblatt 4

Abgabe bis Sonntag, 23. Juni 2019, 23:59 Uhr als pdf via SVN

A1 (3)

A2 (4)

A3 (6)

A4 (4)

A5 (6)

A6 (5)

A7 (8)

A8 (8)

A9 (6)

A10 (10)

(60) Punkte

Kürzel

Von Korrektoren auszufüllen

Gruppenname:

Name Uni-Mail-Kennung

(2)

a) Welche der angegebenen Rechengesetze haben beim Rechnen mit Gleitkommazahlen keine oder nur eingeschränkte Gültigkeit? Kreuzen Sie an.

Assoziativgesetz Distributivgesetz Kommutativgesetz

b) Liefert eine der folgenden Rechenweisen bei der Berechnung mit Double-Precision Gleit- kommazahlen einen genaueren Wert? Wenn ja, begründen Sie Ihre Antwort mit wenigen Worten!

(1) d = a · b – a · c (2) d = a · (b – c)

Aufgabe 2 (4 Punkte)

Erläutern Sie kurz die Funktion der 3 im IEEE 754 Standard zusätzlich definierten Bits:

Guard-, Round- und Sticky-Bit. Wozu werden diese Bits benötigt?

(3)

Aufgabe 3 (6 Punkte)

Das Java-Programm MARS (MIPS-Assembler and Runtime-Simulator) der Missoury-State University ist ein Programm, das die MIPS-Architektur zur Ausführung von MIPS Assemb- lercode simuliert. Somit ist es möglich MIPS-Assemblerprogramme auf anderen Architek- turen auszuführen, z.B. x86. Das Programm MARS erhalten Sie hier:

http://courses.missouristate.edu/KenVollmar/MARS/download.htm

Schauen Sie sich das Programm Mars und seine Funktionsweise genau an.

Gegeben ist das folgende MIPS-Assembler Programm „mipsprogram.asm“, welches Sie auf der Webseite der Übung finden. Führen Sie das MIPS-Assembler-Programm mit MARS aus und beantworten Sie die folgenden Fragen.

.text .globl main

main:

la $a0,prompt1 li $v0,4 syscall

li $v0,5 syscall

move $s0,$v0

la $a0,prompt1 li $v0,4 syscall

li $v0,5 syscall

move $s1,$v0

div $s0,$s1 mflo $t0

mfhi $t1

la $a0,prompt2 li $v0,4 syscall

move $a0, $t0 li $v0,1 syscall

la $a0,prompt3

li $v0,4 syscall

move $a0, $t1 li $v0,1 syscall

.data

prompt1: .asciiz "Enter an integer: "

prompt2: .asciiz "The result is: "

(4)

b) Erläutern Sie den folgenden Code-Abschnitt genau. Was passiert in diesen 3 Zeilen und was steht jeweils in den Registern?

div $s0,$s1 mflo $t0 mfhi $t1

Aufgabe 4 (4 Punkte)

Verändern Sie das Programm aus Aufgabe 3 so, dass drei ganzzahlige Werte eingelesen und deren abgerundeter arithmetischer Mittelwert ((t1+t2+t3) div 3) ausgegeben wird. Ge- ben Sie Ihr Programm lauffähig ab, so dass es mit dem Mars-Simulator ausgeführt werden kann (z.B. als aufgabe4.asm).

(Hinweise zu MIPS Instructions finden Sie in MIPSInstructionSet.pdf.)

Aufgabe 5 (6 Punkte)

Verändern Sie das Programm aus Aufgabe 4 (bzw. 5) nun so, dass drei Gleitkommazahlen einfacher Genauigkeit (single precision floating point) eingelesen und deren arithmetischer Mittelwert ((f1+f2+f3) div 3) ausgegeben wird. Geben Sie Ihr Programm lauffähig ab, so dass es mit dem Mars-Simulator ausgeführt werden kann (z.B. als aufgabe5.asm).

(Hinweise zu MIPS Floating Point Instructions finden Sie in MIPS_FP_Instructions.pdf.)

(5)

Aufgabe 6 (5 Punkte)

Der MIPS-Sprungbefehl bne besitzt folgendes Befehlsformat: bne rs, rt, label.

opcode source register target register offset

Befehl bne rs rt label

Bitbreite 6 5 5 16

Der Offset, also die 16 niederwertigsten Bits der Instruktion, geben dabei die relative Zieladresse an. Hier steht der Abstand zur Zieladresse in Zweierkomplement-Darstellung.

Der Abstand ist in Wortbreiten (also 32 bit = 4 Byte) angegeben!

Angenommen in der Befehlszeile eines MIPS-Programms mit der Byteadresse 0x00400038 (hexadezimal) steht die Instruktion 0x156afffd (hexadezimal).

Dekodieren Sie die Instruktion schrittweise, d.h. geben Sie den Befehl, die Register rs und rt sowie den Offset an. Wie groß ist der Offset angegeben in Bytes? Was ergibt sich damit für eine Zieladresse?

Hinweise: Bei der Berechnung der Zieladresse muss berücksichtigt werden, dass der Program-Counter ($pc) bei der Abarbeitung einer Instruktion schon auf die nachfolgende Instruktion zeigt (+ 4 Byte). Zusätzlich muss berücksichtigt werden, dass der Abstand (Offset) in Zweierkomplement dargestellt ist und die Anzahl an zu überspringenden Instruktionszeilen angibt, jedoch auf die (Byte) Adresse im Program-Counter aufgerechnet werden soll. Bei MIPS(32) besteht eine Instruktion aus 4 Bytes (32 Bit) und da nur an den Anfang einer In- struktionsadresse gesprungen werden soll, muss der Offset hier angepasst werden (* 4 Byte). Sie können das Programm bgttest.asm zur Überprüfung verwenden und mit MARS starten.

(6)

Schreiben Sie ein MIPS-Programm, welches vier Gleitkommazahlen a, b, c und d einfacher Genauigkeit (single precision floating point) einliest. Das Programm soll die beiden Werte a und c (x = a/c) und anschließend d und b dividieren (y = d / b). Die berechneten Zwischen- ergebnisse (x und y) sollen außerdem noch ausgegeben werden. Die beiden Ergebnisse x und y sollen dann miteinander verglichen und der größere Wert in das Register $f12 ge- speichert werden. Wenn die Ergebnisse gleich groß sind, so soll 0.0 im Register $f12 ge- speichert werden. Zum Schluss soll noch der Wert in $f12 ausgegeben werden.

Geben Sie Ihr Programm lauffähig ab, so dass es mit dem Mars-Simulator ausgeführt wer- den kann, z.B. als aufgabe7.asm. Achten Sie darauf den Quelltext ausführlich zu kom- mentieren!

(7)

Aufgabe 8 (8 Punkte)

Das Produkt zweier natürlicher Zahlen a0 · a1 lässt sich rekursiv wie folgt berechnen:

a0 · 0 = 0 ; a0 · a1 = a0 · (a1 − 1) + a0

Das Programm rekmul.asm berechnet das Produkt zweier natürlicher Zahlen rekursiv. Es steht auf der Webseite der Übung zum Download zur Verfügung und lässt sich leicht mittels des MIPS-Simulators Mars ausführen.

Beantworten Sie die folgenden Fragen zum obigen Programm:

a) Was wird im Allgemeinen im Register $ra gespeichert?

Erläutern Sie in diesem Zusammenhang die Zeilen 21 und 39 (jal rekmul), sowie Zeile 47 (jr

$ra). An welcher Zeile wird das Programm nach Ausführung von Zeile 47 fortgeführt?

b) Sei a0=5 und a1=4 die Nutzereingabe.

Zeichnen Sie den Inhalts des Stack-Speichers, wenn das Programm am Label null: (in Zeile 42) angekommen ist. Verwenden Sie die gegebenen Zeilennummern (1-47) als vereinfachte Programmcode-Adresse (Inhaltswerte). Zeigen Sie auch, auf welche Adresse des Stacks der Stackpointer ($sp) nun zeigt (nehmen Sie an das $sp hier mit 80 initialisiert wird). Tragen Sie weiterhin den aktuellen Wert des Registers $a1 in eine Zeile ein sobald ein Wert im Stack gesichert wird.

Stack-Adresse Stack-Inhalt $a1 52

56 60 64 68 72 76

$sp → 80

(8)

3 prompt2: .asciiz "result is:"

4 lf: .asciiz "\n"

5 .text

6 .globl main

7 main:

8 li $v0, 4 # print string service 9 la $a0, prompt1 # write("enter value:") 10 syscall

11 li $v0, 5 # read integer 12 syscall

13 add $s0, $zero, $v0

14 li $v0, 4 # print string service 15 la $a0, prompt1 # write("enter value:") 16 syscall

17 li $v0, 5 # read integer 18 syscall

19 add $a1, $zero, $v0 20 add $a0, $zero, $s0

21 jal rekmul # Jump to Subroutine

# Return from Subroutine here!

22 add $s0, $zero, $v0 # Save return value in $s0 23 li $v0, 4 # print string service 24 la $a0, prompt2 # write("result is:") 25 syscall

26 li $v0, 1 # print integer service 27 add $a0, $zero, $s0 # write ($s0)

28 syscall

29 li $v0, 4 # print string service 30 la $a0, lf # write line feed 31 syscall

32 li $v0, 10 # Exit program 33 syscall

34 rekmul:

35 addi $sp,$sp, -4 36 sw $ra, 4($sp)

37 beq $a1, $zero, null # if a1=0 then goto null 38 addi $a1, $a1, -1 # calculate a1-1

39 jal rekmul # v0=rekmul(a0,a1-1)

40 add $v0, $v0, $a0 # v0=rekmul(a0,a1-1) + a0

41 j return # jump to return

42 null:

43 add $v0, $zero, $zero # rekmul(a0,0)=0

44 return:

45 lw $ra, 4($sp) 46 addi $sp,$sp, 4

47 jr $ra # return

(9)

Aufgabe 9 (6 Punkte)

Wenn in MIPS zwei Integer Zahlen multipliziert werden, dann steht das Ergebnis in den Registern Hi und Lo, welche mittels der Instruktionen mfhi und mflo zugreifbar sind.

Betrachten Sie folgendes Beispiel:

mult $s0, $s1 mfhi $t0 mflo $t1

a) Wieso haben die MIPS Architekten für die mult Instruktion nicht drei Register benutzt, wie zum Beispiel bei der Instruktion add? (Erläutern Sie kurz!)

b) Angenommen die drei Integer Zahlen i,j,k sind in drei MIPS Registern gespeichert. Wie viele words werden benötigt um das Produkt i*j*k zu speichern? (Erläutern Sie Ihre Antwort kurz und präzise!)

c) Wie kann man in MIPS das Produkt aus drei Integer Zahlen i*j*k berechnen? (Hinweis:

Sie müssen hier keinen syntaktisch korrekten Code beschreiben, es reicht wenn Sie die Idee angeben.)

(10)

Schreiben Sie ein MIPS Programm, das eine Integer-Zahl n einliest. Anschließend soll für nicht negative Eingaben mittels einer rekursiven Subroutine die n-te Fibonacci Zahl fn be- rechnet und ausgegeben werden.

function fib (int n) {

IF (n < 0) {return -1} // Fehler IF (n = 0) {return 0}

IF (n = 1) {return 1}

ELSE { return (fib(n-1)+fib(n-2)) } }

Beachten Sie bei der Bearbeitung dieser Aufgabe die Konventionen (Procedure Call Con- ventions) von MIPS, die in der Vorlesung vorgestellt wurden. Sie können sich bei Ihrer Lö- sung an dem Beispielprogramm fakultaet.asm orientieren. (Hinweis: eine explizite Fehler- behandlung für den Fall n < 0 wird hier nicht verlangt, es reicht wenn bei Eingabe von ne- gativen Zahlen der Wert -1 ausgegeben wird.)

Bitte fügen Sie Ihrer Abgabe eine Datei aufgabe10.asm bei, welche im Simulator Mars feh- lerfrei kompiliert und die zuvor genannte Aufgabenstellung bei Ausführung löst.

Referenzen

ÄHNLICHE DOKUMENTE

Betrachte Beispiel 3.12 von Folie 169, die Arithmetik der

Betrachte Beispiel 3.12 von Folie 169, die Arithmetik der

Finden Sie jeweils die vollst¨ andige

d) Wandeln Sie die Dezimalzahlen 350 10 und 12 10 ins Binärsystem um und dividieren Sie die beiden Binärzahlen schriftlich (nach der Schulmethode).. Gehen Sie dabei schrittweise

b) Wovon hängt der Speed-Up einer Pipeline generell ab. c) Nennen Sie kurz Vor- und Nachteile von Pipelining gegenüber der Parallelverarbeitung zur Leistungssteigerung. d) Nennen

Falls → konfluent ist, dann hat jedes Objekt h¨ochstens eine Normalform. Uniforme Konfluenz: → ist uniform

[r]

Der Adressat des Briefes, der Marquis de l’Hˆ opital, hat es in der Wissen- schaftsgeschichte durch einen wohl einmaligen Vorgang zu zweifelhaftem Ruhm ge- bracht.. Die von