T
The_S
Hallo,
ich muss mich aktuell fürs Studium mit DLX (verwende WinDLX) rumärgern, habe hierzu ein paar Fragen und hoffe, dass sich hier jemand findet, der sich damit auskennt und mir helfen kann
:
1.) Was hat es genau mit dem .align auf sich? Es wird verwendet, um den Abstand zum nächsten Datensatz zu spezifizieren ... ok. Aber für was benötige ich das überhaupt? Es kann mir doch eigentlich relativ egal sein, wo und in welchem Abstand der nächste Datensatz beginnt?
2.) Eine Aufgabe aus meinem Skript lautete:
Über die Eingabeaufforderung sollen zunächst zwei Integerzahlen eingelesen
werden. Schreiben Sie ein Programm welches das Produkt der beiden Zahlen berechnet, wobei das Ergebnis ins Gleitkommazahlen-Format umgewandelt werden soll.
Meine Lösung hierzu lautet:
Es wird der richtige Wert in das Register F2 geschrieben, aber auf der Ausgabebox wird "0" als Ergebnis ausgegeben. Wo liegt mein Fehler? Konvertiere ich stattdessen das Ergebnis in eine Fließkommazahl mit doppelter Genauigkeit (steht so in der Musterlösung), ersetze also cvti2f durch cvti2d und sf PrintRes,f2 durch sd PrintRes,f2 (Zeile 27 und 28) funktioniert das Programm. Mir ist nur nicht so klar warum meine Version nicht funktioniert.
Auch ist mir nicht klar, warum bei der Musterlösung nicht das Register d2 (für doppelte Genauigkeit) sondern weiterhin f2 (für einfache Genauigkeit) verwendet wird!?
Wäre super, wenn mir jemand helfen könnte
Grüße
ich muss mich aktuell fürs Studium mit DLX (verwende WinDLX) rumärgern, habe hierzu ein paar Fragen und hoffe, dass sich hier jemand findet, der sich damit auskennt und mir helfen kann

1.) Was hat es genau mit dem .align auf sich? Es wird verwendet, um den Abstand zum nächsten Datensatz zu spezifizieren ... ok. Aber für was benötige ich das überhaupt? Es kann mir doch eigentlich relativ egal sein, wo und in welchem Abstand der nächste Datensatz beginnt?
2.) Eine Aufgabe aus meinem Skript lautete:
Über die Eingabeaufforderung sollen zunächst zwei Integerzahlen eingelesen
werden. Schreiben Sie ein Programm welches das Produkt der beiden Zahlen berechnet, wobei das Ergebnis ins Gleitkommazahlen-Format umgewandelt werden soll.
Meine Lösung hierzu lautet:
Code:
.data
Prompt1: .asciiz "Enter first number:"
.align 4
Prompt2: .asciiz "Enter second number:"
.align 4
PrintFt: .asciiz "%d * %d = %g"
.align 6
PrintPar: .word PrintFt
Int1: .space 4
Int2: .space 4
PrintRes: .space 4
.text
.global main
main:
addi r1,r0,Prompt1
jal InputUnsigned
sw Int1,r1
add r2,r0,r1
addi r1,r0,Prompt2
jal InputUnsigned
sw Int2,r1
mult r3,r1,r2
movi2fp f2,r3
cvti2f f2,f2
sf PrintRes,f2
addi r14,r0,PrintPar
trap 5
trap 0
Es wird der richtige Wert in das Register F2 geschrieben, aber auf der Ausgabebox wird "0" als Ergebnis ausgegeben. Wo liegt mein Fehler? Konvertiere ich stattdessen das Ergebnis in eine Fließkommazahl mit doppelter Genauigkeit (steht so in der Musterlösung), ersetze also cvti2f durch cvti2d und sf PrintRes,f2 durch sd PrintRes,f2 (Zeile 27 und 28) funktioniert das Programm. Mir ist nur nicht so klar warum meine Version nicht funktioniert.
Auch ist mir nicht klar, warum bei der Musterlösung nicht das Register d2 (für doppelte Genauigkeit) sondern weiterhin f2 (für einfache Genauigkeit) verwendet wird!?
Wäre super, wenn mir jemand helfen könnte

Grüße