THMMY.gr

Μαθήματα Βασικού Κύκλου => Αρχιτεκτονική Υπολογιστών => Topic started by: George_RT on April 19, 2014, 21:23:52 pm



Title: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: George_RT on April 19, 2014, 21:23:52 pm
Δεύτερη Εργαστηριακή Εργασία

Η εργασία πρέπει να υποβληθεί ηλεκτρονικά στο eTHMMY μέχρι 1 Ιουνίου 2014, ώρα 12:00 το μεσημέρι

Περιγραφή

Γράψετε πρόγραμμα στη γλώσσα Assembly του MIPS που να εκτελεί τις παρακάτω λειτουργίες:

1.Να μπορεί ο χρήστης του προγράμματος να εισάγει από την κονσόλα του προσομοιωτή του MIPS, QtSpim, τις τιμές των στοιχείων δυο πινάκων Α, Β, διαστάσεων 3Χ3 ο καθένας που πρέπει να είναι πραγματικοί αριθμοί. Το πρόγραμμα να τυπώνει ακολουθιακά στην οθόνη το όνομα κάθε στοιχείου του κάθε πίνακα, ο χρήστης να εισάγει ένα πραγματικό αριθμό σto κάθε στοιχείο. Και στη συνέχεια να τυπώνει το επόμενο στοιχείο, όπως δείχνεται στο σχήμα 1,

a(0,0) = <εισαγωγή αριθμού> <enter>

a(0,1) =<εισαγωγή αριθμού><enter>

.

.

.

a(2,0) =<εισαγωγή αριθμού><enter>

a(2,1) =<εισαγωγή αριθμού> <enter>

a(2,2) =<εισαγωγή αριθμού><enter>

b(0,0) =<εισαγωγή αριθμού><enter>

b(0,1) =<εισαγωγή αριθμού><enter>

b(0,2) =<εισαγωγή αριθμού><enter>

.

.

.

b(2,2) =<εισαγωγή αριθμού><enter>



2. Να εκτελεί την ακόλουθη πράξη των πινάκων

D=Α*Β

3.Nα τυπώνει στην κονσόλα το αποτέλεαμα της πράξης με το τρόπο που δείχνεται στο σχήμα 2.

d(1,1)=
d(1,2)=
d(1,3)=
d(2,1)=
d(2,2)=
Cd2,3)
d(3,1)=
d(3,2)=
d(3,3)=
Σχήμα 2

1.Οι αρχικές διευθύνσεις των πινάκων μπορούν να είναι παράμετροι και να βρίσκονται στους καταχωρητές $a0, $a1, $a2.

2.Οι πραγματικοί αριθμοί που θα εισάγονται στο πρόγραμμα θα πρέπει να μετατρέπονται σε αριθμούς κινητής υποδιαστολής και οι υπολογισμοί κινητής υποδιαστολής να γίνονται με διπλή ακρίβεια.

3.Για την υλοποίηση της ζητούμενης πράξης μπορείτε να υλοποιήσετε την ακόλουθη ρουτίνα σε γλώσσα C.

Code:
Void mm ( double a[][], double b[][ )

{

int i, j, k;

for (i=0; i! = 3; i = i+1) for (j = 0; j! = 3; j = j+1) for (k = 0; k! = 3; k = k+1)

d[i][j] = d[I][j]+a[i][κ] * b[κ][j]

}

4.Υποθέστε ότι οι ακέραιες μεταβλητές i, j και k βρίσκονται στους $s0, $s1, και $s2.

5.Για να υπολογίσετε την εκάστοτε διεύθυνση των στοιχείων a[j] πρέπει να θεωρήσετε ένα τρόπο αποθήκευσης κάθε διδιάστατου πίνακα στη μνήμη. Ο συνήθης τρόπος που θεωρούν οι μεταγλωττιστές γλωσσών υψηλού επιπέδου είναι κάθε γραμμή να αποθηκεύεται ως μονοδιάστατος πίνακας, και οι διαδοχικές γραμμές να αποθηκεύονται η μια κάτω από την άλλη. Έτσι για να βρεθεί o αριθμοδείκτης του πρώτου στοιχείου της i γραμμής πρέπει να πολλαπλασιασθεί ο δείκτης i με το πλήθος των στοιχείων της i γραμμής , που στην περίπτωση της άσκησης αυτής είναι 3. Για να βρεθεί ο αριθμοδείκτης οπουδήποτε άλλου στοιχείου

a[j] πρέπει στο παραπάνω γινόμενο να προστεθεί το j. Επι πλέον για να βρεθεί και η διευθυνση της μνήμης στην οποία είναι αποθηκευμένο το στοιχείο πρέπει να γίνει η πράξη:

Διεύθυνση=(Διεύθυνση βάσης του πίνακα a) +(i*3+j)*4

στην περίπτωση που οι τιμές των στοιχείων είναι εκφρασμένες σε μορφή κινητής υποδιαστολής απλής ακρίβειας.

Αν χρησιμοποιείται διπλή ακρίβεια τότε η διεύθυnση υπολογίζεται από τη σχέση:

Διεύθυνση=(Διεύθυνση βάσης του a)+(i*3+j)*8

6.Όταν προσδιορισθεί η διεύθυνση του στοιχείου a[j] γίνεται η φόρτωσή του σε κάποιο καταχωρητή κινητής υποδιαστολής και επαναλάμβάνεται παρόμοια διαδικασία για την αποθήκευση σε καταχωρητές κινητής υποδιαστολής των στοιχείων b [j].

7.Όταν έχουν φορτωθεί τα δεδομένα, μπορούν να γίνουν οι πράξεις πολλαπλασιασμού των στοιχείων a[k]*b[k][j] και η συσσώρευση του αποτελέσματος στον καταχωρητή του d[j].

8.Για την εκτύπωση των ονομάτων των στοιχείων των σχημάτων 1 και 2 και των αριθμών που αντιστοιχούν σε αυτά θα πρέπει να γίνει επαναλαμβανόμενη χρήση των κατάλληλων syscall.




Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: DarkPassenger on May 03, 2014, 22:50:03 pm
Τα string α(0,0) α(0,1)...b(0,0) κλπ πρέπει να τα γράψουμε σε 18 (9+9) διαφορετικά string-οσα δηλαδή και τα στοιχεία των πινακων- ή υπάρχει τρόπος να γράψουμε σε loop π.χ α(i,j) και να αλλάζουμε τις τιμές στα i και j??


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: PanteGrv on May 04, 2014, 12:59:03 pm
Πίνακας με τις διευθύνσεις των string?


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: gt on May 04, 2014, 15:52:24 pm
Τα string α(0,0) α(0,1)...b(0,0) κλπ πρέπει να τα γράψουμε σε 18 (9+9) διαφορετικά string-οσα δηλαδή και τα στοιχεία των πινακων- ή υπάρχει τρόπος να γράψουμε σε loop π.χ α(i,j) και να αλλάζουμε τις τιμές στα i και j??

Εννοειται Loop οπου αλλαζεις τα i,j κυριως για δικη σου ευκολια αλλα και για "δομημενο"-σωστο προγραμματισμο...σαν string πρεπει μονο να εχεις τα "α( ","b(", το "," και το ")"


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: DarkPassenger on May 04, 2014, 16:01:24 pm
Τα string α(0,0) α(0,1)...b(0,0) κλπ πρέπει να τα γράψουμε σε 18 (9+9) διαφορετικά string-οσα δηλαδή και τα στοιχεία των πινακων- ή υπάρχει τρόπος να γράψουμε σε loop π.χ α(i,j) και να αλλάζουμε τις τιμές στα i και j??

Εννοειται Loop οπου αλλαζεις τα i,j κυριως για δικη σου ευκολια αλλα και για "δομημενο"-σωστο προγραμματισμο...σαν string πρεπει μονο να εχεις τα "α( ","b(", το "," και το ")"
μαλιστα, και αυτό μπορεί να γινει εύκολα? γιατι δε μας εδειξε και τρομερα πραγματα στις διαλεξεις....


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: gt on May 04, 2014, 17:20:00 pm
Ναι ειναι σχετικα ευκολο...θα χρειαστεις 2 καταχωρητες πχ $t0=1 k $t1=1 που θα ειναι το i k j αντιστοιχα και μια loop..σε καθε loop αυξανεις το $t1 και μεχρι να γινει 3 το στελνεις στο Loop..Ετσι θα φτιαξεις α(1,1),α(1,2),α(1,3).Μολις γινει 3 κανεις $t1=1 και αυξανεις $t0 και ξαναστελνεις στο loop μεχρι να γινει $t0=3 και μετα συνεχιζεις στο προγραμμα σου...


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: DarkPassenger on May 08, 2014, 00:52:56 am
Ναι ειναι σχετικα ευκολο...θα χρειαστεις 2 καταχωρητες πχ $t0=1 k $t1=1 που θα ειναι το i k j αντιστοιχα και μια loop..σε καθε loop αυξανεις το $t1 και μεχρι να γινει 3 το στελνεις στο Loop..Ετσι θα φτιαξεις α(1,1),α(1,2),α(1,3).Μολις γινει 3 κανεις $t1=1 και αυξανεις $t0 και ξαναστελνεις στο loop μεχρι να γινει $t0=3 και μετα συνεχιζεις στο προγραμμα σου...
οκ τα loops τα εκανα.. διαβαζω και τιμες, αλλα δεν ξερω πως να αποθηκευσω! χρησιμοποιησα τις εντολες:
li $v0, 7
syscall
s.d $f0, $t2($a1)

οπου αυξανω τον $t2 και τον κανω +8 σε καθε loop, αλλα μου βγαζει συντακτικο λαθος... πως να το κανω??

EDIT: νομίζω το βρήκα


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: gt on May 08, 2014, 14:01:22 pm
Ναι ειναι σχετικα ευκολο...θα χρειαστεις 2 καταχωρητες πχ $t0=1 k $t1=1 που θα ειναι το i k j αντιστοιχα και μια loop..σε καθε loop αυξανεις το $t1 και μεχρι να γινει 3 το στελνεις στο Loop..Ετσι θα φτιαξεις α(1,1),α(1,2),α(1,3).Μολις γινει 3 κανεις $t1=1 και αυξανεις $t0 και ξαναστελνεις στο loop μεχρι να γινει $t0=3 και μετα συνεχιζεις στο προγραμμα σου...
οκ τα loops τα εκανα.. διαβαζω και τιμες, αλλα δεν ξερω πως να αποθηκευσω! χρησιμοποιησα τις εντολες:
li $v0, 7
syscall
s.d $f0, $t2($a1)

οπου αυξανω τον $t2 και τον κανω +8 σε καθε loop, αλλα μου βγαζει συντακτικο λαθος... πως να το κανω??

EDIT: νομίζω το βρήκα

Το λαθος ειναι στον $t2...σε εκεινο το σημειο θελει αριθμο και οχι καταχωρητη...αυτο που πρεπει να κανεις ειναι να γραψεις s.d $f0,0($a1) και απο κατω addi $a1,$a1,8..Ετσι καθε φορα θα αποθηκευεται στην επομενη θεση κατα 8 κελια..


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: DarkPassenger on May 08, 2014, 14:36:41 pm
Ναι ειναι σχετικα ευκολο...θα χρειαστεις 2 καταχωρητες πχ $t0=1 k $t1=1 που θα ειναι το i k j αντιστοιχα και μια loop..σε καθε loop αυξανεις το $t1 και μεχρι να γινει 3 το στελνεις στο Loop..Ετσι θα φτιαξεις α(1,1),α(1,2),α(1,3).Μολις γινει 3 κανεις $t1=1 και αυξανεις $t0 και ξαναστελνεις στο loop μεχρι να γινει $t0=3 και μετα συνεχιζεις στο προγραμμα σου...
οκ τα loops τα εκανα.. διαβαζω και τιμες, αλλα δεν ξερω πως να αποθηκευσω! χρησιμοποιησα τις εντολες:
li $v0, 7
syscall
s.d $f0, $t2($a1)

οπου αυξανω τον $t2 και τον κανω +8 σε καθε loop, αλλα μου βγαζει συντακτικο λαθος... πως να το κανω??

EDIT: νομίζω το βρήκα

Το λαθος ειναι στον $t2...σε εκεινο το σημειο θελει αριθμο και οχι καταχωρητη...αυτο που πρεπει να κανεις ειναι να γραψεις s.d $f0,0($a1) και απο κατω addi $a1,$a1,8..Ετσι καθε φορα θα αποθηκευεται στην επομενη θεση κατα 8 κελια..
ευχαριστω για την απαντηση, θα το δοκιμασω αν κ το εκανα αλλιως..
εκανα αυτό εγω:

s.d $f0, arrayA($t2)   
addi $t2, $t2, 8

και δουλευει μια χαρα!


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: gt on May 09, 2014, 10:59:08 am
Ναι ειναι σχετικα ευκολο...θα χρειαστεις 2 καταχωρητες πχ $t0=1 k $t1=1 που θα ειναι το i k j αντιστοιχα και μια loop..σε καθε loop αυξανεις το $t1 και μεχρι να γινει 3 το στελνεις στο Loop..Ετσι θα φτιαξεις α(1,1),α(1,2),α(1,3).Μολις γινει 3 κανεις $t1=1 και αυξανεις $t0 και ξαναστελνεις στο loop μεχρι να γινει $t0=3 και μετα συνεχιζεις στο προγραμμα σου...
οκ τα loops τα εκανα.. διαβαζω και τιμες, αλλα δεν ξερω πως να αποθηκευσω! χρησιμοποιησα τις εντολες:
li $v0, 7
syscall
s.d $f0, $t2($a1)

οπου αυξανω τον $t2 και τον κανω +8 σε καθε loop, αλλα μου βγαζει συντακτικο λαθος... πως να το κανω??

EDIT: νομίζω το βρήκα

Το λαθος ειναι στον $t2...σε εκεινο το σημειο θελει αριθμο και οχι καταχωρητη...αυτο που πρεπει να κανεις ειναι να γραψεις s.d $f0,0($a1) και απο κατω addi $a1,$a1,8..Ετσι καθε φορα θα αποθηκευεται στην επομενη θεση κατα 8 κελια..
ευχαριστω για την απαντηση, θα το δοκιμασω αν κ το εκανα αλλιως..
εκανα αυτό εγω:

s.d $f0, arrayA($t2)   
addi $t2, $t2, 8

και δουλευει μια χαρα!
:???:Δεν ξερω αν ειναι σωστο, πρωτη φορα βλεπω κατι τετοιο αλλα αν σου δουλευει σωστα ΟΚ..


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: DarkPassenger on May 09, 2014, 11:24:31 am
Ναι ειναι σχετικα ευκολο...θα χρειαστεις 2 καταχωρητες πχ $t0=1 k $t1=1 που θα ειναι το i k j αντιστοιχα και μια loop..σε καθε loop αυξανεις το $t1 και μεχρι να γινει 3 το στελνεις στο Loop..Ετσι θα φτιαξεις α(1,1),α(1,2),α(1,3).Μολις γινει 3 κανεις $t1=1 και αυξανεις $t0 και ξαναστελνεις στο loop μεχρι να γινει $t0=3 και μετα συνεχιζεις στο προγραμμα σου...
οκ τα loops τα εκανα.. διαβαζω και τιμες, αλλα δεν ξερω πως να αποθηκευσω! χρησιμοποιησα τις εντολες:
li $v0, 7
syscall
s.d $f0, $t2($a1)

οπου αυξανω τον $t2 και τον κανω +8 σε καθε loop, αλλα μου βγαζει συντακτικο λαθος... πως να το κανω??

EDIT: νομίζω το βρήκα

Το λαθος ειναι στον $t2...σε εκεινο το σημειο θελει αριθμο και οχι καταχωρητη...αυτο που πρεπει να κανεις ειναι να γραψεις s.d $f0,0($a1) και απο κατω addi $a1,$a1,8..Ετσι καθε φορα θα αποθηκευεται στην επομενη θεση κατα 8 κελια..
ευχαριστω για την απαντηση, θα το δοκιμασω αν κ το εκανα αλλιως..
εκανα αυτό εγω:

s.d $f0, arrayA($t2)   
addi $t2, $t2, 8

και δουλευει μια χαρα!
:???:Δεν ξερω αν ειναι σωστο, πρωτη φορα βλεπω κατι τετοιο αλλα αν σου δουλευει σωστα ΟΚ..
το βρήκα σε σαιτ με οδηγιες κ' παραδείγματα  για mips, οπότε υποθετω πως είναι σωστό


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: sk0uf on May 12, 2014, 20:37:31 pm
H πραξη που ζηταει ειναι η D=A*B ,παρολ'αυτα στον αλγοριθμο που μας δινει γραφει d[j]=d[j]+a[j]*b[j] δηλαδη η πραξη D=D+A*B ,τυπογραφικο λαθος να υποθεσω;


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: gt on May 12, 2014, 23:39:47 pm
H πραξη που ζηταει ειναι η D=A*B ,παρολ'αυτα στον αλγοριθμο που μας δινει γραφει d[j]=d[j]+a[j]*b[j] δηλαδη η πραξη D=D+A*B ,τυπογραφικο λαθος να υποθεσω;

Σωστη ειναι η εκφωνηση...στο d[ i][ j] συσσωρευεται το αθροισμα των πολλαπλασιασμων στηλης γραμμης για καθε ενα στοιχειο του πινακα d..στην ουσια ειναι d[ i][j]+=a[ i][κ] * b[κ][j]


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: vasilis94 on May 16, 2014, 12:23:45 pm
2.Οι πραγματικοί αριθμοί που θα εισάγονται στο πρόγραμμα θα πρέπει να μετατρέπονται σε αριθμούς κινητής υποδιαστολής και οι υπολογισμοί κινητής υποδιαστολής να γίνονται με διπλή ακρίβεια.

Καταλαβαίνει κάποιος από εδώ ή γενικά από την εκφώνηση τι από τα παρακάτω πρέπει  να κάνουμε:
> Από ότι είδα υπάρχει syscall για να διαβάζεις double, τα διαβαζεις όλα ως double, τα φορτώνεις/αποθηκεύεις με l.d και όλα τα κάνεις με διπλή τελοσπάντων.
> Τα αποθηκεύεις ως floats 4 byte στη μνήμη και κάθε φορά που θέλεις να κάνεις πράξεις κάνεις ένα cvt (convert to double) και μετά η πράξη σε double.

Λογικό είναι το πρώτο αλλά λέει και ξαναλέει για πραγματικούς αριθμούς που εισάγονται (δηλαδή?), μετατροπή σε κινητή υποδιαστολή και υπολογισμούς με διπλή ακρίβεια.


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: iliachry on May 16, 2014, 13:27:07 pm
εγώ τα αποθηκεύω σε απλής ακρίβειας, κάνω πράξεις απλής ακρίβειας ανάμεσα στους πίνακες A και Β, και όταν πρέπει να κάνω αυτή την εντολή (d[ι][j] = d[j]+a[ι][κ]  * b[κ][j]) αναγκαστικά μετατρέπω σε διπλής ακρίβειας το a [ι][k]*b[k][j]!

νομίζω αυτό είναι και το πιο σωστό γιατί δεν υπάρχει περίπτωση να έχουμε υπερχείλιση!


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: gt on May 16, 2014, 15:16:40 pm
2.Οι πραγματικοί αριθμοί που θα εισάγονται στο πρόγραμμα θα πρέπει να μετατρέπονται σε αριθμούς κινητής υποδιαστολής και οι υπολογισμοί κινητής υποδιαστολής να γίνονται με διπλή ακρίβεια.

Καταλαβαίνει κάποιος από εδώ ή γενικά από την εκφώνηση τι από τα παρακάτω πρέπει  να κάνουμε:
> Από ότι είδα υπάρχει syscall για να διαβάζεις double, τα διαβαζεις όλα ως double, τα φορτώνεις/αποθηκεύεις με l.d και όλα τα κάνεις με διπλή τελοσπάντων.
> Τα αποθηκεύεις ως floats 4 byte στη μνήμη και κάθε φορά που θέλεις να κάνεις πράξεις κάνεις ένα cvt (convert to double) και μετά η πράξη σε double.

Λογικό είναι το πρώτο αλλά λέει και ξαναλέει για πραγματικούς αριθμούς που εισάγονται (δηλαδή?), μετατροπή σε κινητή υποδιαστολή και υπολογισμούς με διπλή ακρίβεια.

Αποθηκευεις κανονικα διπλης ακριβειας και κανεις πραξεις με τις εντολες διπλης ακριβειας...Αυτο εννοει...


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: sk0uf on May 18, 2014, 16:53:34 pm
Ξέρει κανείς πως εκτυπώνω με τα στοιχεία με τη μορφή που ζητάει η άσκηση; Αν το κάνω με space τότε υπάρχει πρόβλημα
πχ:
    d(1,1)=23   d(1,2)=323 d(1,3)=32
    d(2,1)=3233   d(1,2)=32 .............
    ...............................................


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: vasilis94 on May 18, 2014, 17:45:42 pm
Ξέρει κανείς πως εκτυπώνω με τα στοιχεία με τη μορφή που ζητάει η άσκηση; Αν το κάνω με space τότε υπάρχει πρόβλημα
πχ:
    d(1,1)=23   d(1,2)=323 d(1,3)=32
    d(2,1)=3233   d(1,2)=32 .............
    ...............................................

Βάλε string με 2-3 \t (tab). Τα στοιχίζει σχετικά...


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: DarkPassenger on May 18, 2014, 17:54:07 pm
Ξέρει κανείς πως εκτυπώνω με τα στοιχεία με τη μορφή που ζητάει η άσκηση; Αν το κάνω με space τότε υπάρχει πρόβλημα
πχ:
    d(1,1)=23   d(1,2)=323 d(1,3)=32
    d(2,1)=3233   d(1,2)=32 .............
    ...............................................

Βάλε string με 2-3 \t (tab). Τα στοιχίζει σχετικά...
μα αυτο ειναι το θεμα, οτι η στοίχιση είναι σχετική...


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: sk0uf on May 18, 2014, 18:54:04 pm
Νομίζω πως θέλει τέλεια στοίχιση .Λίγο που το έψαξα δεν έβγαλα καμία άκρη !


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: vasilis94 on May 18, 2014, 23:33:44 pm
Ξέρει κανείς πως εκτυπώνω με τα στοιχεία με τη μορφή που ζητάει η άσκηση; Αν το κάνω με space τότε υπάρχει πρόβλημα
πχ:
    d(1,1)=23   d(1,2)=323 d(1,3)=32
    d(2,1)=3233   d(1,2)=32 .............
    ...............................................

Βάλε string με 2-3 \t (tab). Τα στοιχίζει σχετικά...
μα αυτο ειναι το θεμα, οτι η στοίχιση είναι σχετική...

Με 2 tabs συγκεκριμένα αν οι αριθμοί δεν είχαν πάνω από 8-9 ψηφία στοιχίζονταν απόλυτα(δηλαδή το πιο πάνω παράδειγμα μου το εμφάνιζε μια χάρα). Το πρόβλημα ήταν με τα δεκαδικά συνήθως, αλλά φαντάζομαι αν έβαζες παραπάνω tabs που υπερκάλυπταν αυτές τις θέσεις πάλι θα έπαιζε.


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: gt on May 19, 2014, 14:55:09 pm
Ξέρει κανείς πως εκτυπώνω με τα στοιχεία με τη μορφή που ζητάει η άσκηση; Αν το κάνω με space τότε υπάρχει πρόβλημα
πχ:
    d(1,1)=23   d(1,2)=323 d(1,3)=32
    d(2,1)=3233   d(1,2)=32 .............
    ...............................................

Βάλε string με 2-3 \t (tab). Τα στοιχίζει σχετικά...
μα αυτο ειναι το θεμα, οτι η στοίχιση είναι σχετική...

Aν το κανεις με double (οπως θελει η εκφωνηση) και με 3 Tab(\t) η στοιχιση θα ειναι ειναι τελεια.Γιατι οταν το κανεις με double θα σου βγαζει πχ για τον αριθμο 1.23 θα τον εμφανιζει 1,23000000 με συγκεκριμενο αριθμο μηδενικων...εδω απο οτι βλεπω εσυ λογικα δεν το εχεις κανει με double αλλιως θα εμφανιζοταν d(1,1)=23.0000000...


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: sk0uf on May 19, 2014, 15:45:02 pm
με double το εχω κανει


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: gt on May 19, 2014, 17:31:46 pm
Βαλε 3 tab και θα εχεις πληρη στοιχιση..


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: κύριος Φασόλης on May 22, 2014, 17:06:48 pm

s.d $f0, $t2($a1)


αυτη η εντολη s.d τι ειναι ?  store double?


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: DarkPassenger on May 22, 2014, 18:03:56 pm

s.d $f0, $t2($a1)


αυτη η εντολη s.d τι ειναι ?  store double?
ναι αλλά πρόσεξε, έτσι όπως είναι γραμμένη η εντολή είναι λάθος στο $t2


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: κύριος Φασόλης on May 22, 2014, 20:32:06 pm
ok σε ευχαριστω φιλε !


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: Watchtower on May 23, 2014, 17:22:47 pm
να ρωτησω κατι...
για να εισαγει ο χρηστης τις τιμες των πινακων a και b, στην εντολη τι πρεπει να δηλωσουμε οτι θα εισαχθει int, float ή double, δλδ
li $v0, 5, 6 ή 7
syscall            αντιστοιχα?
και αμα βαλουμε το 6 (για read float) μετα πρεπει να το κανουμε convert σε double με την cvt.d.w ?
ή μπορουμε να του πουμε να διαβασει κατευθειαν double (με το 7) και εμεις μονο να κανουμε απο κατω ενα s.d $f0,0($a1) ?


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: κύριος Φασόλης on May 23, 2014, 21:04:48 pm
παιδια μηπως μπορει να μου λυσει καποιος την εξης απορια :

αφου ο καταχωρητης $a0 χρησιμοποιειται απο την syscall οταν τυπωνουμε strings και κατ'επεκταση αλλαζει συνεχως με τις αντιστοιχες διευθυνσεις που του εχουμε δωσει για το εκαστοτε string πως γινεται να τον χρησιμοποιησουμε σαν βαση πινακα? εννοω δεν ειναι κατι που θα μενει σταθερο ωστε να το εχουμε σαν σημειο αναφορας...

εγω παντως εβαλα για βαση το a1 για να ειμαι σιγουρος


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: gt on May 24, 2014, 03:32:21 am
μπορουμε να του πουμε να διαβασει κατευθειαν double (με το 7) και εμεις μονο να κανουμε απο κατω ενα s.d $f0,0($a1)
;)


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: gt on May 24, 2014, 03:33:21 am
παιδια μηπως μπορει να μου λυσει καποιος την εξης απορια :

αφου ο καταχωρητης $a0 χρησιμοποιειται απο την syscall οταν τυπωνουμε strings και κατ'επεκταση αλλαζει συνεχως με τις αντιστοιχες διευθυνσεις που του εχουμε δωσει για το εκαστοτε string πως γινεται να τον χρησιμοποιησουμε σαν βαση πινακα? εννοω δεν ειναι κατι που θα μενει σταθερο ωστε να το εχουμε σαν σημειο αναφορας...

εγω παντως εβαλα για βαση το a1 για να ειμαι σιγουρος

εχεις δικιο...τυπογραφικο λαθος μαλλον...καντο με $α1,$α2,$α3...


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: κύριος Φασόλης on May 24, 2014, 17:31:12 pm
παιδια μηπως μπορει να μου λυσει καποιος την εξης απορια :

αφου ο καταχωρητης $a0 χρησιμοποιειται απο την syscall οταν τυπωνουμε strings και κατ'επεκταση αλλαζει συνεχως με τις αντιστοιχες διευθυνσεις που του εχουμε δωσει για το εκαστοτε string πως γινεται να τον χρησιμοποιησουμε σαν βαση πινακα? εννοω δεν ειναι κατι που θα μενει σταθερο ωστε να το εχουμε σαν σημειο αναφορας...

εγω παντως εβαλα για βαση το a1 για να ειμαι σιγουρος

εχεις δικιο...τυπογραφικο λαθος μαλλον...καντο με $α1,$α2,$α3...

ωραια σε ευχαριστω πολυ φιλε!


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: κύριος Φασόλης on May 24, 2014, 18:01:42 pm
    sll $t1,$s0,1      
    addu $t1,$t1,$s0      
    addu $t1,$s2,$t1      
    sll $t1,$t1,3      
    addu $t1,$t1,$a1      
    l.d $f6,0($t1)   

εδω μου βγαζει exception...
ειναι εκεινο το κομματι στο οποιο γινεται ο πολ/σμος των 2 πινακων και παω να μεταφερω τον double που ειχε αποθηκευθει στην διευθυνση που δειχνει ο t1 αλλα οταν φτανει στο l.d μου βγαζει exception εχει λοιπον κανεις καμια ιδεα τι μπορει να φταιει?


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: Ser Harry Man on May 26, 2014, 15:36:58 pm
Όταν κάνω 3 διαδοχικούς πίνακες των 3ων κελιών όπως προτείνει(για τον α), πόσο δηλώνω το .space στην κάθε γραμμή?

3*8 byte=24? H απλά 6 και καταλαβαίνει οτι αναφέρομαι σε byte?

Πάντα με μπερδεύει αυτο...  :-\


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: PanteGrv on May 26, 2014, 15:45:36 pm
Με μπέρδεψες.. Η μονάδα μέτρησης το byte είναι


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: Watchtower on May 26, 2014, 16:11:32 pm
ο πινακας ειναι ενας 9 κελιων (ο α εννοω)..δεν παιρνεις την καθε γραμμη σαν ξεχωριστο πινακα...οποτε ουσιαστικα ειναι σαν να λες 9*8 Byte=72....72 βαζεις στο .space


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: Ser Harry Man on May 26, 2014, 16:39:38 pm
ο πινακας ειναι ενας 9 κελιων (ο α εννοω)..δεν παιρνεις την καθε γραμμη σαν ξεχωριστο πινακα...οποτε ουσιαστικα ειναι σαν να λες 9*8 Byte=72....72 βαζεις στο .space
Thanks αυτό έψαχνα ουσιαστικά


Ο συνήθης τρόπος που θεωρούν οι μεταγλωττιστές γλωσσών υψηλού επιπέδου είναι κάθε γραμμή να αποθηκεύεται ως μονοδιάστατος πίνακας, και οι διαδοχικές γραμμές να αποθηκεύονται η μια κάτω από την άλλη. Έτσι για να βρεθεί o αριθμοδείκτης του πρώτου στοιχείου της i γραμμής πρέπει να πολλαπλασιασθεί ο δείκτης i με το πλήθος των στοιχείων της i γραμμής , που στην περίπτωση της άσκησης αυτής είναι 3. Για να βρεθεί ο αριθμοδείκτης οπουδήποτε άλλου στοιχείου

a[j] πρέπει στο παραπάνω γινόμενο να προστεθεί το j. Επι πλέον για να βρεθεί και η διευθυνση της μνήμης στην οποία είναι αποθηκευμένο το στοιχείο πρέπει να γίνει η πράξη:

Διεύθυνση=(Διεύθυνση βάσης του πίνακα a) +(i*3+j)*4

Εγώ αυτο προσπαθώ να υλοποιήσω, βέβαια δεν εχει καμία ουσιαστική διαφορα το αν είναι 3 στη σειρα ή αν είναι ενας διότι τους προσπερνάς μέσω της διεύθυνσης.


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: ori0ngel on May 27, 2014, 21:19:00 pm
Μου βγαζει error στο κομματι που εχω για να μηδενισω αρχικα τον πινακα d.

li $t0, 0                        # mhdenismos metriton 
li $t1, 0
loopd1:                          #mhdenismos pinaka d
  loopd2:
    sw $zero, 0($a3)       #store 0
    addi $a3, $a3, 8        #allagi thesis
    addi $t1, 1               
    beq $t1, 3 doned2
    j loopd2
  doned2:
  li $t1, 0                        #epanafora j
  beq $t0, 3 doned1
  j loopd1
doned1:
sub $a3, $a3, 72           #epanafora $a3

Το λαθος μου το βγαζει στην εντολη  sw $zero, 0($a3). Εχω ψαξει παντου και δεν βρισκω λαθος.
Καμια βοηθεια κανενας;


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: Watchtower on May 27, 2014, 22:29:40 pm
επειδη και μενα μου εβγαζε λαθος εκει...δοκιμασε αυτο... δηλωσε στο .data label: .word 0
και εκει που θες να μηδενισεις τον καταχωρητη εγω εκανα αυτο
la $s3,label
l.d $f4,0($s3)


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: gt on May 28, 2014, 02:11:09 am
Αν θελετε την γνωμη μου παντως,ειναι τσαμπα δουλεια αυτο...δεν χρειαζεται να το κανετε... αυτο θα ηταν χρησιμο στην c... Μπορειτε απλα να φορτωνετε το συσσωρευμενο αθροισμα γινομενων κατευθειαν στην θεση μνημης που θελετε και στην συνεχεια να μηδενισετε τον καταχωρητη,ετσι ωστε στην επομενη επαναληψη να αποθηκευεται ξανα το αθροισμα απο το 0..


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: Watchtower on May 28, 2014, 11:01:21 am
ναι γινεται και αυτο...και γω το προσπαθησα αλλα για καποιο λογο που δε μπορεσα να καταλαβω μου εβγαζε error και ετσι εψαξα για καποιον αλλον τροπο


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: ori0ngel on May 28, 2014, 20:39:47 pm
Αλλη μια ερωτηση γιατι με εχει τρελανει σημερα.
Χρησιμοποιω το παρακατω κομματι κωδικα για να παρω την διευθυνση των στοιχειων ενος πινακα και εν τελει φορτωνω τον αριθμο μου στον καταχωρητη κινητης υποδιαστολης.

mul $t3, $s0, 3
add $t3, $t3, $s2
mul $t3, $t3, 8
add $t3, $t3, $a1
l.d $f4, 0($t3)

Βρηκα ακριβως παρομοιο κωδικα στο βιβλιο (σελ. 316).  Δοκιμασα και εκεινον και το αποτελεσμα ειναι το ιδιο. Μου βγαζει οτι ο f4 δεν ειναι αριθμος και ο πινακας d βγαζει κατι τρελα νουμερα.


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: Watchtower on May 28, 2014, 22:00:24 pm
μηπως πρεπει πριν προσθεσεις τον a1 στον t3 να δηλωσεις οτι ο a1 ειναι η βαση του πινακα d? το εχεις κανει αυτο?


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: ori0ngel on May 28, 2014, 23:06:53 pm
Εκτος απο τις εντολες τις αποθηκευσης των αριθμων που δινουμε απο το πληκτρολογιο, χρειαζεται κατι αλλο;
Εκτος απο το s.d $f0, 0($a1) δηλαδη.


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: Watchtower on May 28, 2014, 23:25:57 pm
τι εννοεις? πρεπει να εχεις την εντολη που διαβαζει τη τιμη που δινει ο χρηστης και την εντολη αποθηκευσης....τωρα αναλογα με το τι τιμη διαβαζεις πρεπει να εχεις και τις καταλληλες μετατροπες...δε ξερω αν εχεις βαλει να διαβαζει int float ή double...εγω παντως οπως ειχα γραψει και καπου πανω οπου το ρωτησα αυτο εχω βαλει να διαβαζει κατευθειαν double


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: ori0ngel on May 29, 2014, 00:11:59 am
Ναι το εχω κανει αυτο. Double κατευθειαν την διαβαζω. Οπως το εχεις κανει εσυ το εχω και εγω.
Χρειαζεται κατι παραπανω απο αυτο για να δηλωθει οτι ο α1 ειναι βαση του πινακα α?


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: Watchtower on May 29, 2014, 00:44:41 am
οποτε θελω να δηλωσω τη βαση ενος πινακα σε εναν καταχωρητη κανω αυτο la $a1,label οπου label ο τιτλος με τον οποιο εχεις δηλωσει το μεγεθος του πινακα στην αρχη, στο .data....ετσι βαζεις τη βαση σε εναν καταχωρητη


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: billios on May 29, 2014, 10:39:49 am
Μπορώ να αποθηκεύω κάθε στοιχειο του πίνακα 8 byte πιο πέρα από το προηγούμενο ή πρέπει να ακολουθήσω το παρακάτω?
Επιπλέον πρέπει να δηλώσω ότι η διεύθυνση του πίνακα α είναι π.χ η $α1 ή μπορώ απλά να φορτώνω ανά 8 byte στην $α1 τα δεδομένα εισόδου?

Ο συνήθης τρόπος που θεωρούν οι μεταγλωττιστές γλωσσών υψηλού επιπέδου είναι κάθε γραμμή να αποθηκεύεται ως μονοδιάστατος πίνακας, και οι διαδοχικές γραμμές να αποθηκεύονται η μια κάτω από την άλλη. Έτσι για να βρεθεί o αριθμοδείκτης του πρώτου στοιχείου της i γραμμής πρέπει να πολλαπλασιασθεί ο δείκτης i με το πλήθος των στοιχείων της i γραμμής , που στην περίπτωση της άσκησης αυτής είναι 3. Για να βρεθεί ο αριθμοδείκτης οπουδήποτε άλλου στοιχείου

a[j] πρέπει στο παραπάνω γινόμενο να προστεθεί το j. Επι πλέον για να βρεθεί και η διευθυνση της μνήμης στην οποία είναι αποθηκευμένο το στοιχείο πρέπει να γίνει η πράξη:

Διεύθυνση=(Διεύθυνση βάσης του πίνακα a) +(i*3+j)*4



Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: Watchtower on May 29, 2014, 10:55:01 am
νομιζω οτι μπορεις να κανεις οτι θελεις...τη βοηθεια αυτη στη δινει ως βοηθεια και οχι κανονα...αλλα ειναι το πιο ευκολο νομιζω...επισης δε μπορεις να φορτωσεις 8 byte στον $a1 γιατι ο a1 δεν χρησιμοποιειται για double αριθμους, αρα πρεπει να φορτωσεις τη διευθυνση εκει...ετσι εχω την εντυπωση τουλαχιστον


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: parascat on May 29, 2014, 19:41:39 pm
Ξέρει κανείς πως εκτυπώνω με τα στοιχεία με τη μορφή που ζητάει η άσκηση; Αν το κάνω με space τότε υπάρχει πρόβλημα
πχ:
    d(1,1)=23   d(1,2)=323 d(1,3)=32
    d(2,1)=3233   d(1,2)=32 .............
    ...............................................

Βάλε string με 2-3 \t (tab). Τα στοιχίζει σχετικά...
μα αυτο ειναι το θεμα, οτι η στοίχιση είναι σχετική...

Aν το κανεις με double (οπως θελει η εκφωνηση) και με 3 Tab(\t) η στοιχιση θα ειναι ειναι τελεια.Γιατι οταν το κανεις με double θα σου βγαζει πχ για τον αριθμο 1.23 θα τον εμφανιζει 1,23000000 με συγκεκριμενο αριθμο μηδενικων...εδω απο οτι βλεπω εσυ λογικα δεν το εχεις κανει με double αλλιως θα εμφανιζοταν d(1,1)=23.0000000...

Όταν βάζω δεκαδικούς δηλαδή 3,5 π.χ. κτλ μου βγάζει αρκετά ψηφία ενώ αν βάλω μόνο ακεραίους στο τελικό αποτέλεσμα μου βγάζει χωρίς τα μηδενικά ενώ πιστεύω ότι τα έχω βάλει σε double. Έχει κάποιος κάτι να μου προτείνει;


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: Watchtower on May 29, 2014, 19:44:07 pm
και μενα ετσι μου κανει....


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: ori0ngel on May 29, 2014, 22:26:35 pm
Αλλη μια ερωτηση.
Κοιταξτε στην φωτο πως εκτυπωνει απο ενα σημειο και μετα. Εχω ελεγξει τον κωδικα 15 φορες ειναι μια χαρα. Τον εχω τρεξει βημα βημα αλλες 15 φορες να δω τι παιζει με τον $a0 και τιποτα. Ολα φαινονται οτι λειτουργουν μια χαρα και οταν ειναι να τρεξει την syscall για το κομμα και το )= δεν εκτυπωνει τιποτα παρα το γεγονος οτι ο $a0 φορτωνει σωστα τις διευθυνσεις.
Το προβλημα αυτο προεκυψε ξαφνικα απο το τιποτα. Υποψην οτι ο κωδικας λειτουργει μια χαρα και οι τιμες που τυπωνει ειναι σωστες.

(http://i.cubeupload.com/iE79mh.jpg)



EDIT:ΑΚΥΡΟ ΤΟ ΒΡΗΚΑ. Παιχτηκε βλακεια με τους πινακες. Υπηρχε επικαλυψη.


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: anaslout on May 31, 2014, 16:00:56 pm
paidia autos eina o kwdikas mou sto shmeio p zhtaei tn ypologismo tn pinakwn.boreite na m peite ti lathos kanw?gt stn ektypwsh ton d(1,1),d(1,2)klp mou t vgazei ola 0.
li $s0,0
li $s1,0

li $s2,0
li $s3,3

L1:
beq $s0,$s3,exit3

L2:
beq $s1,$s3,H1

li.d $f0,0.0

j L3
H1:
addi $s0,$s0,1
li $s1,0
j L1
L3:

beq $s2,$s3,H2
mul $t3, $s0, 3
add $t3, $t3, $s2
mul $t3, $t3, 8
add $t3, $t3, $a1
l.d $f2, 0($t3)
mul $t3, $s2, 3
add $t3, $t3, $s1
mul $t3, $t3, 8
add $t3, $t3, $a2
l.d $f4, 0($t3)

mul.d $f6,$f2,$f4
add.d $f0,$f0,$f6





addi $s2,$s2,1
j L3
H2:
mul $t3, $s0, 3
add $t3, $t3, $s1
mul $t3, $t3, 8
add $t3, $t3, $a3
s.d $f0,0($t3)
addi $s1,$s1,1
li $s2,0
j L2


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: elefmylo on May 31, 2014, 17:48:03 pm
Ξέρει κανείς πως μπορώ να ,ηδενίσω μια float μεταβλήτη...? :-\


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: anaslout on May 31, 2014, 17:52:48 pm
li.d $f0,0.0
egw to ekana etsi gia double.
gia single apla vale
li.s $f0,0.0


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: User_Name on May 31, 2014, 18:08:51 pm
αν δεν κάνω λάθος πρέπει να αφαιρέσεις απο τους α1 ,α2  -72   για να πάνε στη βάση τους


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: User_Name on May 31, 2014, 18:14:13 pm
**πρίν μπείς στα loops  για την εύρεση των διευθήνσεων τους


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: anaslout on May 31, 2014, 18:16:29 pm
auto prepei na einai.s eyxaristw pl!


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: User_Name on May 31, 2014, 18:17:13 pm
 :)


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: elefmylo on May 31, 2014, 23:12:53 pm
li.d $f0,0.0
egw to ekana etsi gia double.
gia single apla vale
li.s $f0,0.0

ευχαριστώ!  :)


Title: Re: [Αρχιτεκτονική Υπ.] 2η Εργασία
Post by: PanteGrv on June 03, 2014, 15:13:35 pm
Ρε σεις υπάρχει πολ/σμος πινάκων στις διαφάνειες του Χασάπη έτοιμος !  :P