Dokumente und Mars-Simulator

This commit is contained in:
Riwoldt
2025-03-26 09:10:55 +01:00
parent 85f594994e
commit 4501819ac9
73 changed files with 1064 additions and 0 deletions

View File

@@ -0,0 +1,87 @@
######################################################################################
# Liest eine natuerliche Zahl n <= 25 ein und gibt die ersten n Fibonacci-Zahlen aus #
## Leicht modifizierte Version der Datei Fibonacci.asm, die auf der MARS Website ##
#### unter 'Tutorial materials' zum Download zur Verfuegung steht: ####
##### http://courses.missouristate.edu/KenVollmar/mars/tutorial.htm #####
######################################################################################
.data
fibs: .word 0:25 #'array' fuer die berechneten Fibonaccizahlen
size: .word 25 # Groesse dieses 'arrays'
prompt: .asciiz "\nBitte geben Sie eine Zahl (n <= 25) an, n = "
.text
main:
la $s0, fibs # Adresse des 'arrays' laden
la $s5, size # Adresse der size Variable laden
lw $s5, 0($s5) # Arraygroesse laden
input:
# Einlesen und Ueberpruefen von n
la $a0, prompt # Adresse des Strings laden
li $v0, 4 # der Wert 4 fuer den syscall bedeutet print string
syscall # String ausgeben
li $v0, 5 # der Wert 5 fuer den syscall bedeutet: read integer
syscall # n einlesen, gelesener Wert steht in $v0
bgt $v0, $s5, input # Falls der eingegebene Wert groesser als 25 ist, neu einlesen
blt $v0, $zero, input # Falls der eingegebene Wert kleiner Null ist, neu einlesen
add $s5, $zero, $v0 # korrekt eingelesenen Wert in $s5 speichern
# Da die ersten beiden Fibonacci-Zahlen 1 sind, wird 1 direkt gespeichert
li $s2, 1
sw $s2, 0($s0) # F[0]=1
sw $s2, 4($s0) # F[1]=1
addi $s1, $s5, -2 # dient als Counter fuer die Schleife, laeuft n-2 mal
loop:
# Schleife zur Berechnung der Fibonaccizahlen
lw $s3, 0($s0) # Wert aus F[x-2] holen
lw $s4, 4($s0) # Wert aus F[x-1] holen
add $s2, $s3, $s4 # F[x] = F[x-2] + F[x-1]
sw $s2, 8($s0) # F[x] speichern
addi $s0, $s0, 4 # Inkrementieren der Adresse
addi $s1, $s1, -1 # Dekrementieren des Counters
bgtz $s1, loop # Wiederholen der Schleife loop, solange $s1>0
# Nach der Schleife liegen die Fibonacci-Zahlen vor und muessen noch ausgegeben werden
la $a0, fibs # Erster Parameter fuer die print Funktion ist das gefuellte array
add $a1, $zero, $s5 # Zweiter Parameter ist n (gespeichert in $s5)
jal print # Aufruf des Unterprogramms print
# exit
li $v0, 10
syscall
############ Unterprogramm zur Ausgabe der berechneten Fibonacci-Zahlen #########################
.data
space: .asciiz " " # Leerstelle, die zwischen den Zahlen eingefuegt wird
message: .asciiz "\nDie Fibonacci-Zahlen sind: \n"
.text
print:
add $t0, $zero, $a0 # Startadresse des arrays f<EFBFBD>r Ausgabe
add $t1, $zero, $a1 # counter
la $a0, message # Adresse des Strings 'message' laden
li $v0, 4 # Der Wert 4 fuer den syscall bedeutet print string
syscall # Ausgabe des Strings
loop2:
# Schleife zur Ausgabe der Zahlen
lw $a0, 0($t0) # Laden der aktuellen Fibonaccizahl
li $v0, 1 # der Wert 1 fuer den syscall bedeutet: print integer
syscall # Ausgabe der Zahl
la $a0, space # Laden der Adresse des Leerstellenstrings
li $v0, 4 # Der Wert 4 fuer den syscall bedeutet: print string
syscall # Leerstelle ausgeben
addi $t0, $t0, 4 # Inkrementieren der Adresse der auszugebenden Daten
addi $t1, $t1, -1 # Dekrementieren des counters
bgtz $t1, loop2 # Wiederholen der Schleife loop2, solange $t1>0
jr $ra # Ruecksprung zu main
############## Ende des Unterprogramms zur Ausgabe der Fibonacci-Zahlen ###########################