ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών Διδάσκων: Δρ. Γιώργος Ζάγγουλος Email: zaggoulos.george@ucy.ac.cy www.ece.ucy.ac.cy/courses/ece213
Περίληψη Συναρτήσεις Χρονόμετρο Σήματα Διακοπής Co-processor Διαχείριση Εξαιρέσεων 2
Συναρτήσεις Τι ονομάζουμε συνάρτηση? Αυτόνομο σύνολο εντολών στο οποίο έχουμε εισόδους και έξοδο Υλοποιεί μια διαδικασία Περιέχει τοπικές μεταβλητές οι οποίες «εξαφανίζονται» με την ολοκλήρωση της εκτέλεσης της συνάρτησης. int i, j; 3
Κλήση Συναρτήσεων Stack Segment Text Segment Data Segment foo printf Text Segment 2 4 Main 3 1 reserved 4
Κλήση Συναρτήσεων Παράμετροι εισόδου Stack Segment Πριν την κλήση μιας συνάρτησης πρέπει να αποθηκεύσουμε τις παραμέτρους (μεταβλητές και σταθερές) στη μνήμη αν δεν υπάρχουν ήδη. Πού και με ποιο τρόπο? Data Segment Text Segment Τι είναι η στοίβα και πως τη χρησιμοποιούμε? 5 reserved
οµήστοίβας(stack) Τι είναι η Στοίβα? Ορίζεται γενικά μια δομή δεδομένων η ο οία ακολουθεί τηνπολιτικήlast-in-first-out (LIFO). Κάθε δομή stack χαρακτηρίζεται λήρως α ό δύο δείκτες και τις βασικές λειτουργίες ου εκτελεί. 6
οµήστοίβας(stack) Οι δύο βασικοί δείκτες δείχνουν στα όρια της και είναι: Οδείκτηςβάσης(base pointer bp) οο οίος δείχνει το αρχικό στοιχείο της δομής, δηλαδή το ρώτο στοιχείο ου μ ήκε στην στοίβα καιτοτελευταίο ουθαβγει, και Οδείκτηςστοίβας (stack pointer sp) ο ο οίος δείχνει το ε όμενο στοιχείο ου θα τύχει διαχείρισης, αυτό δηλαδή ου μ ήκε τελευταίο στη δομή. Κατάτηναρχικο οίησητηςστοίβαςισχύειότιbp= sp. ΒP SP 7
Οι Βασικές ΛειτουργίεςμιαςΣτοίβας Οιβασικέςλειτουργίεςδιαχείρισηςμιαςστοίβαςείναιοιεντολέςpush (εναποθέτω) καιpop (ανακτώ). Ηεντολήpush είναιηεντολή ου«γεμίζει» τηνδομήμεδεδομένα, ακολουθώνταςτηλογική LIFO.Κάθεεντολήpush(a) μειώνειτονsp κατά1 (ή 4) θέσεις και μετά το οθετεί στη θέση(εις) αυτή(ές) το δεδομένο ου εριγράφεται(ήδείχνεται, αναλόγωςτηςεφαρμογής) α ότοa. Ηεντολήpopείναιηεντολή ου«αδειάζει» τηδομήα όταδεδομένα. Κάθεεντολήpop(b) αφαιρεία ότηστοίβατοστοιχείο ουδείχνειοsp, το το οθετεί στοb (ήστηθέση ουδείχνειοb, αναλόγωςεφαρμογής) και μετά αυξάνειτονspκατάμία (ή 4) θέσεις. a ΒP SP 8
Η Στοίβα στο SPIM SP = 0xfffffffc Stack Segment SP = 0xfffffff8 push SP = 0xfffffff4 push Data Segment Text Segment reserved 9
Η Στοίβα στο SPIM Stack Segment SP = 0x7ffffffcpop SP = 0x7ffffff8 pop SP = 0x7ffffff4 Data Segment Text Segment reserved 10
Παράδειγμα Λειτουργίας μιας Στοίβας 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 Ποιο θα είναι το αποτέλεσμα των πιο πάνω εντολών (σε σχέση με το περιεχόμενο των καταχωρητών); 11
Exceptions Τι είναι ένα Exception? Μια παρέκκλιση από την κανονική ροή του προγράμματος Ποιοι λόγοι μπορούν να προκαλέσουν ένα Exception? A) Λάθος κατά την εκτέλεση του προγράμματος (Software Interrupt) B) Κλήση από συσκευή εξόδου εισόδου (I/O Interrupt) Γ) Κλήση από χρονομετρητή(timer interrupt) 12
Exceptions Ποιος διαχειρίζεται τα Exceptions? Coprocessor 0 Ποιοι καταχωρητές χρησιμοποιούνται? 13
Καταχωρητές 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 reg. 14
Ενεργοποίηση Interrupts - Register($12) 1. Το bitστη θέση 0ενεργοποιεί τα σήματα διακοπής (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 επιτρέπει την δημιουργία σημάτων διακοπής από το πληκτρολόγιο όταν ο χρήστης πληκτρολογήσει οτιδήποτε. 15
Ειδικοί καταχωρητές(θέσεις μνήμης) που χρησιμοποιούνται για Interrupts 16
Διαχείριση ενός Interrupt Όταν δημιουργηθεί κάποιο σήμα διακοπής, τα επόμενα βήματα εκτελούνται αυτόματα από το υλικό του μικρό-επεξεργαστή: 1. ΤοException Level bit (bit 1) στον καταχωρητή Status γίνεται 1. Όταν αυτό το bitέχει τιμή 1, δεν μπορούν να δημιουργηθούν άλλα σήματα διακοπής. Αυτό συμβαίνει γιατί δεν μπορεί ο μικροεπεξεργαστής να διακόψει την λειτουργία εξυπηρέτησης κάποιας διακοπής για να εξυπηρετήσει μια 2 η διακοπή. 2. Ο καταχωρητήςcause παίρνει την ανάλογη τιμή από την οποία μπορούμε ως προγραμματιστές να δούμε τί προκάλεσε τη διακοπή (το ρολόι ή το πληκτρολόγιο). 3. Ο καταχωρητήςepc παίρνει την τιμή που έχει αυτή την στιγμή ο Program Counterγια να μπορεί μετά από την εξυπηρέτηση του interrupt να επιστρέψει στο σημείο από το οποίο πρέπει να συνεχίσει. 17