THMMY.gr

Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών => AVR Εποχή => Topic started by: Cthulu on February 21, 2012, 14:46:09 pm



Title: [Μικρο ΙΙ] Πέρασμα ορισμάτων σε υπορουτίνα
Post by: Cthulu on February 21, 2012, 14:46:09 pm
Στο βιβλίο του Πεκμεστζή "Μικροελεγκτές AVR και PIC" διαβάζουμε στη σελίδα 62 ότι "η στοίβα χρησιμεύει στο πέρασμα ορισμάτων σε υπορουτίνες μέσω των εντολών pop και push". Στη συνέχεια ακολουθεί επεξηγηματικό παράδειγμα στο οποίο πριν την κλήση μιας υπορουτίνας με την rcall προηγούνται δύο εντολές push που ωθούν δύο καταχωρητές εργασίας στη στοίβα. Στο σώμα της ρουτίνας οι τιμές των καταχωρητών ανακτούνται με δύο εντολές pop. Η ερώτησή μου είναι, από τη στιγμή που η rcall ωθεί και αυτή στη στοίβα την διεύθυνση του κυριου προγράμματος, η πρώτη pop δεν θα έπρεπε να διαβάζει αυτή την διεύθυνση αντί για το όρισμα??  :???:  


Title: deleted
Post by: BOBoMASTORAS on February 22, 2012, 00:13:42 am
deleted


Title: Re: Πέρασμα ορισμάτων σε υπορουτίνα
Post by: Cthulu on February 22, 2012, 01:57:32 am
Σωστά! Αυτό σκέφτηκα και εγώ. Με μπέρδεψε όμως το παράδειγμα του βιβλίου:

push r16
push r17
rcall set_TCNT1

set_TCNT1:
pop r17
pop r16
out TCNT1H,r17
out TCNT1L,r16
ret

Αυτό τότε θα πρέπει να είναι λάθος αφού στον r17 αποθηκεύει τη διεύθυνση της εντολής μετά την rcall και στον r16 την παλιά τιμή του r17!


Title: Re: Πέρασμα ορισμάτων σε υπορουτίνα
Post by: SolidSNK on February 22, 2012, 02:43:51 am
Σωστά! Αυτό σκέφτηκα και εγώ. Με μπέρδεψε όμως το παράδειγμα του βιβλίου:

push r16
push r17
rcall set_TCNT1

set_TCNT1:
pop r17
pop r16
out TCNT1H,r17
out TCNT1L,r16
ret

Αυτό τότε θα πρέπει να είναι λάθος αφού στον r17 αποθηκεύει τη διεύθυνση της εντολής μετά την rcall και στον r16 την παλιά τιμή του r17!
Έχω ξεχάσει τα μίκρο 2, όμως στο x86 σύμφωνα με το κλασσικό calling convention, ναι θα ήταν λάθος γιατί θα έκανε fetch πρώτα τον αποθηκευμένο base pointer, μετά τον instruction pointer και μετά τις παραμέτρους. Γι αυτό άλλωστε υπάρχει ο register ebp. Θα έλεγα υπάρχει μεγάλη πιθανότητα να έχεις δίκιο και στον AVR, αλλά θα σου πει με σιγουριά o bob.


Title: deleted
Post by: BOBoMASTORAS on February 22, 2012, 11:47:55 am
deleted


Title: Re: Πέρασμα ορισμάτων σε υπορουτίνα
Post by: Cthulu on February 24, 2012, 22:56:48 pm
Οκ, ευχαριστώ για τις απαντήσεις σας :)


Title: deleted
Post by: BOBoMASTORAS on February 24, 2012, 23:08:22 pm
deleted