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:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
        .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