Seite 1 von 2

Praktikum online

Verfasst: 18. Jan 2010 17:28
von Thorti
Hallo,

Die Praktikumsaufgabe sowie die Code-Rahmen sind auf der Homepage der Vorlesung verfügbar.
Viel Erfolg!

Gruss
Thorsten

Re: Praktikum online

Verfasst: 18. Jan 2010 23:09
von newizz
Vielen Dank! :D
Teil 1
1 )wie ist es mit der Eingabe?
2) Ist das eine allgemeine Code oder schreiben wir nur eine geeignete Code, die mit dieser gegebene Matrix?

Re: Praktikum online

Verfasst: 19. Jan 2010 07:33
von Thorti
newizz hat geschrieben:1 )wie ist es mit der Eingabe?
Die Matrix und die Dimension soll im Code direkt stehen, siehe auch den Code-Rahmen.
2) Ist das eine allgemeine Code oder schreiben wir nur eine geeignete Code, die mit dieser gegebene Matrix?
Natürlich nicht nur für diesen Fall. Es sollen beliebige 3x3 und 4x4 Matrizen verarbeitet werden.

Gruss
Thorsten

Re: Praktikum online

Verfasst: 19. Jan 2010 12:36
von kroimon
Soo, mein Teil 1 kann jetzt Determinanten von beliebig großen Matrizen berechnen, Rekursion FTW...
Die Frage ist jetzt: Da der Code dadurch ziemlich komplex geworden ist (Verschachtelte Schleifen, Array auf Stack, etc.) ist es trotz Kommentar zu jedem Block schwer zu verstehen.
Kann ich zusätzlich zum asm einfach noch eine Datei mit Pseudo-Code (oder C-Code oder so) abgeben, die mein asm abbildet? So kann der korrigierende Tutor die beiden Sources parallel lesen, und Pseudo/C-Code ist meist leichter zu verstehen...

Re: Praktikum online

Verfasst: 19. Jan 2010 12:48
von Thorti
kroimon hat geschrieben:Soo, mein Teil 1 kann jetzt Determinanten von beliebig großen Matrizen berechnen, Rekursion FTW...
Sehr schön 8)
Die Frage ist jetzt: Da der Code dadurch ziemlich komplex geworden ist (Verschachtelte Schleifen, Array auf Stack, etc.) ist es trotz Kommentar zu jedem Block schwer zu verstehen.
Kann ich zusätzlich zum asm einfach noch eine Datei mit Pseudo-Code (oder C-Code oder so) abgeben, die mein asm abbildet? So kann der korrigierende Tutor die beiden Sources parallel lesen, und Pseudo/C-Code ist meist leichter zu verstehen...
Klar, ein C-Code als Erklärung ist sicher nicht verkehrt. Bitte den Code als Kommentar in die Assembler-Datei eintragen und beim Testat darauf hinweisen.

Gruss
Thorsten

Re: Praktikum online

Verfasst: 19. Jan 2010 16:15
von Gnomix
Ich habe nur mal ein Frage zum ersten Teil.
Ist die Determinante der 3x3 Matrize 4?

Code: Alles auswählen

matrix:
#3x3-Matrix
.word 3, 4, 5, 9, 4, 9, 1, 2, 2
Es geht mir nur darum, ob ich die Matrize korrekt interpretiere

Code: Alles auswählen

A=
(3, 4, 5)
(9, 4, 9)
(1, 2, 2)

Re: Praktikum online

Verfasst: 19. Jan 2010 17:09
von kroimon
Gnomix hat geschrieben:Ist die Determinante der 3x3 Matrize 4?
Ja :-)
Die Determinante der 4x4-Matrix ist übrigens -19.

Diese Seite hier ist übrigens sehr praktisch zum Testen und Überprüfen!

Re: Praktikum online

Verfasst: 20. Jan 2010 16:24
von jack_90
Wir haben uns auch mal an der rekrusiven Variante versucht, nachdem uns das andere zuviel Code erschien.
Im rekursiven Aufruf laden wir unsere Matrix (also bei einer 4x4 jeweils 4 mal eine 3x3 Matrix) in den Stack.
Dazu brauchen wir aber eine dynamische Positionsbestimmung wie hier:
lw $s1, $t0($sp) #aktuelles Element der 4x4 Matrix (beim ersten Aufruf) in s1 laden; in t0 ist der Offset ab dem $sp gespeichert
sw $s1, $t4($sp) #schreibe von s1 auf den Stack, in $t4 ist die position (also Offest vom $sp) dazu gespeichert

unser Problem ist, dass der MARS simulator das nicht akzepiert:
Error in det.s line 74 position 11: "$t0": operand is of incorrect type
Error in det.s line 75 position 11: "$t4": operand is of incorrect type

Ist es also generell nicht möglich, register als Offset zu verwenden? Wenn ja wie kann ich dann trotzdem meine Position dynamisch bestimmen?

Re: Praktikum online

Verfasst: 20. Jan 2010 16:33
von kroimon
lw $s1, $t0($sp)

geht so nicht. du braucht noch ein zwischnregister, um die adresse zu berechnen:

add $t1, $sp, $t0
lw $s1, 0($t1)

Edit: Register kannst du nicht als Offset verwenden, guck dir dazu mal das Format von I-Typ-Befehlen an (Kapitel 6 - Folie 35). Der Offset ist ein immediate-Wert.

Re: Praktikum online

Verfasst: 20. Jan 2010 16:40
von Thorti
@kroimon: Genau so gehts.
Erklärung: lw und sw sind Befehle mit dem I-Befehlsformat. Sie haben 2 Register (Zielregister und Offset) und eine 16Bit Konstante. Die Adresse berechnet sich dann aus der Summe der Konstante und des Offests aus dem Register. Eine direkt Angabe von 3 Registern ist beim lw und sw nicht möglich.

Gruss
Thorsten

Re: Praktikum online

Verfasst: 20. Jan 2010 18:24
von M@rkus
Wie habe ich die Aufgabenstellung zum Mips-Programm jetzt zu verstehen?

Soll das Programm die Determinante von beliebig großen Matrizen berechnen oder nur von maximal 4x4?

Re: Praktikum online

Verfasst: 20. Jan 2010 18:26
von kroimon
M@rkus hat geschrieben:Soll das Programm die Determinante von beliebig großen Matrizen berechnen oder nur von maximal 4x4?
In der Aufgabenstellung sind nur 3x3 und 4x4 Matrizen gefordert.
Allerdings ist meiner Meinung nach der Aufwand, das statisch zu machen, genauso groß wie der, das dynamisch für beliebige Matrizen zu lösen...

Re: Praktikum online

Verfasst: 20. Jan 2010 18:28
von jack_90
Ah okay, erstma danke für die antworten 8)
Immo ist glaub ich noch ein Positionfehler drin, weil der Stackpointer größer wird als am Anfang
Da muss ich nochmal drüberschauen :roll:

Re: Praktikum online

Verfasst: 20. Jan 2010 19:25
von Thorti
M@rkus hat geschrieben:Soll das Programm die Determinante von beliebig großen Matrizen berechnen oder nur von maximal 4x4?
4x4 muss mindestens gehen.
Wenn man auch größere Matrizen verarbeiten kann, ist das natürlich noch schöner :wink:

Gruss
Thorsten

Re: Praktikum online

Verfasst: 21. Jan 2010 00:06
von crib
kroimon hat geschrieben:
M@rkus hat geschrieben:Soll das Programm die Determinante von beliebig großen Matrizen berechnen oder nur von maximal 4x4?
In der Aufgabenstellung sind nur 3x3 und 4x4 Matrizen gefordert.
Allerdings ist meiner Meinung nach der Aufwand, das statisch zu machen, genauso groß wie der, das dynamisch für beliebige Matrizen zu lösen...
Nope, die statische Variante bedurfte ca. 30 Minuten, det3 mit 26, det4 21 asm-Statements, ohne Schleifen, komplett unrolled.