ΗΜΥ 213 Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών Εισαγωγή στους Μικροεπεξεργαστές MIPS-32 ( ιάλεξη 1) ιδάσκων: Γιώργος Ζάγγουλος Email: zaggoulos.george@ucy.ac.cy
Περίληψη Αρχιτεκτονική Μικροεπεξεργαστών MIPS-32 Αρχείο καταχωρητών και Χάρτης Μνήµης οµή αρχείου (προγράµµατος) Έλεγχος Ροής Κώδικα Οι πρώτες µας εντολές assembly 2
Αρχιτεκτονική Μικροεπεξεργαστή (MIPS-32) Κεντρική Μονάδα Επεξεργασίας Καταχωρητές Αριθµητική (Λογική) Μονάδα Ειδικά Κυκλώµατα Βοηθητική Μονάδα Επεξεργασίας Καταχωρητές ειδικής χρήσης Μνήµη A24, A46 3
Χάρτης Μνήµης (MIPS-32) A21 Στοίβα ηλώσεις και εδοµένα Εντολές προγράµµατος * Κάθε θέση µνήµης κρατά 8 bits, ενώ κάθε καταχωρητής 32 bits (4 Bytes) 4
Προγραµµατισµός Μικροεπεξεργαστή Οι µικροεπεξεργαστές συνοδεύονται από ένα σύνολο εντολών το οποίο υποστηρίζουν. Συνήθως υπάρχουν µικροδιαφορές στην σύνταξη µιας εντολής µεταξύ κατασκευαστών αλλά και οικογενειών µικροεπεξεργαστών. Η πιο πάνω γλώσσα είναι γνωστή ως Assembly και στόχο έχει να διευκολύνει τον προγραµµατιστή o οποίος δεν χρειάζεται να προγραµµατίζει σε κώδικα µηχανής (machine code) η οποίος είναι δυσνόητος. Αυτό επιτυγχάνεται µε τη χρήση ενός εργαλείου «assembler» το οποίο µεταφράζει στην ουσία τις εντολές µας σε κώδικα µηχανής (αποτελούµενο από 0 και 1). 5
οµή Αρχείου προσοµοίωσης # Στοιχεία προγραµµατιστή/κώδικα.data.text ηλώσεις (.asciiz,.byte,.word) main: Αρχικοποιήσεις Εντολές Προγράµµατος # Κενή γραµµή για να τρέξει ο κώδικας 6
Έλεγχος Ροής Προγράµµατος Ο καταχωρητής PC (programme counter) ενεργεί ως δείκτης στη διεύθυνση µνήµης όπου είναι αποθηκευµένη η επόµενη εντολή προς εκτέλεση. (Η τιµή του PC αυξάνει αρχικά πάντοτε κατά 4!) Πως επιτυγάνεται το jump ή το branch στον MIPS-32; Υπολογισµός της νέας διεύθυνσης αναλόγως της εντολής (απόλυτη τιµή ή σχετική τιµή). Αποθήκευση του $pc στον $ra (σε περίπτωση κλήσης συνάρτησης µέσα από το πρόγραµµα) 7
Από το Πρόβληµα στη Λύση! Κατά την επίλυση οποιουδήποτε προβλήµατος, συνειδητά ή όχι, πάντοτε ακολουθούµε κάποια στάδια µέχρι που να φτάσουµε στην επιθυµητή λύση. Σε προβλήµατα προγραµµατισµού, συνήθως ακολουθούνται τα εξής στάδια: 1. Κατανόηση του προβλήµατος 2. Ανάλυση προβλήµατος (είσοδοι, έξοδοι, σταθερές, µεταβλητές) 3. Βήµατα προς επίλυση του προβλήµατος 4. Συγγραφή κώδικα για το κάθε βήµα 5. Έλεγχος κώδικα βήµα προς βήµα 6. Τελικός έλεγχος κώδικα 8
ιάγραµµα Ροής Προγράµµατος Flow - Chart Το διάγραµµα ροής είναι πολύ βοηθητικό στην επίλυση ενός προβλήµατος αφού µας βοηθά να δούµε και οπτικά την πορεία επίλυσης του προβλήµατος και να κατανοήσουµε καλύτερα τον κώδικα που πρέπει να γράψουµε για το κάθε ένα από τα βήµατα που πρέπει να ακολουθήσουµε. Η επιλογή του αριθµού των βηµάτων εξαρτάται από το ίδιο το πρόβληµα αλλά και από το πόσο αναλυτικό επιθυµούµε εµείς να το σχεδιάσουµε. Πρέπει τουλάχιστο να περιέχει όλους τους ελέγχους (beq/bne/bhi) όπως και τυχόν αλληλεπίδραση µε τον χρήστη. 9
Οι πρώτες µας εντολές Κλήσεις συστήµατος (1, 4, 5, 8, 10) Φόρτωση καταχωρητή (li, lb, lw, la,) Μετακίνηση καταχωρητή (move) Αριθµητικές και Λογικές πράξεις (add, sub, or, and, xor, sll, srl) Έλεγχος τιµής (beq, beqz, bne) A44, A49-81 10
Μαθησιακοί στόχοι 1ου Εργαστηρίου 1. Αρχιτεκτονική MIPS-32 (CPU, Registers, Memory, Co-proc.) 2. Προσοµοιωτής QtSpim (Εγκατάσταση προγράµµατος, Φόρτωση και τρέξιµο κώδικα) 3. Assembly Languageκαι Κώδικας Μηχανής ( οµή αρχείου προσοµοίωσης και κλήσεις συστήµατος) 4. Έλεγχος Ροής Προγράµµατος ($pc, $ra) 5. ιάγραµµα Ροής Προγράµµατος 6. Εισαγωγή στην assembly 11