Dokumente und Mars-Simulator
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
########################################################################################
|
||||
# Liest 2 Integerzahlen ein, ruft 4 Unterprogramme auf, in denen die Zahlen addiert, #
|
||||
# subtrahiert, multipliziert und dividiert werden, gibt die jeweiligen Ergebnisse aus.#
|
||||
# Leicht modifizierte und uebersetzte (aus DLX-Assembler) Version einiger STA aus #
|
||||
# dem Kurstext Computersysteme I, Version 2011 #
|
||||
########################################################################################
|
||||
|
||||
.data
|
||||
prompt1: .asciiz "\nBitte die erste Zahl eingeben, x = "
|
||||
prompt2: .asciiz "\nBitte die zweite Zahl eingeben, y = "
|
||||
.text
|
||||
main:
|
||||
# Ausgabe der ersten Nachricht prompt1
|
||||
li $v0, 4 # der Wert 4 fuer den syscall bedeutet: print string
|
||||
la $a0, prompt1 # laedt die Adresse des ersten Strings in $a0
|
||||
syscall
|
||||
|
||||
# erste Zahl einlesen und im Parameteruebergabe-Register $a1 ablegen
|
||||
li $v0, 5 # der Wert 5 fuer den syscall bedeutet: read integer
|
||||
syscall
|
||||
move $a1, $v0
|
||||
|
||||
# Ausgabe der zweiten Nachricht prompt2
|
||||
li $v0, 4
|
||||
la $a0, prompt2 # Adresse des zweiten Strings in $a0 laden
|
||||
syscall
|
||||
|
||||
# zweite Zahl einlesen und im Parameteruebergabe-Register $a2 ablegen
|
||||
li $v0, 5
|
||||
syscall
|
||||
move $a2, $v0
|
||||
|
||||
# Aufrufe der Unterprogramme
|
||||
jal add
|
||||
jal sub
|
||||
jal mul
|
||||
jal div
|
||||
|
||||
# exit
|
||||
li $v0, 10
|
||||
syscall
|
||||
|
||||
#############################################################################################
|
||||
############# Unterprogramme ####################
|
||||
#############################################################################################
|
||||
|
||||
# Additionsfunktion wie in a)
|
||||
add:
|
||||
.data
|
||||
message_add: .asciiz "\nDas Ergebnis der Addition ist x + y = "
|
||||
.text
|
||||
# Addition
|
||||
add $t1, $a1, $a2
|
||||
|
||||
# Ausgabe der Nachricht
|
||||
li $v0, 4
|
||||
la $a0, message_add
|
||||
syscall
|
||||
|
||||
# Ausgabe der Summe
|
||||
li $v0, 1
|
||||
move $a0, $t1
|
||||
syscall
|
||||
|
||||
# Ruecksprung
|
||||
jr $ra
|
||||
|
||||
|
||||
# Subtraktionsfunktion wie in b)
|
||||
sub:
|
||||
|
||||
.data
|
||||
message_sub: .asciiz "\nDas Ergebnis der Subtraktion ist x - y = "
|
||||
|
||||
.text
|
||||
# Subtraktion
|
||||
sub $t1, $a1, $a2
|
||||
|
||||
# Ausgabe der Nachricht
|
||||
li $v0, 4
|
||||
la $a0, message_sub
|
||||
syscall
|
||||
|
||||
# Ausgabe der Differenz
|
||||
li $v0, 1
|
||||
move $a0, $t1
|
||||
syscall
|
||||
|
||||
# Ruecksprung
|
||||
jr $ra
|
||||
|
||||
|
||||
# Multiplikationsfunktion wie in c)
|
||||
mul:
|
||||
.data
|
||||
message_mul: .asciiz "\nDas Ergebnis der Multiplikation als double ist x * y = "
|
||||
|
||||
.text
|
||||
# Multiplikation
|
||||
mul $t1, $a1, $a2
|
||||
|
||||
# Transport des Produkts zu Coproc1 und Konvertieren zu double
|
||||
mtc1.d $t1, $f12
|
||||
cvt.d.w $f12, $f12
|
||||
|
||||
# Ausgabe der Nachricht
|
||||
li $v0, 4
|
||||
la $a0, message_mul
|
||||
syscall
|
||||
|
||||
# Ausgabe des Produkts
|
||||
li $v0, 3
|
||||
syscall
|
||||
|
||||
# Ruecksprung
|
||||
jr $ra
|
||||
|
||||
|
||||
# Divisionsfunktion wie in d)
|
||||
div:
|
||||
.data
|
||||
message_div: .asciiz "\nDas Ergebnis der Division ist x : y = "
|
||||
|
||||
.text
|
||||
# Transport der Zahlen zum Coproc1, Konvertieren zu double
|
||||
mtc1.d $a1, $f4
|
||||
cvt.d.w $f4, $f4
|
||||
mtc1.d $a2, $f6
|
||||
cvt.d.w $f6, $f6
|
||||
|
||||
# Division
|
||||
div.d $f12, $f4, $f6
|
||||
|
||||
# Ausgabe der Nachricht
|
||||
li $v0, 4
|
||||
la $a0, message_div
|
||||
syscall
|
||||
|
||||
# Ausgabe des Quotienten
|
||||
li, $v0, 3
|
||||
syscall
|
||||
|
||||
# Ruecksprung
|
||||
jr $ra
|
||||
|
||||
################################################################################################
|
||||
########################## Ende der Unterprogramme ################################
|
||||
################################################################################################
|
||||
Binary file not shown.
Reference in New Issue
Block a user