06.10.2013 Aufrufe

Musterlösungen zum 6.¨Ubungsblatt

Musterlösungen zum 6.¨Ubungsblatt

Musterlösungen zum 6.¨Ubungsblatt

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!