ΗΜΥ 213 - Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών ΗΜΥ 213 Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών ΠαρουσίασηΕργαστηρίου 5 ιδάσκοντες: Νικόλας Στυλιανίδης Γιώργος Ζάγγουλος Email: nstylianides@gmail.com zaggoulos.george@ucy.ac.cy
Περίληψη Ορισμός της Στοίβας H λειτουργία της Στοίβας (γενικά, αλλά και στο SPIM) Η χρησιμότητα της Στοίβας στους Μικροεπεξεργαστές Κλήση συνάρτησης και αναδρομικές κλήσεις Παράδειγμα week5.s (Δημιουργία και Χρήση της Στοίβας και αναδρομικές κλήσεις) 18-Feb-13 2
Δομή Στοίβας (stack) Στοίβα Last-In-First-Out (LIFO). Δείκτες ορίων: Ο δείκτης βάσης (base pointer bp) ο οποίος δείχνει το αρχικό στοιχείο της δομής, δηλαδή το πρώτο στοιχείο που μπήκε στην στοίβα και το τελευταίο που θα βγει, και Ο δείκτης στοίβας (stack pointer sp) ο οποίος δείχνει το επόμενο στοιχείο που θα τύχει διαχείρισης, αυτό δηλαδή που μπήκε τελευταίο στη δομή. Κατά την αρχικοποίηση της στοίβας ισχύει ότι bp = sp. 18-Feb-13 3
Οι Βασικές Λειτουργίες μιας Στοίβας Οι βασικές λειτουργίες διαχείρισης μιας στοίβας είναι οι εντολές push (σπρώχνω) και pop (αφαιρώ). Κάθε εντολή push(a) μειώνει τον sp κατά ένα (ή κατά 4) και τοποθετεί στη θέση αυτή το δεδομένο που περιγράφεται (ή δείχνεται, αναλόγως της εφαρμογής) από το a. Η εντολή pop είναι η εντολή που «αδειάζει» τη δομή από τα δεδομένα. Κάθε εντολή pop(b) αφαιρεί από τη στοίβα το στοιχείο που δείχνει ο sp, το τοποθετεί στο b (ή στη θέση που δείχνει ο b, αναλόγως εφαρμογής) και αυξάνει τον sp κατά ένα (ή κατά 4). 18-Feb-13 4
Η Στοίβα στο SPIM Στην περίπτωση του SPIM, αλλά και όλων των επεξεργαστών, υπάρχει ένας χώρος στην μνήμη (διαδοχικές θέσεις μνήμης) ο οποίος καλείται stack και γενικά διαθέτει το βασικό χαρακτηριστικό της στοίβας (είναι δηλαδή LIFO). Πέραν τούτου, η στοίβα αυτή έχει ειδική αποστολή που αφορά τον χρόνο εκτέλεσης του προγράμματος και ΔΕΝ περιλαμβάνει τις βασικές λειτουργίες που περιγράφονται στην προηγούμενη παράγραφο. Χρήση Αποθήκευση των περιεχομένων των προσωρινών καταχωρητών κατά την κλήση μιας συνάρτησης στον κώδικα. Επιπλέον, είναι ο χώρος όπου αποθηκεύονται τα ορίσματα που δίνονται από την γραμμή εντολών του προγράμματος. 18-Feb-13 5
Η Στοίβα στο SPIM Επειδή η στοίβα στο SPIM είναι χώρος μνήμης, για την υλοποίηση της πρέπει να παρθούν κάποιες σχεδιαστικές αποφάσεις. Ορίζουμε ένα χώρο στην μνήμη του SPIM ο οποίος να μπορεί να χρησιμοποιηθεί έτσι ώστε να φτιάξουμε την δομή. Αυτός ο χώρος μπορεί να είναι η ίδια η Στοίβα του SPIM (αλλά αυτό δεν είναι απαραίτητο, σε κάποιες περιπτώσεις μπορεί να αποδειχθεί και επικίνδυνο (όταν π.χ. εμπλακεί με κώδικα κλήσης συναρτήσεων) Μπορεί να αποδειχθεί χρήσιμη η ύπαρξη του καταχωρητή $sp καθώς και η σύμβαση της προς τα κάτω αύξησης της μνήμης. 18-Feb-13 6
Κλήσεις Συναρτήσεων Κλήση Συνάρτησης (jal push, jr $ra) Κλήση (2 ης ) συνάρτησης μέσα από άλλη (1 η ) συνάρτηση. Απαιτείται αποθήκευση του $ra πριν από την κλήση της 2 ης συνάρτησης για σωστή λειτουργία του προγράμματος. Αναδρομικές Κλήσεις (κλήση συνάρτησης μέσα από την ίδια τη συνάρτηση) 18-Feb-13 7
Παράδειγμα week5.s Σε αυτή την άσκηση καλείστε να συμπληρώσετε το αρχείο week5.s και να το μετατρέψετε, μετονόμάζοντας το σε week5a.s, έτσι ώστε το περιεχόμενο των καταχωρητών $t1, $t2, $t3 και $t4 να μεταφερθεί στους $t2, $t3, $t4 και $t1 αντίστοιχα με τη χρήση των συναρτήσεων push και pop στη στοίβα. Στη συνέχεια, μετονομάστε σε week5b.s και με αναδρομική κλήση υλοποιήστε το push και το pull του καταχωρητή $t1 στη στοίβα byte ανά byte. Για την πιο πάνω υλοποίηση θα πρέπει να καθοριστούν τα ακόλουθα: Τα όρια της μνήμης που θα κατέχει η δομή της Στοίβας Κάποιο καταχωρητή σαν $bp και κάποιον σαν $sp Επίσης, θα πρέπει να υλοποιηθούν οι βασικές λειτουργίες της Στοίβας (push, pop) καθώς και οι ζητούμενες πράξεις 18-Feb-13 8