U ̈bung3 RAWiSe18/19
Die U ̈bungen 3 und 4 werden mit MARS durchgefu ̈hrt. MARS ist ein Simulator/Debugger fu ̈r den MIPS Instruktionssatz. MIPS Assemblerprogramme ko ̈nnen in MARS geladen und ausgefu ̈hrt werden. MARS stellt die Registerinhalte und die Inhalte der verschiede- nen Segmente im Speicher dar, erlaubt das Setzen von Breakpoints, single-stepping, etc. MARS und die Dokumentation zu MARS sind auf der PANDA-Seite verlinkt.
Aufgabe 1 (Ein erstes Assemblerprogramm)
Gegeben ist folgendes Assemblerprogramm:
# SimpleComputation.s
#
#
.data # start data section
prompt: .asciiz “\nEnter number: \n”
answer: .asciiz “Result = ”
main:
.text
addi $v0, $zero, 4
la $a0, prompt
syscall
addi $v0, $zero, 5
syscall
addi $t0, $v0, 1
mul $t1, $t0, $v0
srl $t1, $t1, 1
addi $v0, $zero, 4
la $a0, answer
syscall
add $a0, $t1, $zero
addi $v0, $zero, 1
syscall
addi $v0, $zero, 10
syscall
# start text section
# load system call for print_string
# print prompt
# load system call code for read_int
# read a number n, value in $v0
# compute ?
# result in $a0
# load system call for print_string
# print answer message
# move result to $a0
# load system call code for print_int
# print result
# load system call code for exit
# exit the program
(1) Machen Sie sich mit MARS vertraut. Laden Sie dazu den source code des Assembler- programms Aufgabe1.s von der PANDA-Seite. Starten Sie den MARS Simulator, laden sie das Assemblerprogramm und testen Sie das Programm. Probieren Sie ver- schiedene Funktionen des Simulators aus (zB. Go, Single-Step).
Seite 1 / 2
U ̈bung3 RAWiSe18/19
(2) Was berechnet dieses Programm?
(3) Erweitern Sie das Programm um die U ̈berpru ̈fung, ob die eingegebene Zahl negativ ist. Falls ja, geben Sie eine Fehlermeldung aus und beenden Sie das Programm.
(4) Erweitern Sie das Programm so, dass in einer Schleife nach einer Eingabe verlangt und das Resultat berechnet wird. Bei Eingabe einer negativen Zahl geben Sie eine Fehlermeldung aus und fragen weiter nach einer Eingabe. Bei Eingabe von 0 beenden Sie das Programm.
Aufgabe 2 (Fibonacci-Folge)
Schreiben Sie ein Assemblerprogramm, das die ersten n Fibonacci-Zahlen ausgibt. Die Fibonacci-Zahlen sind durch folgende rekursive Bildungsvorschrift bestimmt:
F(n)=F(n−1)+F(n−2); F(0)=0;F(1)=1 (1) Hinweis 1: Implementieren Sie keine rekursive, sondern eine iterative Lo ̈sung.
Hinweis 2: Verwenden Sie das Programmgeru ̈st aus Aufgabe 1.
Aufgabe 3 (Primzahlentest)
(1) Schreiben Sie ein Assemblerprogramm, das fu ̈r eine positive, ganze Zahl n feststellt,
ob sie eine Primzahl ist.
(2) Wandeln Sie den Primzahlentest in eine Prozedur test prime(n) um, die 1 zuru ̈ck- gibt, falls n eine Primzahl ist und 0 sonst. Schreiben Sie basierend auf dieser Pro- zedur ein Assemblerprogramm, das die ersten m Primzahlen findet.
Aufgabe 4 (Integer-To-DigitsText)
Schreiben Sie ein Programm, das die einzelnen Stellen einer ganzen, positiven Zahl in Textform ausgibt. Ist die Zahl zB. 174, sollte die Ausgabe eins sieben vier sein.
Seite 2 / 2