Title: [Μίκρο 1] Ανάλυση Θεμάτων 2006 Post by: liago13 on August 17, 2007, 14:56:08 pm Λοιπον ανοιγω αυτο το θεμα να αναλυσουμε τα περσινα θεματα εξετασεων
Φεβρουαριος 06-1ο ΘΕΜΑ: Να υπολογιστει με πληρη ακριβεια η παρασταση y=5x + x/4 + sinθ οπου 0<=x<=255 και 0<=θ<=360. Το sinθ υπολογιζεται με αναζητηση σε πινακα αποθηκευμενο στη μνημη προγραμματος για τις γωνιες [1,...,89] Λυση: Ο αλγοριθμος μου φαινεται σχετικα γνωστος. Το 5x θα καταληξει σε 16bitο οποτε και χρησιμοποιουμε τη γνωστη ρουτινα που υλοποιησαμε και στο εργαστηριο, το x/4 ειναι δυο lsr, και το sinθ μια απλη ανακληση απο πινακα οπως στην παρομοια ασκηση φυλλαδιου με μεταροπη κελσιου σε φαρεναιτ που ανακαλουμε την τιμη απο πινακα. Φεβρουαριος 06-2ο ΘΕΜΑ: Εστω τμημα της SRAM 32 bytes. Tα bits αριθμουνται απο το 0 εως 255 απο δεξια προς τα αριστερα. Να συνταχτει προγραμμα που θετει ισον με ενα το i bit, 0<=i<=255. Λυση: Για αυτη την ασκηση δεν ξερω ακριβως πως γινεται αλλα μου θυμιζει πολυ την ασκηση Β1-Determine the value of a bit in an array απο το φυλλαδιο. Ας προτεινει καποιος μια υλοποιηση. Σεπτεμβριος 06-1ο ΘΕΜΑ: Να υπολογιστει η παρασταση -2/5 + 6x/5 + 4y/5 . Οι αριθμοι εκφραζονται σε μορφη κλασματικου αριθμου σταθερης υποδιαστολης με ακριβεια 8bits. To 1/5 εκφραζεται σαν αθροισμα τριων αριθμων οι οποιοι ειναι δυναμεις του 2 ωστε να προσεγγιζεται οσο το δυνατον καλλιτερα το 1/5. Να υπολογιστει η παρασταση με πληρη ακριβεια χωρις τη χρηση της πραξης πολλαπλασιασμου ή της γενικης υπορουτινας υλοποιησης πολλαπλασιασμου. Λυση: Τρεχα γυρευε! Να φανταστω οτι η παρασταση μετασχηματιζεται σε -2/5 + x + y + x/5 - y/5. Δεν εχω ιδεα ομως πως ακριβως εκφραζεται το 1/5 σαν δυαδικος, μηπως 01000000=0.25, αρα περιπου 1/5. Αντε και να ειναι ετσι, πως θα κανουμε τον πολλαπλασιασμο αφου δε μας αφηνει να χρησιμοποιησουμε τιποτα? Σεπτεμβριος 06-2ο ΘΕΜΑ: Να συνταχθει προγραμμα που να απαριθμει την εμφανιση του byte 01x0x011 οπου x αδιαφορη λογικη κατασταση σενα πινακα. Η διευθυνση που βρισκεται αποθυκευμενο τετοιο στοιχειο κατα την τελευταια αναζητηση επισης να αποθηκευεται σε ενα καταχωρητη. Ο αριθμος των στοιχειων του πινακα ειναι μικροτερος του 256 και βρικεται αποθηκευμενος στην πρωτη θεση του πινακα. Το προγραμμα να συνταζθει σε μορφη υπορουτινας. Λυση: Πρεπει να ειναι παρομοια με την ευρεση του μεγιστου στοιχειου πινακα,ασκηση Ζ4 φυλλαδια. Δηλαδη ελεγχεις ενα ενα τα στοιχεια και οταν βρισκεις παρομοιο αυξανεις ενα μετρητη. Ο ελεγχος του στοιχειου μπορει να γινεται με καποια αφαιρεση ή κατι τετοιο, ας προτεινεται οτι εχετε σκεφτει. Αναμενω το σχολιασμο και τις προτασεις σας, ειναι πολυ σημαντικο να κατανοησουν ολοι αυτα τα θεματα!!! Title: Re: Ανάλυση Θεμάτων 2006 Post by: Καμένος on August 17, 2007, 18:57:20 pm Λοιπον ανοιγω αυτο το θεμα να αναλυσουμε τα περσινα θεματα εξετασεων Φεβρουαριος 06-1ο ΘΕΜΑ: Να υπολογιστει με πληρη ακριβεια η παρασταση y=5x + x/4 + sinθ οπου 0<=x<=255 και 0<=θ<=360. Το sinθ υπολογιζεται με αναζητηση σε πινακα αποθηκευμενο στη μνημη προγραμματος για τις γωνιες [1,...,89] Λυση: Ο αλγοριθμος μου φαινεται σχετικα γνωστος. Το 5x θα καταληξει σε 16bitο οποτε και χρησιμοποιουμε τη γνωστη ρουτινα που υλοποιησαμε και στο εργαστηριο, το x/4 ειναι δυο lsr, και το sinθ μια απλη ανακληση απο πινακα οπως στην παρομοια ασκηση φυλλαδιου με μεταροπη κελσιου σε φαρεναιτ που ανακαλουμε την τιμη απο πινακα. Λοιπόν το 5x είναι 4x+x, άρα 2 shifts και μία πρόσθεση σε 16 bit. To χ/4 είναι όντως 2 shifts Το sinθ θέλει λίγο προσοχή. Υπάρχουν αποθηκευμένες οι τιμές για sinθ από 1-89 μοίρες, αλλά το θ παίρνει τιμές από 0-360 μοίρες. Άρα ότι θ και να έχουμε πρέπει να γίνει αναγωγή στο πρώτο τεταρτημόριο. Πχ Α τεταρτημόριο: θ=57 ->Πάμε στη θέση 57 Β τεταρτημόριο: θ=123 =180-57 -> sin123=sin57 -> Πάμε στη θέση 57 Γ τεταρτημόριο: θ=237 = 180+57 -> sin237=-sin57 -> Πάμε στη θέση 57 και παίρνουμε το αρνητικό του (com) Δ τεταρτημόριο: θ=303=360-57 ->sin303= - sin57 ->Το ίδιο με πάνω. Τελικά όλη η έκφραση χρειάζεται 3 bytes διότι: 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 , 7 6 5 4 3 2 1 0 |------------------ 4χ ----------------| -> 10-17 |-------------χ-------------| -> 8-15 |---------------χ/4-------------| -> 6-13 |-----sinθ--------| -> 0-7 Φεβρουαριος 06-2ο ΘΕΜΑ: Εστω τμημα της SRAM 32 bytes. Tα bits αριθμουνται απο το 0 εως 255 απο δεξια προς τα αριστερα. Να συνταχτει προγραμμα που θετει ισον με ενα το i bit, 0<=i<=255. Λυση: Για αυτη την ασκηση δεν ξερω ακριβως πως γινεται αλλα μου θυμιζει πολυ την ασκηση Β1-Determine the value of a bit in an array απο το φυλλαδιο. Ας προτεινει καποιος μια υλοποιηση. Μόλις δοθεί το i πρέπει να βρούμε σε ποιο byte βρίσκεται και τη σχετική θέση του bit που πρέπει να αλλάξουμε μέσα στο byte. Κάνουμε 3 shifts δεξιά , δηλαδή διαίρεση με το 8 (Γιατί 256/32=8). Το ακέραιο μέρος (πηλίκο) θα δείχνει σε ποιο byte βρίσκεται το bit που θέλουμε να αλλάξουμε. Για να βρούμε το Index του bit μέσα στο byte, θελουμε το υπόλοιπο της διαίρεσης με το 8. Πχ i=5 -> Με 3 shifts παίρνουμε 0, άρα βρίσκεται στο 0 byte. Το υπόλοιπο είναι 5 άρα αλλάζουμε το bit με index 5 (Προσοχή όχι το 5ο, το 6ο). Πχ i=137 -> Με τρία shifts παίρνουμε 17, άρα πάμε στο byte με index 17. Το υπόλοιπο είναι 1, άρα αλλάζουμε το bit με index 1 (το δεύτερο Bit μέσα στο byte). Σεπτεμβριος 06-1ο ΘΕΜΑ: Να υπολογιστει η παρασταση -2/5 + 6x/5 + 4y/5 . Οι αριθμοι εκφραζονται σε μορφη κλασματικου αριθμου σταθερης υποδιαστολης με ακριβεια 8bits. To 1/5 εκφραζεται σαν αθροισμα τριων αριθμων οι οποιοι ειναι δυναμεις του 2 ωστε να προσεγγιζεται οσο το δυνατον καλλιτερα το 1/5. Να υπολογιστει η παρασταση με πληρη ακριβεια χωρις τη χρηση της πραξης πολλαπλασιασμου ή της γενικης υπορουτινας υλοποιησης πολλαπλασιασμου. Λυση: Τρεχα γυρευε! Να φανταστω οτι η παρασταση μετασχηματιζεται σε -2/5 + x + y + x/5 - y/5. Δεν εχω ιδεα ομως πως ακριβως εκφραζεται το 1/5 σαν δυαδικος, μηπως 01000000=0.25, αρα περιπου 1/5. Αντε και να ειναι ετσι, πως θα κανουμε τον πολλαπλασιασμο αφου δε μας αφηνει να χρησιμοποιησουμε τιποτα? Καλά φαντάστηκες! Έχουμε -2*1/5 + χ +y + x/5 - y/5 To 1/5 το έχουμε ώς άθροισμα 3 αριθμών δυνάμεων του 2: 0.2 = 0.125 (2^-3) + 0,0625 (2^-4) + 0.015625 (2^-6) = 0,203125 Αν αντί για 2^-6 βάζαμε το 2^-7 θα παίρναμε 0,195315 που είναι χειρότερη προσσέγγιση από το 0,203125. Άρα το 0.2= 0.00110100 Εφόσον δεν μπορούμε να κάνουμε πολλαπλασιασιασμό τι κάνουμε?? δεξιά shifts, δηλαδή διαιρέσεις! Αν έχουμε Κ*1/5 = Κ*(2^-3) + Κ*(2^-4) + Κ*(2^-6) Αρα κάνουμε 3 shifts δεξιά στο Κ και το βάζουμε το αποτέλεσμα σε δύο bytes, κάνουμε 4 shifts δεξιά στο Κ και βάζουμε το αποτέλεσμα σε άλλα δύο bytes και κάνουμε 6 δεξιά shifts στο Κ και βάζουμε το αποτέλεσμα σε άλλα δυο bytes. Τελικά τα προσθέτουμε όλα αυτά και βγαίνει το αποτέλεσμα. Αυτό πρέπει να γίνει για κάθε όρο της εξίσωσης και να προστεθούν όλα. Σεπτεμβριος 06-2ο ΘΕΜΑ: Να συνταχθει προγραμμα που να απαριθμει την εμφανιση του byte 01x0x011 οπου x αδιαφορη λογικη κατασταση σενα πινακα. Η διευθυνση που βρισκεται αποθυκευμενο τετοιο στοιχειο κατα την τελευταια αναζητηση επισης να αποθηκευεται σε ενα καταχωρητη. Ο αριθμος των στοιχειων του πινακα ειναι μικροτερος του 256 και βρικεται αποθηκευμενος στην πρωτη θεση του πινακα. Το προγραμμα να συνταζθει σε μορφη υπορουτινας. Λυση: Πρεπει να ειναι παρομοια με την ευρεση του μεγιστου στοιχειου πινακα,ασκηση Ζ4 φυλλαδια. Δηλαδη ελεγχεις ενα ενα τα στοιχεια και οταν βρισκεις παρομοιο αυξανεις ενα μετρητη. Ο ελεγχος του στοιχειου μπορει να γινεται με καποια αφαιρεση ή κατι τετοιο, ας προτεινεται οτι εχετε σκεφτει. Γίνεται κι έτσι (με τον μετρητή). Εγώ σκέφτηκα ένα πιο μπακάλικο τρόπο. Να υπάρχουν 6 διαδοχικά jump που το ένα θα οδηγεί στο άλλο εαν το επόμενο bit είναι το σωστό (6 jumps γιατί έχουμε 2 αδιαφορίες). Εάν φτάσουμε στο τελευταίο jump σημαίνει ότι όλα τα bits συμπίπτουν, άρα βρήκαμε το συγκεκριμένο Byte. Title: Re: Ανάλυση Θεμάτων 2006 Post by: liago13 on August 18, 2007, 00:38:10 am Κατατοπιστικοτατος ησουνα συναδελφε, αν εχει και καποιος αλλος να παραθεσει τις αποψεις του, ας μη διστασει.
Σε ευχαριστω για τις απαντησεις. Title: Re: Ανάλυση Θεμάτων 2006 Post by: cyberwizard on August 20, 2007, 19:23:51 pm Να κάνψ εγώ μια ερώτηση Καμένε, σχετικά με το πρώτο θέμα του Σεπτεμβρίου 2006. Έχω την εντύπωση ότι κάνεις πάρα πολλά LSR! Κάθε μετατόπιση στα δεξιά,είναι διαίρεση με το 2,άρα για να διαιρέσεις με το 3 κάνεις ένα LSR και αφαιρείς το υπόλοιπο. Ελπίζω να μη λέω βλακείες,απλά μου φαίνονται πολλά τα shifts :P
Title: Re: Ανάλυση Θεμάτων 2006 Post by: Καμένος on August 21, 2007, 08:15:23 am Να κάνψ εγώ μια ερώτηση Καμένε, σχετικά με το πρώτο θέμα του Σεπτεμβρίου 2006. Έχω την εντύπωση ότι κάνεις πάρα πολλά LSR! Κάθε μετατόπιση στα δεξιά,είναι διαίρεση με το 2,άρα για να διαιρέσεις με το 3 κάνεις ένα LSR και αφαιρείς το υπόλοιπο. Ελπίζω να μη λέω βλακείες,απλά μου φαίνονται πολλά τα shifts :P Καταρχήν εδώ θές να διαιρέσεις με το 5. Επίσης συμφωνείς ότι το 1/5*Κ γράφεται προσεγγιστικά ως: Κ*(2^-3) + Κ*(2^-4) + Κ*(2^-6) ?? Αν ναι , ο πρώτος όρος είναι διαίρεση με το 8 (3 shifts) , ο δεύτερος διαίρεση με το (2^4) δηλαδή με το 16 (4 shifts) και ο τρίτος διαίρεση με το 2^6 δηλαδή το 64 (6 shifts) . Μετά αυτά τα shifts προσθέτεις όλα τα αποτελέσματα και έχεις το αποτέλεσμα. Δοκίμασέ το και θα δείς ότι ισχύει. Εξάλλου το ίδιο κάνεις και για να πολλαπλασιάσεις με έναν αριθμό. Πχ 4*9=4*(1001) άρα 3 shifts αριστερά και πρόσθεση με τον ίδιο τον αριθμό. Απλά σου φαίνονται πολλά τα shifts γιατί είμαστε στο δεκαδικό μέρος. Μη ξεχνάς ότι δεν αναπαρίστανται όλοι οι δεκαδικοί αριθμοί ακριβώς. Άρα αν η άσκηση έλεγε ότι το 1/5 δίνεται με πρόσθεση 10 αριθμών δυναμεων του δύο θα έπρεπε να κάνεις προσθέσεις δέκα αριθμών που θα ήταν shiftaρισμένοι δεξιά τόσες θέσεις όσες προκύπτουν από την αναπαράσταση του 1/5 σε δυαδικό floating point. Τότε τα τελευταία shifts θα ήταν πολλά (πανω από 20)! Title: Re: Ανάλυση Θεμάτων 2006 Post by: solid_snake on August 21, 2007, 18:45:57 pm Αν έχουμε Κ*1/5 = Κ*(2^-3) + Κ*(2^-4) + Κ*(2^-6) Αρα κάνουμε 3 shifts δεξιά στο Κ και το βάζουμε το αποτέλεσμα σε δύο bytes, κάνουμε 4 shifts δεξιά στο Κ και βάζουμε το αποτέλεσμα σε άλλα δύο bytes και κάνουμε 6 δεξιά shifts στο Κ και βάζουμε το αποτέλεσμα σε άλλα δυο bytes. Τελικά τα προσθέτουμε όλα αυτά και βγαίνει το αποτέλεσμα. Καμένε, να σε ρωτήσω,γιατί το K μετα τα shifts to αποθηκεύουμε σε 2 bytes? Μηπως εννοεις οτι στο ένα byte θα χουμε τον ακεραιο αριθμο και στο αλλο byte τον δεκαδικό? Title: Re: Ανάλυση Θεμάτων 2006 Post by: Καμένος on August 21, 2007, 23:43:58 pm exactly. Πές ότι έχεις το 32 (εντελώς τυχαία!) που είναι σε δυαδικό
00100000 Το 32/5=(00100000)*(2^-3)+(00100000)*(2^-4)+(00100000)*(2^-6)= 00000100.00000000+00000010.00000000+00000000.10000000= 00000110,10000000 (για δύο bytes) = 6.5 Το αποτέλεσμα δε βγήκε 6,4 (που είναι το πραγματικό) γιατι το 1/5 δεν λήφθηκε υπόψη με πλήρη ακρίβεια: To 1/5 εκφραζεται σαν αθροισμα τριων αριθμων οι οποιοι ειναι δυναμεις του 2 ωστε να προσεγγιζεται οσο το δυνατον καλλιτερα το 1/5. Title: Re: Ανάλυση Θεμάτων 2006 Post by: solid_snake on August 22, 2007, 00:11:46 am exactly. Πές ότι έχεις το 32 (εντελώς τυχαία!) που είναι σε δυαδικό 00100000 Το 32/5=(00100000)*(2^-3)+(00100000)*(2^-4)+(00100000)*(2^-6)= 00000100.00000000+00000010.00000000+00000000.10000000= 00000110,10000000 (για δύο bytes) = 6.5 Το αποτέλεσμα δε βγήκε 6,4 (που είναι το πραγματικό) γιατι το 1/5 δεν λήφθηκε υπόψη με πλήρη ακρίβεια: To 1/5 εκφραζεται σαν αθροισμα τριων αριθμων οι οποιοι ειναι δυναμεις του 2 ωστε να προσεγγιζεται οσο το δυνατον καλλιτερα το 1/5. Μαλιστα,τώρα το καταλαβα πλήρως! Εισαι και ο πρώτος! Thanx! Title: Re: Ανάλυση Θεμάτων 2006 Post by: zlatalex on August 22, 2007, 00:14:07 am Παιδια εγω το πέρασα αλλά να σας ρωτήσω κάτι
το 6/5 δλδ θα το γράφατε 6*(1/5) (όπου το 1/5 το έχετε υπολογίσει προσεγγιστικά ως άθροισμα 3 αριθμών); 'Η (που είναι πολύ ακριβέστερο) ως 1 + (1/5); Title: Re: Ανάλυση Θεμάτων 2006 Post by: zlatalex on August 22, 2007, 00:15:40 am η παρασταση μετασχηματιζεται σε -2/5 + x + y + x/5 - y/5. Τωρα το δα και πήγα να το παίξω και έξυπνος ;D Title: Re: Ανάλυση Θεμάτων 2006 Post by: nicktgr15 on August 22, 2007, 18:26:41 pm Λοιπον ανοιγω αυτο το θεμα να αναλυσουμε τα περσινα θεματα εξετασεων Φεβρουαριος 06-1ο ΘΕΜΑ: Να υπολογιστει με πληρη ακριβεια η παρασταση y=5x + x/4 + sinθ οπου 0<=x<=255 και 0<=θ<=360. Το sinθ υπολογιζεται με αναζητηση σε πινακα αποθηκευμενο στη μνημη προγραμματος για τις γωνιες [1,...,89] Όντως μνήμη προγράμματος; Ή μήπως μνήμη δεδομένων; Title: Re: Ανάλυση Θεμάτων 2006 Post by: gpapanik on August 22, 2007, 19:42:04 pm Λοιπον ανοιγω αυτο το θεμα να αναλυσουμε τα περσινα θεματα εξετασεων Φεβρουαριος 06-1ο ΘΕΜΑ: Να υπολογιστει με πληρη ακριβεια η παρασταση y=5x + x/4 + sinθ οπου 0<=x<=255 και 0<=θ<=360. Το sinθ υπολογιζεται με αναζητηση σε πινακα αποθηκευμενο στη μνημη προγραμματος για τις γωνιες [1,...,89] Όντως μνήμη προγράμματος; Ή μήπως μνήμη δεδομένων; Title: Re: Ανάλυση Θεμάτων 2006 Post by: nicktgr15 on August 22, 2007, 21:46:54 pm Καλώς. Χρησιμοποιούμε δηλαδή την LPM για να διαβάσουμε δεδομένα.
Σε περίπτωση που θέλουμε να φτιάξουμε εμείς πίνακα δεδομένων στην Program memory, ποια εντολή/ψευδοεντολή χρησιμοποιούμε; Title: Re: Ανάλυση Θεμάτων 2006 Post by: Καμένος on August 23, 2007, 08:43:50 am Δε θυμάμαι τώρα.. Στο τέλος του datasheet του AVRMega128 έψαξες?
Title: Re: Ανάλυση Θεμάτων 2006 Post by: gpapanik on August 23, 2007, 11:04:52 am Καλώς. Χρησιμοποιούμε δηλαδή την LPM για να διαβάσουμε δεδομένα. Σε περίπτωση που θέλουμε να φτιάξουμε εμείς πίνακα δεδομένων στην Program memory, ποια εντολή/ψευδοεντολή χρησιμοποιούμε; Θες π.χ. να φτιαξεις 1 πινακα που αρχιζει στη διευθυνση $0257 και περιεχει τις λεξεις $0030,$0730,... .org $0257 .dw $0030,$0730,... Yπαρχει και η ψευδοεντολη .db για αποθηκευση κατα byte. Title: Re: Ανάλυση Θεμάτων 2006 Post by: nicktgr15 on August 23, 2007, 16:06:00 pm Εχω δοκιμάσει έτσι αλλα μου βγάζει σφάλματα κατα την εκτέλεση.
Π.χ. για .dw $0030,$0730 AVR Simulator: Invalid opcode 0x0030 at address 0x000000 Διαβάζει δηλαδη τις γραμμές που γράφω ως εντολές και βρίσκει λάθη. Μόνο για .dw 0b0000000000000000 είναι όλα οκ.(Nop) Μήπως να αγνοήσω τα σφάλματα και να συνεχίσω; Άλλωστε δεν φαίνεται να υπάρχει πρόβλημα στη συνέχεια. edit: και μια λύση του θέματος 3. Φεβρουάριος 2006. + θέμα 3 Σεπτέμβριος 2006 +θεμα 2 πτυχιακή Title: Re: Ανάλυση Θεμάτων 2006 Post by: gpapanik on August 23, 2007, 19:07:32 pm Εχω δοκιμάσει έτσι αλλα μου βγάζει σφάλματα κατα την εκτέλεση. Π.χ. για .dw $0030,$0730 AVR Simulator: Invalid opcode 0x0030 at address 0x000000 Διαβάζει δηλαδη τις γραμμές που γράφω ως εντολές και βρίσκει λάθη. Μόνο για .dw 0b0000000000000000 είναι όλα οκ.(Nop) Μήπως να αγνοήσω τα σφάλματα και να συνεχίσω; Άλλωστε δεν φαίνεται να υπάρχει πρόβλημα στη συνέχεια. edit: και μια λύση του θεματος 2. Φεβρουάριος 2006. Για δοκιμασε, βαζοντας ενα .org, να θεσεις την αρχικη διευθυνση μετα απο την τελευταια που χρησιμοποιειται για τα διανυσματα διακοπης. Επισης, ηθελα να ρωτησω αν ξερει κανεις για ποιον AVR γραφουμε τα προγραμματα στις εξετασεις, τον 8515 ή τον Mega128 (ή δεν μας ενδιαφερει); Title: Re: Ανάλυση Θεμάτων 2006 Post by: nicktgr15 on August 23, 2007, 19:16:36 pm Το έκανα έτσι τελικά...
. . . end: rjmp end ;τέλος προγράμματος .org $30 ; με ή χωρίς .org .db 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 Title: Re: Ανάλυση Θεμάτων 2006 Post by: gpapanik on August 23, 2007, 19:25:58 pm Το έκανα έτσι τελικά... . . . end: rjmp end ;τέλος προγράμματος .org $30 ; με ή χωρίς .org .db 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 Προσεξε, ομως, οταν βαζεις τον πινακα στο τελος του κωδικα ΚΑΙ χρησιμοποιεις το .org μηπως επικαλυπτει καποιες απο τις εντολες σου. Title: Re: Ανάλυση Θεμάτων 2006 Post by: nicktgr15 on August 24, 2007, 00:06:30 am Ναι, το $30 ήταν μέτα το τέλος των εντολών.
Ολα οκ. Title: Re: Ανάλυση Θεμάτων 2006 Post by: gpapanik on August 24, 2007, 20:10:27 pm Αν έχουμε Κ*1/5 = Κ*(2^-3) + Κ*(2^-4) + Κ*(2^-6) Αρα κάνουμε 3 shifts δεξιά στο Κ και το βάζουμε το αποτέλεσμα σε δύο bytes, κάνουμε 4 shifts δεξιά στο Κ και βάζουμε το αποτέλεσμα σε άλλα δύο bytes και κάνουμε 6 δεξιά shifts στο Κ και βάζουμε το αποτέλεσμα σε άλλα δυο bytes. Τελικά τα προσθέτουμε όλα αυτά και βγαίνει το αποτέλεσμα. Καμένε, να σε ρωτήσω,γιατί το K μετα τα shifts to αποθηκεύουμε σε 2 bytes? Μηπως εννοεις οτι στο ένα byte θα χουμε τον ακεραιο αριθμο και στο αλλο byte τον δεκαδικό? Title: Re: Ανάλυση Θεμάτων 2006 Post by: nicktgr15 on August 24, 2007, 21:42:01 pm Ναι, το είχα προσέξει και εγώ. Αλλά μήπως η πλήρης ακρίβεια αναφέρεται στο ακέραιο μέρος μόνο; :D
Title: Re: Ανάλυση Θεμάτων 2006 Post by: Καμένος on August 24, 2007, 23:20:59 pm Όχι. Πλήρης ακρίβεια σημαίνει ΠΛΗΡΗΣ ακρίβεια.. Ο gpapanic έχει δίκιο. Δεν είχα προσέξει τα όρια των χ,y..
Title: Re: Ανάλυση Θεμάτων 2006 Post by: zlatalex on August 25, 2007, 00:12:24 am Πάρτε να χετε και τα θέματα που μας έβαλε στην πτυχιακή τώρα τον Ιούνιο:
edited by moderator: Τα θέματα ανέβηκαν στα downloads: http://www.thmmy.gr/smf/index.php?action=tpmod;dl=cat91 Title: Re: Ανάλυση Θεμάτων 2006 Post by: cyberwizard on August 25, 2007, 00:59:24 am Μία λίγο διαφορετική λύση του 2ου θέματος του Σεπτεμβρίου 2006 από μένα.Χρησιμοποιεί μια λογική με jumps περίπου όπως την περιέγραψε ο φίλος Καμένος :)
Title: Re: Ανάλυση Θεμάτων 2006 Post by: Nnickman on August 25, 2007, 21:02:30 pm Nicktgr15 μήπως γίνεται να βάλεις λίγο επεξήγηση στο πρόγραμμά σου για την λύση του 2ου
θέματος του Φεβρουαρίου 2006; Συγκεκριμένα δίνεις κάποια τιμή στο χ και στο θ και που ελέγχεις σε ποιο τεταρτημόριο ανήκει το θ; Title: Re: Ανάλυση Θεμάτων 2006 Post by: nicktgr15 on August 26, 2007, 13:45:28 pm Nnickman είναι το 3ο θέμα. :) 2ο θέμα απο τις ασκήσεις. (είχα χρησιμοποιήσει την αρίθμηση απο το αρχικό μήνυμα)
Title: Re: Ανάλυση Θεμάτων 2006 Post by: Καμένος on August 26, 2007, 14:25:54 pm Μία λίγο διαφορετική λύση του 2ου θέματος του Σεπτεμβρίου 2006 από μένα.Χρησιμοποιεί μια λογική με jumps περίπου όπως την περιέγραψε ο φίλος Καμένος :) Βασικά θέλει λίγο προσοχή... Το έχεις ξεσκίσει λίγο.. Το έβαλες στο AVR studio και έτρεχε? .include "8515def.inc" .org 0x00 //Εδώ γαμάς τον πίνακα. Τον βάζεις στη θέση 0χ00 και μετά δηλώνεις το reset. //Παρόλα αυτά το reset μπαίνει by default στη θέση 0χ00 και θα χαλάσει ο πίνακας //Καλύτερα να βάλεις εδώ .org 0x100 και μετά πρίν το reset να βάλεις .org 0x00 .CSEG .def array_len=r21 .def current= r22 .def locationL=r23 .def locationH=r24 .def plithos=r25 pinakas : .DB 0b00000011,0b01010011,0b01001011 rjmp reset //Τι νόημα έχει να γράφεις rjmp reset και μετά να έχεις το reset? Αφού θα πάει έτσι κι //αλλιώς reset: CLC //Δεν έχεις αρχικοποιήσεις το stack pointer ldi ZH,HIGH(2*pinakas) ldi ZL,LOW(2*pinakas) brcc continue //Κάνεις branch αν το carry είναι 0 . Από πού κι ως πού? αφού τα ldi δεν μεταβάλλουν το //carry. //Επίσης το inc ZH είναι άχρηστο.. inc ZH continue: ldi plithos,$00 Start: lpm mov array_len,r0 check_numbers: dec array_len //Δεν έχει και πολύ σημασία αλλά αν το array_len είναι 1 το πρόγραμμα θα τερματίσει κατευθείαν. //Χάνεις 1 bit. breq end inc ZL //Εδώ πρέπει να δείς αν έχεις carry για να το προσθέσεις στο ZH lpm mov current,r0 bst current,0 brts next_bit brtc check_numbers next_bit: bst current,1 brts next_bit2 brtc check_numbers next_bit2: bst current,2 brtc next_bit3 brts check_numbers next_bit3: bst current,4 brtc next_bit4 brts check_numbers next_bit4: bst current,6 brts next_bit5 brtc check_numbers next_bit5: bst current,7 brtc found brts check_numbers found: mov locationL,ZL mov locationH,ZH inc plithos rjmp check_numbers //Αν βρεί την ακολουθία παραπάνω από 1 φορές τι θα κάνει? Θα χάσει την προηγούμενη //τοποθεσία.. end: rjmp reset //Αυτό δεν έχει νόημα. Μόλις κάνει end θα κάνει reset θα χαθούν όλα. Καλύτερα να βάλεις rjmp end Αυτά!! Σε λίγο θα έρθει και κώδικας... Title: Re: Ανάλυση Θεμάτων 2006 Post by: cyberwizard on August 26, 2007, 16:34:51 pm Καταρχήν,τρέχει μια χαρά στον AVR...δοκίμασε το αν θες.
Κατά δεύτερον,προσπάθησα να βάλω τον πίνακα σε άλλη θέση πέραν της 0χ00, γράφοντας μια εντολή όπως .org0x0200 . Ε λοιπόν,έβαλα τον πίνακα στην αρχή,στο τέλος και τίποτα.Δεν διάβαζε την τιμή της πρώτης θέσης του πίνακα. Ξαναλέψ,έκανα αυτό που λες στο σχόλιο και δεν δούλευε. Τρίτον,το rjmp reset στην αρχή, το έκανα πρώτη φορά στο εργαστήριο όταν ένα πρόγραμμα δεν έτρεχε.Δεν ενοχλεί κάπου. Για το branch έχεις δίκιο,δεν έψαξα αν επιρρεάζεται το carry.Το έβαλα σκεπτόμενος τον πολλαπλασιασμό χ2 που έκανα στις τιμές της μνήμης που δείχνουν τα ZL και ZH.Λάθος. Τέταρτον...Αν το array_len είναι 1,στον πίνακα υπάρχει μια τιμή η οποία είναι το μήκος του πίνακα...δηλαδή 1! Πού είναι το λάθος? Το σχόλιο για έλεγχο του carry είναι σωστό. Τώρα αν βρεθεί η ακολουθία παραπάνω από μια φορές,ναι θα χαθεί.Αλλά κοίτα την εκφώνιση. "Η διεύθυνση όπου βρίσκεται αποθηκευμένο κατά την τελευταία αναζήτηση στο συγκεκριμένο στοιχείο αποθηκεύεται σε ΕΝΑΝ καταχωρητή. Από αυτό εγώ καταλαβαίνω ότι κρατάμε μόνο μια τιμή,αυτήν δηλάδή που βρέθηκε την τελευταία φορά.Γι αυτό και το έγραψα έτσι. Το rjmp reset στο τέλος δεν νομίζω ότι είναι τόσο σπουδαίο.Αν πάμε με το γράμμα του νόμου,το πρόγραμμα πρέπει να τερματίζεται,αλλά οκ και να ξεκινήσει από την αρχή τί έγινε? Αυτά.Ελπίζω να διευκρινίστηκαν κάποια πράγματα.Παρεπιπτόντως αν καταφέρεις κάτι καλύτερο με την αρχική θέση του πίνακα πες το,γιατί προσωπικά μου έσπασε τα νεύρα.O AVR είναι αρκετά buggy ώρες ώρες...... Title: Re: Ανάλυση Θεμάτων 2006 Post by: Axel on August 26, 2007, 16:40:29 pm Εχω κανει το παρακατω προγραμμα σαν λυση του 2ου Θεματος της πτυχιακης. Αρχικα γεμιζω τη μνημη με μια ακουλουθια και στη συνεχεια με τον ιδιο χαρακτηρα μεσω 2 loops. Επειδη δεν ξερω πως να θεωρησω ενα 16bit αριθμο (πως γινεται αυτο??) τον εσπασα σε δυο κομματια 255+85. ΣΤη συνεχεια ομως δε μπορω να πω στο προγραμμα να αρχισει να διαβαζει τις τιμες απο τη θεση $60 της μνημης και να τις βαζει στους καταχωρητες για να γινει η συγκριση. Πως μπορω να το κανω αυτο?
Ο αλγοριθμος για την αναζητηση εχει λαθος, αλλα ας βρω πρωτα πως μπορω να ξαναδιαβασω απο τη θεση μνημης που θελω. (Οχι με εντολη του στυλ lds r16, $60). .include "8515def.inc" .def temp = r16 .def count1 = r17 .def count2 = r18 .def times = r19 .cseg ldi count1, 255 ldi count2, 85 ldi r30, $60 ; fill memory ldi temp, $63 ; c st z+, temp dec count1 ldi temp, $41 ; A st z+, temp ; dec count1 ldi temp, $62 ; b st z+, temp ; dec count1 ldi temp, $63 ; c st z+, temp ; dec count1 ldi temp, $41 ; A st z+, temp ; dec count1 ldi temp, $62 ; b st z+, temp ; dec count1 loop1: ldi temp, $63 st z+, temp dec count1 brne loop1 loop2: ldi temp, $63 st z+, temp dec count2 brne loop2 ldi count1, 255 ldi count2, 85 ldi r30, $60 next: dec count1 brne search dec count2 breq end search: ld temp, z+ ; Δεν εχει γυρισει στη 8εση $60 cpi temp, $41 brne next ld temp, z+ cpi temp, $62 brne next inc times rjmp next end: rjmp end Title: Re: Ανάλυση Θεμάτων 2006 Post by: zlatalex on August 26, 2007, 17:14:20 pm ρε μην ζορίζεστε τόσο
υποτίθεται πως ο πίνακας με τους 340 χαρακτήρες είναη ΗΔΗ στη μνήμη έλεος! γενικά στις εξετάσεις να παίρνετε ως δεδομένα όσο πιο πολλά πράγματα μπορείτε αν θέλετε να τα πάτε καλά Title: Re: Ανάλυση Θεμάτων 2006 Post by: Axel on August 26, 2007, 18:03:06 pm υποτίθεται πως ο πίνακας με τους 340 χαρακτήρες είναη ΗΔΗ στη μνήμη Δε διαφωνω καθολου. Γενικα ρωταω για να ξερω πως γινεται αυτο το πραγμα που θελω μιας και προεκυψε. Ειδα καπου οτι στο εργαστηριο ειχε ερωτηση να περασεις κατι τιμες με ενα loop στη μνημη και μετα με ενα αλλο loop να τις διαβασεις. Αν μπορει καποιος να μου δειξει πως γινεται αυτο.. Title: Re: Ανάλυση Θεμάτων 2006 Post by: nicktgr15 on August 26, 2007, 18:46:15 pm Code: ldi XL,$60 ;estw oti exeis kanei .def Εγγραφη και αναγνωση για την SRAM. Αν αυτό είναι που ζητάς. Title: Re: Ανάλυση Θεμάτων 2006 Post by: Axel on August 26, 2007, 21:07:35 pm Thanks nicktgr15. :) Αυτο ειχα και γω κατα νου. Ομως δεν μπορω να καταλαβω γιατι στο παρακατω προγραμμα στη γραμμη που εχω το comment η temp δε φορτωνει καθολου τιμες απο τον Χ. Αν δεν βαριεσαι να το τρεξεις βαλε ενα breakpoint αφου τελειωσει το loop2 για να περασεις στα γρηγορα το γεμισμα της μνημης.
.include "8515def.inc" .def temp = r16 .def count1 = r17 .def count2 = r18 .def times = r19 .cseg ldi count1, 255 ldi count2, 85 ldi XL, $60 ; fill memory ldi temp, $63 ; c st X+, temp dec count1 ldi temp, $41 ; A st X+, temp ; dec count1 ldi temp, $62 ; b st X+, temp ; dec count1 ldi temp, $63 ; c st X+, temp ; dec count1 ldi temp, $41 ; A st X+, temp ; dec count1 ldi temp, $62 ; b st X+, temp ; dec count1 loop1: ldi temp, $63 st X+, temp dec count1 brne loop1 loop2: ldi temp, $63 st X+, temp dec count2 brne loop2 ldi count1, 255 ldi count2, 85 ldi XL, $60 next: dec count1 brne search dec count2 breq end search: ld temp, X+ ; la8os?? cpi temp, $41 brne next ld temp, X+ cpi temp, $62 brne next inc times rjmp next end: rjmp end Title: Re: Ανάλυση Θεμάτων 2006 Post by: nicktgr15 on August 26, 2007, 22:09:45 pm Λίγο που το κοίταξα Axel με το avr studio η εντολή για να διαβάσει λειτουργεί κανονικά. Κάτι με τον τροπο που μετρας δημιουργει το πρόβλημα.
Δες και το αρχειο που εχω ανεβάσει για την συγκεκριμένη άσκηση σε προηγούμενο post μου. Title: Re: Ανάλυση Θεμάτων 2006 Post by: solid_snake on August 27, 2007, 14:52:04 pm Παιδια, όταν ρωτάει στα θέματα των εξετάσεων να υπολογίσουμε το αποτέλεσμα με πλήρη ακρίβεια τί εννοεί?Το δεκαδικο μέρος να είναι 8 bit ή 16 bit?
Title: Re: Ανάλυση Θεμάτων 2006 Post by: gpapanik on August 27, 2007, 15:28:13 pm Οσοδηποτε 8,12,16,19,39 αρκει να μην χανεται ουτε ενα bit απο καμια ολισθηση, ειτε δεξια ειτε αριστερη.
Title: Re: Μίκρο 1 - Ανάλυση Θεμάτων 2006 Post by: Axel on August 27, 2007, 21:16:06 pm Λίγο που το κοίταξα Axel με το avr studio η εντολή για να διαβάσει λειτουργεί κανονικά. Κάτι με τον τροπο που μετρας δημιουργει το πρόβλημα. Δες και το αρχειο που εχω ανεβάσει για την συγκεκριμένη άσκηση σε προηγούμενο post μου. Thanks για τις απαντησεις σε ολα τα threads nicktgr15 :) Title: Re: Μίκρο 1 - Ανάλυση Θεμάτων 2006 Post by: chronus on August 28, 2007, 10:23:36 am Φεβρουαριος 06-1ο ΘΕΜΑ: Να υπολογιστει με πληρη ακριβεια η παρασταση y=5x + x/4 + sinθ οπου 0<=x<=255 και 0<=θ<=360. Το sinθ υπολογιζεται με αναζητηση σε πινακα αποθηκευμενο στη μνημη προγραμματος για τις γωνιες [1,...,89] Λοιπόν το 5x είναι 4x+x, άρα 2 shifts και μία πρόσθεση σε 16 bit. To χ/4 είναι όντως 2 shifts Το sinθ θέλει λίγο προσοχή. Υπάρχουν αποθηκευμένες οι τιμές για sinθ από 1-89 μοίρες, αλλά το θ παίρνει τιμές από 0-360 μοίρες. Άρα ότι θ και να έχουμε πρέπει να γίνει αναγωγή στο πρώτο τεταρτημόριο. Πχ Α τεταρτημόριο: θ=57 ->Πάμε στη θέση 57 Β τεταρτημόριο: θ=123 =180-57 -> sin123=sin57 -> Πάμε στη θέση 57 Γ τεταρτημόριο: θ=237 = 180+57 -> sin237=-sin57 -> Πάμε στη θέση 57 και παίρνουμε το αρνητικό του (com) Δ τεταρτημόριο: θ=303=360-57 ->sin303= - sin57 ->Το ίδιο με πάνω. Τελικά όλη η έκφραση χρειάζεται 3 bytes διότι: 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 , 7 6 5 4 3 2 1 0 |------------------ 4χ ----------------| -> 10-17 |-------------χ-------------| -> 8-15 |---------------χ/4-------------| -> 6-13 |-----sinθ--------| -> 0-7 Να ρωτήσω κάποιες απορίες για αυτό το θέμα, αν και λίγο αργά: 1) Το θ παίρνει τιμές από 0 μέχρι 360. Άρα είναι αποθηκευμένο σε 2-bytes έτσι ? Δηλάδη πρέπει να κάνουμε cpi σε μία 2-byte μεταβλητή για να βλέπουμε σε ποιο τεταρτημόριο βρίσκεται και ανάλογα να το αναγάγουμε στο πρώτο ; 2) Το 5χ αποθηκεύεται σε ένα 2-byte ακέραιο. Το χ/4 αποθηκεύεται σε ένα 2-byte όπου το MSByte είναι ακέραιος και το LSByte κλασματικό μέρος. Πως τα προσθέτουμε ; Πολύ μπέρδεμα η άσκηση ... [/quote] Title: Re: Μίκρο 1 - Ανάλυση Θεμάτων 2006 Post by: gpapanik on August 28, 2007, 10:46:17 am 1) Το θ παίρνει τιμές από 0 μέχρι 360. Άρα είναι αποθηκευμένο σε 2-bytes έτσι ? Δηλάδη πρέπει να κάνουμε cpi σε μία 2-byte μεταβλητή για να βλέπουμε σε ποιο τεταρτημόριο βρίσκεται και ανάλογα να το αναγάγουμε στο πρώτο ; 2) Το 5χ αποθηκεύεται σε ένα 2-byte ακέραιο. Το χ/4 αποθηκεύεται σε ένα 2-byte όπου το MSByte είναι ακέραιος και το LSByte κλασματικό μέρος. Πως τα προσθέτουμε ; Πολύ μπέρδεμα η άσκηση ... 1. Ναι αν και δεν γινεται μονο με μια cpi. 2. [--MSB--][--LSB--] <---------5x (16bits) + [--MSB-].[--fract--] <---------x/4 (16bits) ------------------------------------------- [byte1---][byte2--].[byte3--] <----------result (24bits) Title: Re: Μίκρο 1 - Ανάλυση Θεμάτων 2006 Post by: chronus on August 28, 2007, 12:38:13 pm Ευχαριστώ για την άμεση απάντηση.. Έκατσα και την έβγαλα, θέλει πολύ λεπτομέρεια γενικά. Να ρωτήσω και κάτι άλλο μήπως και απαντήσει κάποιος. Δεν έχω καταλάβει τη μεθοδολογία που κάνουμε για διαίρεση χωρίς τη mul. Αυτό που είπε ο Καμμένος (επίκαιρο..) στα πρώτα posts το καταλαβαίνω. Όταν πάω να δω τη λυμμένη που έχει κάνει ο Πέτρου όμως δεν την καταλαβαίνω. Στην αρχή κιόλας κάνει ένα right shift και γράφει από δίπλα (add temp / 256 ) ?
Αν μπορεί κάποιος να εξηγήσει τελευταία στιγμή είναι σωτήρας... Title: Re: Μίκρο 1 - Ανάλυση Θεμάτων 2006 Post by: gpapanik on August 28, 2007, 14:17:44 pm Διαιρεση χωρις την mul κανεις ακριβως οπως κανεις πολ/σμο, αλλα με δεξια shifts. Αυτο που κανει o Πετρου απ'οτι θυμαμαι ειναι το εξης. Εχει το 0.8 σε δυαδικο, κανει δεξιες μετατοπισεις και οταν παιρνει 1 στο Carry προσθετει στο αποτελεσμα τη διαιρεμενη τιμη. Ελπιζω να βοηθησα, ειναι τελευταια στιγμη και δεν προλαβαινω να το κοιταξω.
Title: Re: Μίκρο 1 - Ανάλυση Θεμάτων 2006 Post by: l0v3null on February 12, 2008, 01:50:54 am Σεπτεμβριος 06-2ο ΘΕΜΑ: Να συνταχθει προγραμμα που να απαριθμει την εμφανιση του byte 01x0x011 οπου x αδιαφορη λογικη κατασταση σενα πινακα. Η διευθυνση που βρισκεται αποθυκευμενο τετοιο στοιχειο κατα την τελευταια αναζητηση επισης να αποθηκευεται σε ενα καταχωρητη. Ο αριθμος των στοιχειων του πινακα ειναι μικροτερος του 256 και βρικεται αποθηκευμενος στην πρωτη θεση του πινακα. Το προγραμμα να συνταζθει σε μορφη υπορουτινας. Λυση: Πρεπει να ειναι παρομοια με την ευρεση του μεγιστου στοιχειου πινακα,ασκηση Ζ4 φυλλαδια. Δηλαδη ελεγχεις ενα ενα τα στοιχεια και οταν βρισκεις παρομοιο αυξανεις ενα μετρητη. Ο ελεγχος του στοιχειου μπορει να γινεται με καποια αφαιρεση ή κατι τετοιο, ας προτεινεται οτι εχετε σκεφτει. Γίνεται κι έτσι (με τον μετρητή). Εγώ σκέφτηκα ένα πιο μπακάλικο τρόπο. Να υπάρχουν 6 διαδοχικά jump που το ένα θα οδηγεί στο άλλο εαν το επόμενο bit είναι το σωστό (6 jumps γιατί έχουμε 2 αδιαφορίες). Εάν φτάσουμε στο τελευταίο jump σημαίνει ότι όλα τα bits συμπίπτουν, άρα βρήκαμε το συγκεκριμένο Byte. Λοιπον βλεποντας κι εγω τι ειχαν σκεφτει τα παιδια παλαιοτερα, εγω για το συγκεκριμενο προτεινω....περασμα του υπο εξεταση byte απο μασκα $28 και συγκεκριμενα με OR ωστε να εχουμε τα αδιαφορα bit παντα μοναδα.Η δευτερη μασκα που ειναι και το ζητουμενο θα γραφει με τις αδιαφοριες ως 1 και αρα θα ειναι η $6B, και τελος με αυτη θα γινεται ΕΧΟR με το εκαστοτε υπο εξεταση byte.....αν το αποτελεσμα ειναι 0 (κοινως breq) τοτε διανα και αυξανουμε ενα μετρητη..... Title: Re: [Μίκρο 1] Ανάλυση Θεμάτων 2006 Post by: thanosdr on October 03, 2008, 01:41:33 am Ξερω οτι ειναι πολυ αργα για ερωτησεις αλλα θα κανω την προσπαθεια μου.
Τον Φλεβαρη ειχε μια εξισωση που χ και y ηταν προσημασμενοι και ειχαν 4 bits ακεραιο μερος και 4 bits δεκαδικο μερος. Η εξισωση ηταν 5Χ +(3Υ)/8 + 17. Πως ακριβως δουλευουμε; Η αλλη ασκηση ειχε προσπθεση 3 πινακων με στοιχεια των 30 bit. Καμια ιδεα;; Παρακαλω παρα πολυ οποιον ξερει να απαντησει. Τι μορφη θα εχουν οι αριθμοι. Ποσα bytes θα εχουν κτλ;; Title: Re: [Μίκρο 1] Ανάλυση Θεμάτων 2006 Post by: alekos on October 03, 2008, 02:10:07 am Στο πρώτο θέμα αν θυμάμαι καλά είχε πέσει και διευκρίνιση
Υπάρχουν πολλοί τρόποι για να το δουλέψεις. Προσωπικά αρχικά απομόνωνα το nibble με τα δεκαδικά έκανα πράξεις εκεί και εφόσον προέκυπτε 5ο bit το περνούσα μετά στο nibble με τον ακέραιο και μετά έκανα τις πράξεις ακεραίων με παρόμοιο τρόπο. Το κακό ήταν ότι το πρόγραμμα μου βγήκε τεράστιο και έχασα πολύ χρόνο σε αυτό. Για το δεύτερο θέμα δεν μπορώ να σου απαντήσω τώρα αλλά ήταν σχετικά εύκολο Title: Re: [Μίκρο 1] Ανάλυση Θεμάτων 2006 Post by: thanosdr on October 03, 2008, 02:17:24 am Δηλαδη σε ενα byte ακεραιος και δεκαδικος. Ποσα bytes ηταν το αποτελεσμα απο το 5X;
Και το στοιχειο με τα 30 bits μπαινει σε 4 bytes και απομονωνουμε τα 2 τελευταια bits; Ευχαριστω πολυ για την απαντηση Title: Re: [Μίκρο 1] Ανάλυση Θεμάτων 2006 Post by: alekos on October 03, 2008, 02:24:23 am Από ότι θυμάμαι για την τελική αναπαράσταση του πρώτου θέματος χρησιμοποίησα 2 bytes.
Στο δεύτερο θέμα δεν μπορώ να θυμηθώ ποια ακριβώς ήταν η διάταξη στην μνήμη προκειμένου να υλοποιηθούν οι πράξεις. Το λογικό είναι είναι τα δύο MSbit του MSByte να είναι ελέυθερα ώστε εκεί να τοποθετηθούν μετά τις πράξεις τα τυχόν κρατούμενα. Title: Re: [Μίκρο 1] Ανάλυση Θεμάτων 2006 Post by: [x:y:z] on October 03, 2008, 02:30:18 am Το βασικό ερώτημα είναι , όταν μας δίνει ως δεδομένο ότι οι αριθμοί είναι προσημασμένοι , θεωρούμε ότι είναι αποθηκευμένοι με τη μορφή προσήμου-μέτρου (πχ -1 = 10000001)
ή συμπληρώματος του 2 , όπως θα το καταχωρούσε δλδ ο AVR αν του δίναμε πχ ldi r16, -1 (-1 = 11111111) ?? Title: Re: [Μίκρο 1] Ανάλυση Θεμάτων 2006 Post by: alekos on October 03, 2008, 02:32:57 am Δεν θέλω να σας κάψω αλλά νομίζω ότι τους περνάμε με την πρώτη μορφή δηλαδή (-1=10000001)
Αυτά θα διευκρινιστούν την ώρα της εξέτασης από τον διδάσκοντα. καλή επιτυχία σε όλους Title: Απ: [Μίκρο 1] Ανάλυση Θεμάτων 2006 Post by: akis on October 03, 2008, 02:35:20 am αν δεν διευκρινιζει, μπορεις να το κανεις με οποιον τροπο θελεις..είτε με προσημο μετρο ή με συμπληρωμα του 2 αρκεί να το γράψεις..αλλα ρωτηστε για καλο και για κακο
Title: Re: [Μίκρο 1] Ανάλυση Θεμάτων 2006 Post by: supermodified on October 03, 2009, 04:38:05 am Οι αριθμοι εκφραζονται σε μορφη κλασματικου αριθμου σταθερης υποδιαστολης με ακριβεια 8bits. Δηλαδή ο αριθμός γράφεται ως 1.7 ή 1.8; Κι επειδή τελειώνω σχεδόν τις ασκήσεις που έχει ανεβασμένες και δε βλέπω αναφορά σ'αυτά τα ζητήματα μέχρι στιγμής, να ρωτήσω: υπάρχει κάποιο PDF στις παραδόσεις, κάποιες σελίδες από το βιβλίο, *ΚΑΤΙ* που να εξηγεί επαρκώς πώς θα χειριζόμαστε τα νούμερα εν προκειμένω; (π.χ. αν τους αριθμούς τους γράφω ως 1.8, το γινόμενο δύο τέτοιων αριθμών πόσα bits/bytes χρειάζεται; Πόσα χρειαζόμαστε για το fract_part;) Δεν μπορώ να βγάλω άκρη με τίποτα. Ευχαριστώ! Title: Re: [Μίκρο 1] Ανάλυση Θεμάτων 2006 Post by: Θάνος on January 05, 2010, 01:59:42 am Εγώ δε μπορώ να καταλάβω, γιατί όσο περνάει ο καιρός βάζει και περισσότερους περιορισμούς!
Ξεκίνησε απαγορεύοντας τον πολ/μό, μετά πολ/μό και διαιρέσεις, και το 2008 το θέμα έλεγε χωρίς πράξεις, ή ρουτίνες που οδηγούν σε πολ/μό και διαίρεση! Δηλαδή τι ακριβώς πρέπει να κάνουμε, να βρούμε καινούργιο τρόπο εκείνη τη στιγμή; Άντε τον πολ/μό τον αντικαθιστάς με πρόσθεση, τη διαίρεση όμως;;!! [Αν κατάλαβα καλά, ρουτίνες εννοεί τα lsl/ lsr] Ας βοηθήσει κάποιο καλό παιδί :D! Thanks! Title: Re: [Μίκρο 1] Ανάλυση Θεμάτων 2006 Post by: Καμένος on January 21, 2010, 09:49:10 am Εγώ δε μπορώ να καταλάβω, γιατί όσο περνάει ο καιρός βάζει και περισσότερους περιορισμούς! Ξεκίνησε απαγορεύοντας τον πολ/μό, μετά πολ/μό και διαιρέσεις, και το 2008 το θέμα έλεγε χωρίς πράξεις, ή ρουτίνες που οδηγούν σε πολ/μό και διαίρεση! Δηλαδή τι ακριβώς πρέπει να κάνουμε, να βρούμε καινούργιο τρόπο εκείνη τη στιγμή; Άντε τον πολ/μό τον αντικαθιστάς με πρόσθεση, τη διαίρεση όμως;;!! [Αν κατάλαβα καλά, ρουτίνες εννοεί τα lsl/ lsr] Ας βοηθήσει κάποιο καλό παιδί :D! Thanks! Όταν λέει ότι δεν πρέπει να κάνεις πολλαπλασιασμό ή διάιρεση προφανώς θα γίνεται με shifts δεξιά ή αριστερά.. |