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