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 Σωστά! Αυτό σκέφτηκα και εγώ. Με μπέρδεψε όμως το παράδειγμα του βιβλίου: Έχω ξεχάσει τα μίκρο 2, όμως στο x86 σύμφωνα με το κλασσικό calling convention, ναι θα ήταν λάθος γιατί θα έκανε fetch πρώτα τον αποθηκευμένο base pointer, μετά τον instruction pointer και μετά τις παραμέτρους. Γι αυτό άλλωστε υπάρχει ο register ebp. Θα έλεγα υπάρχει μεγάλη πιθανότητα να έχεις δίκιο και στον AVR, αλλά θα σου πει με σιγουριά o bob.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: 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
|