Files
nand2tetris/MARS/Simulationen/Simulation 12 Division mit Eingabe und Ausgabe des Quotienten/Simulation 12.asm
2025-03-26 09:10:55 +01:00

55 lines
1.5 KiB
NASM

###########################################################################
# liest zwei Integerzahlen ein, dividiert die erste durch die zweite und #
# und gibt das Ergebnis als Gleitkommazahl in doppelter Genauigkeit aus #
###########################################################################
.data
prompt1: .asciiz "\nBitte die erste Zahl (den Dividenden) eingeben, x = "
prompt2: .asciiz "\nBitte die zweite Zahl (den Divisor) eingeben, y = "
message: .asciiz "\nDas Ergebnis der Division (der Quotient) ist x : y = "
.text
# 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 temporaeren Register $t0 ablegen
li $v0, 5 # der Wert 5 fuer den syscall bedeutet: read integer
syscall
move $t0, $v0
# erste Zahl zum Coproc 1 transferieren und konvertieren
mtc1.d $t0, $f4
cvt.d.w $f4, $f4
# Ausgabe der zweiten Nachricht: prompt2
li $v0, 4
la $a0, prompt2
syscall
# zweite Zahl einlesen und in $t1 ablegen
li $v0, 5
syscall
move $t1, $v0
# zweite Zahl zum Coproc 1 transferieren und konvertieren
mtc1.d $t1, $f6
cvt.d.w $f6, $f6
# Division durchfuehren, Ergebnis in $f12 speichern
div.d $f12, $f4, $f6
# Ausgabe der dritten Nachricht: message
li $v0, 4
la $a0, message
syscall
# Ausgabe des Quotienten
li $v0, 3 # der Wert 3 fuer den syscall bedeutet: $f12 = double to print
syscall
# exit
li $v0, 10
syscall