THMMY.gr

Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών => Συστήματα Μικροϋπολογιστών => Topic started by: leukosaraphs! on September 30, 2018, 00:45:53 am



Title: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: leukosaraphs! on September 30, 2018, 00:45:53 am
Για οποιαδήποτε απορία πάνω στις ασκήσεις.
Για απορίες στα παλιά θέματα στο αντίστοιχο τόπικ (https://www.thmmy.gr/smf/index.php?topic=65751.0).  Stay on topic!


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: Μπουγάτσας on January 31, 2019, 15:11:25 pm
Απο το pdf programsAVR3 που ανεβηκε στο ethmmy , εκτος απο τους ελεγχους για αδεια ή πληρη λιστα , μπορει καποιος να εξηγησει τους υπολοιπους ελεγχους που γινονται στη μνημη που περιλαμβανουν ελεγχο με συγκεκριμενες θεσεις μνήμης ή ελεγχο του stack ;


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: Enter+Prnt+R on January 31, 2019, 15:40:10 pm
Απο το pdf programsAVR3 που ανεβηκε στο ethmmy , εκτος απο τους ελεγχους για αδεια ή πληρη λιστα , μπορει καποιος να εξηγησει τους υπολοιπους ελεγχους που γινονται στη μνημη που περιλαμβανουν ελεγχο με συγκεκριμενες θεσεις μνήμης ή ελεγχο του stack ;

η SRAM χωρίζεται σε 5 τμήματα χονδρικα (για το υλικο δεν υπαρχει διαφορα απλα κατα συμβαση χωριζεται ετσι) :
1) 32 registers
2) 64 I/O registers
3) 160 External I/O registers (οι οποιοι μπορει και να μην υπαρχουν αναλογα την συσκευη νομιζω)
4) χώρος αποθήκευσης SRAM π φτάνει εως το stack
5) stack

πρώτος έλεγχος:
τα πρώτα τρία τελειώνουν στην θέση (32+64+160-1)=255, άρα η πρώτη θέση του αποθηκευτικού χώρου είναι η 256 = $100 (hex,16^2)

Άρα θες η πρώτη διεύθυνση να μην ειναι κάτω από $100

δεύτερος έλεγχος:
το stack ειναι δυναμικό οπότε παίζεται που τελειώνει ο χώρος αποθήκευσης κάθε φορά, αλλά στα παραδείγματα που δεν χρησιμοποιείται το stack , τότε (νομίζω) το stack έχει στον stack pointer μόνο την τελευταία λέξη, άρα τα τελευταία 2 bytes (SPL = low(ramend), SPH=high(ramend) )
Επομένως ο χώρος αποθήκευσης φτάνει εώς RAMEND - 2 bytes, oπότε θές η αρχική διεύθυνση + τα byte π θα χρειαστείς να μην ξεπεράσουν και μπουν στο stack ή χειρότερα δεν χωράνε καν

Άρα θες η τελευταία διεύθυνση να μην είναι πάνω από RAMEND-2


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: Μπουγάτσας on February 01, 2019, 13:16:27 pm
Στο παράδειγμα με τον υπολογισμο παραγοντικου με αναδρομη που ανεβασε , κανει ενα παραπανω pop στο τελος ;


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: marijuanna on February 01, 2019, 13:36:52 pm
Στο παράδειγμα με τον υπολογισμο παραγοντικου με αναδρομη που ανεβασε , κανει ενα παραπανω pop στο τελος ;

Oui oui...
sent from mTHMMY (https://play.google.com/store/apps/details?id=gr.thmmy.mthmmy) 


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: Μπουγάτσας on February 01, 2019, 13:56:05 pm
Oui oui...
sent from mTHMMY (https://play.google.com/store/apps/details?id=gr.thmmy.mthmmy) 
Ουι Ουι στα γαλλικα ναι  ή οχι οχι ;  ;D


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: pesto80 on September 10, 2019, 13:54:26 pm
Στις λυμενες ασκησεις του Παπαευσταθίου programsAVR1 στο παραδειγμα Α3 στην αρχη της σελιδας 14 κανει:

        brcc done
        dec count
        brne decr_byte
        brcs underflow
        ret

Έστω περίπτωση όπου το C=1. Από την στιγμή που ο κώδικας περνάει από τον  πρώτο έλεγχο ( brcc done ) αυτό δεν σημαίνει ότι ΟΠΩΣ ΚΑΙ ΔΗΠΟΤΕ
θα γίνει branch στην εντολή brcs underflow ( δεδομένου ότι περνάει από την brne decr_byte δηλ count = 0 ); Συνεπώς το ret αυτό δεν θα γίνει ποτέ και δεν χρειάζεται. (???)


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: _init on September 13, 2019, 15:06:06 pm
Στις λυμενες ασκησεις του Παπαευσταθίου programsAVR1 στο παραδειγμα Α3 στην αρχη της σελιδας 14 κανει:

        brcc done
        dec count
        brne decr_byte
        brcs underflow
        ret

Έστω περίπτωση όπου το C=1. Από την στιγμή που ο κώδικας περνάει από τον  πρώτο έλεγχο ( brcc done ) αυτό δεν σημαίνει ότι ΟΠΩΣ ΚΑΙ ΔΗΠΟΤΕ
θα γίνει branch στην εντολή brcs underflow ( δεδομένου ότι περνάει από την brne decr_byte δηλ count = 0 ); Συνεπώς το ret αυτό δεν θα γίνει ποτέ και δεν χρειάζεται. (???)

Όταν το count γίνει 0, θα περάσει τo brne decr_byte το οποίο τεστάρει το Z flag, και αν δεν έχεις underflow (C = 1) θα κάνει ret.
Ο έλεγχος brcs underflow (τεστάρει το C flag) είναι μόνο για την περίπτωση που ο αρχικός αριθμός είναι το 0, οπότε και πας στο underflow label για να κανεις set την Τ flag πριν κανεις exit.
Διάβασε και τα σχόλια 3 και 4.



Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: pesto80 on September 13, 2019, 18:09:43 pm
Όταν το count γίνει 0, θα περάσει τo brne decr_byte το οποίο τεστάρει το Z flag, και αν δεν έχεις underflow (C = 1) θα κάνει ret.
Ο έλεγχος brcs underflow (τεστάρει το C flag) είναι μόνο για την περίπτωση που ο αρχικός αριθμός είναι το 0, οπότε και πας στο underflow label για να κανεις set την Τ flag πριν κανεις exit.
Διάβασε και τα σχόλια 3 και 4.



καταλαβαινω οτι μου λες. η ερωτηση μου ειναι ομως: Υπαρχει καποιο case στο οποιο ο κωδικας περναει το brcs underflow και εκτελειται η ret η οποια βρισκεται κάτω απο αυτό;;;


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: _init on September 13, 2019, 18:34:56 pm
καταλαβαινω οτι μου λες. η ερωτηση μου ειναι ομως: Υπαρχει καποιο case στο οποιο ο κωδικας περναει το brcs underflow και εκτελειται η ret η οποια βρισκεται κάτω απο αυτό;;;

τώρα που το βλέπω πιο προσεχτικά φαίνεται να έχεις δίκιο. Δεν μπορώ να σκεφτώ case όπου να επιστρέφει απο εκείνη τη ret.


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: allstarabey on September 13, 2019, 18:38:45 pm
Oταν αναφερομαστε στο Low byte και στο High byte αυτο το κανουμε επειδή
Εχουμε 8 bit registers ενω καθε λεξη ειναι 16 bit ,οποτε τα πρωτα 8 Bit ειναι το High Byte και τα επομενα 8 bit (τα πιο δεξιά) ειναι τo Low Byte  ?

2) οταν αναφερεται στις προτεινομενες ασκήσεις οτι εχουμε Ν bytes εξεταζουμε ουσιαστικά  καθε byte  κανοντας πραξεις ανα Bit ουσιαστικα? Μπορει καποιος να το εξηγησει λιγο παραπανω :/


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: pesto80 on September 13, 2019, 19:04:18 pm
τώρα που το βλέπω πιο προσεχτικά φαίνεται να έχεις δίκιο. Δεν μπορώ να σκεφτώ case όπου να επιστρέφει απο εκείνη τη ret.

thank u sir. You are a gentleman and a scholar.

ps: Εντομεταξυ στο σχολιο 4 οντως τονιζει οτι υπαρχουν 2 τροποι "φυσιολογικης" επιστροφης απο το προγραμμα πραγμα που αν ισχυει αυτο που λεμε ειναι λαθος καθως η μια ret αχρηστευεται.


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: pesto80 on September 13, 2019, 19:29:06 pm
Oταν αναφερομαστε στο Low byte και στο High byte αυτο το κανουμε επειδή
Εχουμε 8 bit registers ενω καθε λεξη ειναι 16 bit ,οποτε τα πρωτα 8 Bit ειναι το High Byte και τα επομενα 8 bit (τα πιο δεξιά) ειναι τo Low Byte  ?

2) οταν αναφερεται στις προτεινομενες ασκήσεις οτι εχουμε Ν bytes εξεταζουμε ουσιαστικά  καθε byte  κανοντας πραξεις ανα Bit ουσιαστικα? Μπορει καποιος να το εξηγησει λιγο παραπανω :/


1) Ναι. Ουασιαστικα τα high byte και low byte αφορουν τους X Y Z. Οι οποιοι οπως ξερουμε ειναι "διπλοι" καταχωρητες. Ο λογος για τον οποιο ειναι διπλοι, είναι επειδή είναι pointers δηλαδη δειχνουν σε διευθυνσεις (οι τιμες τους ειναι "αριθμος διευθυνσης"). Για να αναπαραστήσεις και την μεγαλυτερη διευθυνση στον ΑVR ομως ειτε μιλας για την program memory ειτε για την SRAM (data) δεν αρκουν 8 bit. Οποτε θες 2 καταχωρητες που δουλεουν σαν ενας για να "βαλεις τις τιμες τους διπλα διπλα" και να δημιουργησεις αριθμο μεγαλυτερο απο τον 1111 1111 (= 255).

2) Oχι. Eξεταζουμε και επεξεργαζομαστε τον αριθμο ανα byte. Δηλαδη ο αριθμος σου μπορει να ειναι ο 0x23 AB 2C F2 που εκτεινεται σε 4 bytes, αρα σε 4 διευθυνσεις μνημης της SRAM (η sram ειναι 8bit-η). Αυτο που κανει γενικα ειναι να παιρνει τον αριθμο ανα byte (ή ανα δυαδα σε 16αδικη μορφη οπως τον εγραψα πιο πανω) και να εκτελει την αντιστοιχη πραξη που θελει κρατωντας τα αντιστοιχα κρατουμενα καθε φορα τα οποια θα επηρεασουν την επεξεργασια του επομενου byte.


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: allstarabey on September 16, 2019, 19:01:37 pm
1) Ναι. Ουασιαστικα τα high byte και low byte αφορουν τους X Y Z. Οι οποιοι οπως ξερουμε ειναι "διπλοι" καταχωρητες. Ο λογος για τον οποιο ειναι διπλοι, είναι επειδή είναι pointers δηλαδη δειχνουν σε διευθυνσεις (οι τιμες τους ειναι "αριθμος διευθυνσης"). Για να αναπαραστήσεις και την μεγαλυτερη διευθυνση στον ΑVR ομως ειτε μιλας για την program memory ειτε για την SRAM (data) δεν αρκουν 8 bit. Οποτε θες 2 καταχωρητες που δουλεουν σαν ενας για να "βαλεις τις τιμες τους διπλα διπλα" και να δημιουργησεις αριθμο μεγαλυτερο απο τον 1111 1111 (= 255).
εστω:
 .def LSB   = R27 ;( XL )
 .def MSB  = R28 ;( XH )
 .def temp = R16 ;
Oταν αναφερει οτι +X και κανει την εντολη ld temp , +X , τοτε ποιον απο τους 2 καταχωρητές αυξάνει ? Μήπως αρχικα ο Χ δειχνει στο XL οπότε με το +X στον temp θα περάσει το MSByte και ο Χ δειχνει πλεον $28? ?


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: _init on September 16, 2019, 19:21:23 pm
εστω:
 .def LSB   = R27 ;( XL )
 .def MSB  = R28 ;( XH )
 .def temp = R16 ;
Oταν αναφερει οτι +X και κανει την εντολη ld temp , +X , τοτε ποιον απο τους 2 καταχωρητές αυξάνει ? Μήπως αρχικα ο Χ δειχνει στο XL οπότε με το +X στον temp θα περάσει το MSByte και ο Χ δειχνει πλεον $28? ?

είναι pre-increment, οπότε αυξάνει τον Χ και μετά εκτελεί το load.
Το pre-increment αυξάνει αρχικά το XL και αν αυτό κάνει overflow θα αυξήσει κατά 1 και το XH, οπότε σε κάθε περίπτωση αυξάνεται κατα 1 ο Χ. Έχει μέσα στα φυλλάδια ασκήσεων πως γίνεται αυτό με εντολές πχ. αν θέλεις να χρησιμοποιήσεις αυθαίρετα δυο καταχωρητές για να κάνει πράξεις με μεγαλύτερους απο 8-bit αιρθμούς).


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: allstarabey on September 16, 2019, 19:39:11 pm
είναι pre-increment, οπότε αυξάνει τον Χ και μετά εκτελεί το load.
Το pre-increment αυξάνει αρχικά το XL και αν αυτό κάνει overflow θα αυξήσει κατά 1 και το XH, οπότε σε κάθε περίπτωση αυξάνεται κατα 1 ο Χ. Έχει μέσα στα φυλλάδια ασκήσεων πως γίνεται αυτό με εντολές πχ. αν θέλεις να χρησιμοποιήσεις αυθαίρετα δυο καταχωρητές για να κάνει πράξεις με μεγαλύτερους απο 8-bit αιρθμούς).

Το Χ τωρα ομως που θα δειχνει ? δηλαδη τι θα περασει στο temp


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: pesto80 on September 16, 2019, 20:57:06 pm
το Χ θα δειχνει στην επομενη διευθυνση μνημης απο αυτην που εδειχνε και θα περασει στην temp το περιεχομενο αυτης της επομενη διευθυνσης.

πχ.

address|περιεχομενο
0x0A....|.........14
0x0B....|.........73


αν ο Χ εδειχνε στην διευθυνση 0x0A με αυτην την εντολη θα δειχνει πλεον στην διευθυνση 0x0Β και θα περασει στην temp τον αριθμο 73


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: allstarabey on September 16, 2019, 21:46:43 pm
το Χ θα δειχνει στην επομενη διευθυνση μνημης απο αυτην που εδειχνε και θα περασει στην temp το περιεχομενο αυτης της επομενη διευθυνσης.

πχ.

address|περιεχομενο
0x0A....|.........14
0x0B....|.........73


αν ο Χ εδειχνε στην διευθυνση 0x0A με αυτην την εντολη θα δειχνει πλεον στην διευθυνση 0x0Β και θα περασει στην temp τον αριθμο 73


ναι το καταλαβαινω αυτο ρωτησα συγκεκριμενα για το προηγουμενο παραδειγμα
που ανεφερα με το LSB MSB .


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: _init on September 16, 2019, 22:51:29 pm
thank u sir. You are a gentleman and a scholar.

ps: Εντομεταξυ στο σχολιο 4 οντως τονιζει οτι υπαρχουν 2 τροποι "φυσιολογικης" επιστροφης απο το προγραμμα πραγμα που αν ισχυει αυτο που λεμε ειναι λαθος καθως η μια ret αχρηστευεται.

μαλλον εννοει την εξοδο απο το underflow και την εξοδο απο το done (?)
φαινεται και στο flow chart τι παιζει και εκεινη η ret δεν υπαρχει οποτε μαλλον ακυρο το σχολιο.


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: _init on September 16, 2019, 23:07:58 pm
ναι το καταλαβαινω αυτο ρωτησα συγκεκριμενα για το προηγουμενο παραδειγμα
που ανεφερα με το LSB MSB .


το XL και το XH πανε ζευγαρακι. Ειναι δυο 8bit καταχωρητης που μαζι δειχνουν. σε μια 16bit διευθυνση. Οποτε, καθε φορα χρειαζονται και οι δυο για να δειξεις μια διευθυνση.
Οταν εχεις preincrement ή postdecrement η πραξη ειναι για ολη τη διευθυνση (και για τα 16bit) και γινεται αυτοματα.
Εσωτερικα, αυξανει (ή μειώνει) to low-byte και αν η πραξη προκαλεσει overflow αυξανει (ή μειώνει) και το high byte κατα 1.


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: pesto80 on September 16, 2019, 23:09:32 pm
Το Χ τωρα ομως που θα δειχνει ? δηλαδη τι θα περασει στο temp


Αν το περιεχομενο των καταχωρητων στο παραδειγμα που εδωσες ειναι πχ:

LSB = 0x01
MSB = 0x13

τοτε η διευθυνση που σχηματιζεται και στην οποια "κοιταει" το Χ ειναι η 0x1301. Συνεπως εκτελωντας  ld temp , +X αυτο που γινεται ειναι να αυξηθει κατα ενα η διευθυνση στην οποία κοιτάει ο Χ:
           
           0x1301 -> 0x1302


(δηλαδη απ' όσο καταλαβαίνεις για να γινει αυτο ουσιαστικα αυξήθηκε κατα ένα η τιμή του καταχωρητή LSB)

και να φορτώσει στον r16 το περιεχόμενο της διευθυνσης 0x1302


Title: Re: [Συστ. Μικροϋπολογιστών] Απορίες σε ασκήσεις 2018-2019
Post by: leukosaraphs! on September 17, 2019, 17:33:04 pm
Στις λυμενες ασκησεις του Παπαευσταθίου programsAVR1 στο παραδειγμα Α3 στην αρχη της σελιδας 14 κανει:

        brcc done
        dec count
        brne decr_byte
        brcs underflow
        ret

Έστω περίπτωση όπου το C=1. Από την στιγμή που ο κώδικας περνάει από τον  πρώτο έλεγχο ( brcc done ) αυτό δεν σημαίνει ότι ΟΠΩΣ ΚΑΙ ΔΗΠΟΤΕ
θα γίνει branch στην εντολή brcs underflow ( δεδομένου ότι περνάει από την brne decr_byte δηλ count = 0 ); Συνεπώς το ret αυτό δεν θα γίνει ποτέ και δεν χρειάζεται. (???)

Διαβάζω την άσκηση που λες, εδώ και αρκετή ώρα και πραγματικά νόμιζα οτι κάτι καταλαβαίνω λάθος.
Δεν βρίσκω τρόπο ούτε εγώ να εκτελείται αυτή η ret. Η μόνη σκέψη που μπορώ να κάνω, είναι ότι για να είναι τελείως καλλυμένος σε περίπτωση που δεν σκέφτηκε όλες τις περιπτώσεις ενώ έγραφε τον κώδικα, το έβαλε για να εξασφαλίσει ότι ο κώδικας θα τερματίσει πριν προλάβει να εκτελέσει εντολές που δεν θα έπρεπε (πχ να κάνει restore το num_stad).

Κάτι ακόμα που παρατήρησα είναι οτι οι κώδικες σε αυτό το 1ο pdf, παίζουν πάρα πολύ με τον SREG και ποιες εντολές επηρεάζουν ποια flags. Μπορείς να βρεις εναλλακτικές λύσεις, με παραπάνω εντολές και διακλαδώσεις, χωρίς ωστόσο να μπερδευτείς και να ψάχνεις το βιβλίο η εντολή ποιο flag επηρεάζει.
(πχ στο παράδειγμα που συζητάμε, μπορείς κατευθείαν να βάλεις 2 tst, αν είναι 0 ο αριθμός ή/και το num_len και να γλυτώσεις από το μπέρδεμα μέσα στην "λουπα" της decr_byte)