ΗΜΥ 213 - Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών ΗΜΥ 213 Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών Διάλεξη 4
Περίληψη Συναρτήσεις Χρονόμετρο Χρήση Διακοπτών Coprocessor Διαχείριση Εξαιρέσεων 2
Συναρτήσεις Τι ονομάζουμε συνάρτηση? Αυτόνομο σύνολο εντολών στο οποίο έχουμε εισόδουςκαι έξοδο Υλοποιεί μια διαδικασία Περιέχει τοπικές μεταβλητές οι οποίες «εξαφανίζονται» με την ολοκλήρωση της εκτέλεσης της συνάρτησης. int i, j; 3
Κλήση Συναρτήσεων PC#A Main Prepare input Call function PC#B PC#A+4 return printf PC#B+N 4
Κλήση Συναρτήσεων Stack Segment Text Segment Data Segment foo printf Text Segment Main reserved 5
Κλήση Συναρτήσεων Παράμετροι εισόδου Stack Segment Data Segment Text Segment reserved Πριν την κλήση μιας συνάρτησης πρέπει να αποθηκεύσουμε τις παραμέτρους εισόδους σε προσβάσιμη μνήμη ΠΟΥ? Στην στοίβα Τι είναι η στοίβα και πως τη χρησιμοποιούμε? 6
Δομή Στοίβας (stack) Τι είναι η Στοίβα? Ορίζεται γενικά μια δομή δεδομένων η οποία ακολουθεί την πολιτική Last- In-First-Out (LIFO). Κάθεδομήstack χαρακτηρίζεται πλήρως από δύο δείκτες και τις βασικές λειτουργίες που εκτελεί. top pop push 7
Δομή Στοίβας (stack) Οιδύοβασικοίδείκτεςσημειώνουντα όρια της και είναι: Ο δείκτηςβάσης(base pointer bp) ο οποίος δείχνει το αρχικό στοιχείο της δομής, δηλαδή το πρώτο στοιχείο που μπήκεστηνστοίβα και το τελευταίο που θα βγει, και ΒP SP Ο δείκτηςστοίβας (stack pointer sp) ο οποίος δείχνει το επόμενο στοιχείο που θα τύχειδιαχείρισης, αυτό δηλαδή που μπήκε τελευταίο στη δομή. Κατάτηναρχικοποίηση της στοίβας ισχύει ότι bp = sp. 8
Οι Βασικές Λειτουργίες μιαςστοίβας Οιβασικέςλειτουργίεςδιαχείρισης μιας στοίβας είναι οι εντολές push (εναποθέτω) και pop(ανακτώ). Η εντολήpushείναι η εντολή που «γεμίζει» την δομή με δεδομένα, ακολουθώντας τη λογική LIFO. Κάθε εντολή push(a) μειώνει τον sp κατάμία θέση και τοποθετεί στη θέση αυτή τοδεδομένοπουπεριγράφεται (ή δείχνεται, αναλόγως της εφαρμογής) από το a. Η εντολήpopείναι η εντολή που «αδειάζει» τη δομή από τα δεδομένα. Κάθε εντολή pop(b) αφαιρεί από τη στοίβα το στοιχείο που δείχνει ο sp, το τοποθετεί στοb (ή στηθέσηπου δείχνειο b, αναλόγωςεφαρμογής) και αυξάνει τον spκατά μία θέση. a ΒP SP 9
Η Στοίβα στο SPIM SP = 0xfffffffc Stack Segment SP = 0xfffffff8 push SP = 0xfffffff4 push Data Segment Text Segment reserved 10
Stack Segment Η Στοίβα στο SPIM SP = 0xfffffffc pop SP = 0xfffffff8 pop SP = 0xfffffff4 Data Segment Text Segment reserved 11
Παράδειγμα Λειτουργίας μιας Στοίβας 1. push(a) # push register a on the stack 2. push(b) # push register b on the stack 3. pop(a) # pop value from the stack to reg. a 4. pop(b) # pop value from the stack to reg. b Ποιο θα είναι το αποτέλεσμα των πιο πάνω εντολών (σε σχέση με το περιεχόμενο των καταχωρητών); Ανταλλαγή των τιµών των δύο καταχωρητών 12
Exceptions Τι είναι ένα Exception? Μια παρέκκλιση από την κανονική ροή του προγράμματος Ποιοι λόγοι μπορούν να προκαλέσουν ένα Exception? A) Λάθος κατά την εκτέλεση του προγράμματος (Software Interrupt) B) Κλήση από συσκευή εξόδου εισόδου (I/O Interrupt) Γ) Κλήση από χρονομετρητή (Timer interrupt) 13
Exceptions Ποιος διαχειρίζεται τα Exceptions? Coprocessor 0 Ποιοι καταχωρητές χρησιμοποιούνται? 14
Καταχωρητές Status ($12), Cause ($13)καιException Programme Counter($14) mfc0 $t5, $13 # Copy Cause register value to $t5 mtc0 $v0, $12 # Copy $v0's value to Status register 15
Ειδικοί καταχωρητές (θέσεις μνήμης) που χρησιμοποιούνται για Interrupts 14-Feb-13 HMY213 - Πανεπιστήµια Κύπρου - HMY213 - Πανεπιστήµιo Κύπρου - Εαρινό Εξάµηνο 2013 N.Σ & Γ.Ζ Εαρινό Εξάµηνο 2012 Γ Ζ 16
Ενεργοποίηση Interrupts 1. Θέστε σε λογικό 1 το Interrupt Enable bit (Bit 0) του Status Register ($12). Αυτό το bit ενεργοποιεί τα σήµατα διακοπής (global on/off control bit for all interrupts). 2. Αναλόγως των σηµάτων διακοπής που επιθυµείτε να επιτρέψετε, θέστε σε λογικό 1 τα bitς 11 και 15 του καταχωρητή Status τα οποία επιτρέπουν στην CPU να ανταποκρίνεται στα σήµατα διακοπής από το πληκτρολόγιο και το ρολόι αντίστοιχα. 3. Θέστε σε λογικό 1 το Interrupt Enable bit στον καταχωρητή Receiver Control Register (0xFFFF0000).Αυτό το bit επιτρέπει την δηµιουργία σηµάτων διακοπής από το πληκτρολόγιο όταν ο χρήστης πληκτρολογήσει οτιδήποτε. 14-Feb-13 HMY213 - Πανεπιστήµια Κύπρου - HMY213 - Πανεπιστήµιo Κύπρου - Εαρινό Εξάµηνο 2013 N.Σ & Γ.Ζ Εαρινό Εξάµηνο 2012 Γ Ζ 17
Διαχείριση ενός Interrupt Όταν δημιουργηθεί κάποιο σήμα διακοπής, τα επόμενα βήματα εκτελούνται αυτόματα από το υλικό του μικρό-επεξεργαστή: 1. ΤοException Level bit (bit 1) στον καταχωρητή Status γίνεται 1. Όταν αυτό το bitέχει τιμή 1, δεν μπορούν να δημιουργηθούν άλλα σήματα διακοπής. Αυτό συμβαίνει γιατί δεν μπορεί ο μικροεπεξεργαστής να διακόψει την λειτουργία εξυπηρέτησης κάποιας διακοπής για να εξυπηρετήσει μια 2 η διακοπή. 2. Ο καταχωρητήςcause παίρνει την ανάλογη τιμή από την οποία μπορούμε ως προγραμματιστές να δούμε τί προκάλεσε τη διακοπή (το ρολόι ή το πληκτρολόγιο). 3. Ο καταχωρητήςepc παίρνει την τιμή που έχει αυτή την στιγμή ο Program Counterγια να μπορεί μετά από την εξυπηρέτηση του interrupt να επιστρέψει στο σημείο από το οποίο πρέπει να συνεχίσει. 18