Musterlösungen zum 6.¨Ubungsblatt
Musterlösungen zum 6.¨Ubungsblatt
Musterlösungen zum 6.¨Ubungsblatt
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Musterlösungen</strong> <strong>zum</strong> 6. Übungsblatt zur Vorlesung ” Rechnerorganisation“ im Sommersemester 20112<br />
Lösung 2<br />
# Berechnung der Quadratwurzel<br />
.data<br />
cr_string: .asciiz "\n" # Sonderzeichen "neue Zeile"<br />
eingabe_str: .asciiz "Bitte geben Sie eine positive Integer-Zahl ein: "<br />
result_str: .asciiz "Ergebnis = "<br />
.text<br />
# Prozedur: Ausgabe eine Integer-Zahl mit CR<br />
print_int: li $v0, 1 # print_int<br />
syscall<br />
la $a0, cr_string<br />
li $v0, 4 # print-str (cr_string)<br />
syscall<br />
jr $ra<br />
# Prozedur: Quadratwurzel einer Integerzahl (Parameter in $a0, Ergebnis in $v0)<br />
sqrt_int: move $t0, $a0 # Argument in $t0 sichern<br />
label1: move $t2, $t0 # altes Ergebnis in $t2 sichern<br />
divu $a0, $t0 # Teile $a0 durch $t0 (x_n)<br />
mflo $t1 # Lade Quotient aus Register LO in $t2<br />
addu $t0, $t0, $t1 # addiere Quotient zu $t0 (a / x_n)<br />
srl $t0, $t0, 1 # halbiere $t0<br />
bgt $t2, $t0, label1 # wenn $t2 (altes Ergebnis) > $t0, dann zu label1<br />
move $v0, $t2 # Ergebnis in $v0 schreiben<br />
jr $ra<br />
# Start des Hauptprogrammes<br />
.globl main<br />
main: subu $sp, $sp, 8 # Stack Frame ist 8 Bytes<br />
sw $ra, 4($sp) # Sichern der Ruecksprungadresse<br />
sw $fp, 8($sp) # Sichern des alten Frame-Pointers<br />
addu $fp, $sp, 8 # neuen Frame-Pointer definieren<br />
la $a0, eingabe_str # print_str<br />
li $v0, 4<br />
syscall<br />
li $v0, 5 # read_int (a einlesen)<br />
syscall<br />
move $a0, $v0 # a im Register $a0 speichern<br />
jal sqrt_int # Quadratwurzel berechnen<br />
move $s0, $v0 # Ergebnis in $s0 sichern<br />
la $a0, result_str<br />
li $v0, 4 # print_str (result_str)<br />
syscall<br />
move $a0, $s0 # Ausgabe Ergebnis<br />
jal print_int<br />
lw $ra, 4($sp) # Ruecksprungadresse wiederherstellen<br />
lw $fp, 8($sp) # Frame-Pointer wiederherstellen<br />
addu $sp, $sp, 8 # Stack-Frame loeschen<br />
jr $ra