Files
2025-03-26 09:10:55 +01:00

149 lines
3.5 KiB
NASM

########################################################################################
# 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 ################################
################################################################################################