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