ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών Διδάσκων: Δρ. Γιώργος Ζάγγουλος Email: zaggoulos.george@ucy.ac.cy www.ece.ucy.ac.cy/courses/ece213
Περίληψη Αρχιτεκτονική Μικροεπεξεργαστών MIPS-32 Αρχείο Kαταχωρητών και Χάρτης Μνήμης Δομή αρχείου (προγράμματος) - Παράδειγμα Έλεγχος Ροής Κώδικα Οι πρώτες μας εντολές assembly - Παραδείγματα 2
Αρχιτεκτονική Μικροεπεξεργαστή (MIPS-32) Μνήμη Κεντρική Μονάδα Επεξεργασίας Καταχωρητές Αριθμητική (Λογική) Μονάδα Ειδικά Κυκλώματα A24, A46 Βοηθητική Μονάδα Επεξεργασίας Καταχωρητές ειδικής χρήσης 3
Χάρτης Μνήμης (MIPS-32) Στοίβα Δηλώσεις και Δεδομένα Εντολές προγράμματος A21 4
Προγραμματισμός Μικροεπεξεργαστή Οι μικροεπεξεργαστές συνοδεύονται από ένα σύνολο εντολών το οποίο υποστηρίζουν. Συνήθως υπάρχουν μικροδιαφορές στην σύνταξη μιας εντολής μεταξύ κατασκευαστών αλλά και οικογενειών μικροεπεξεργαστών. Η πιο πάνω γλώσσα είναι γνωστή ως Assembly και στόχο έχει να διευκολύνει τον προγραμματιστή o οποίος δεν χρειάζεται να προγραμματίζει σε κώδικα μηχανής (machine code) η οποίος είναι δυσνόητος. Αυτό επιτυγχάνεται με τη χρήση ενός εργαλείου «assembler» το οποίο αντιστοιχει στην ουσία τις εντολές μας σε κώδικα μηχανής (αποτελούμενο από 0 και 1). 5
Δομή Αρχείου προσομοίωσης # Στοιχεία προγραμματιστή/κώδικα.data Δηλώσεις (.asciiz,.byte,.word).text main: Αρχικοποιήσεις Εντολές Προγράμματος # Κενή γραμμή για να τρέξει ο κώδικας 6
Έλεγχος Ροής Προγράμματος Ο καταχωρητής PC (programme counter) ενεργεί ως δείκτης στη διεύθυνση μνήμης όπου είναι αποθηκευμένη η επόμενη προς εκτέλεση εντολή. Η τιμή του PC αυξάνει αρχικά πάντοτε κατά 4! Πως επιτυγάνεται το jump ή το branch στον MIPS-32; Υπολογισμός της νέας διεύθυνσης αναλόγως της εντολής (απόλυτη τιμή ή σχετική τιμή). Αποθήκευση του $pc στον $ra (σε περίπτωση κλήσης συνάρτησης μέσα από το πρόγραμμα) 7
Οι πρώτες μας εντολές Κλήσεις συστήματος (1, 4, 5, 8, 10) Φόρτωση καταχωρητή (li, lb, lw, la) Μετακίνηση καταχωρητή (move) Αριθμητικές και Λογικές πράξεις (add, sub, or, and, xor, sll, srl) Συγκρίσεις τιμών (beq, beqz, bne) A44, A49-81 8
Παράδειγμα Πρόσθεσης 2 Καταχωρητών και Εκτύπωσης # your details with a description of the code.data result_is:.asciiz The result is:\n.text main: li $t1, 10 # load t1 with 10 li $t2, 7 # load t2 with 7 add $t3, $t1, $t2 # t3 = t1 + t2 li $v0, 4 la $a0, result_is # syscall to print string syscall li $v0, 1 move $a0, $t3 # syscall to print an integer syscall li $v0, 10 syscall # syscall to exit programme 9 # press enter to keep SPIM HAPPY!
Παραδείγματα εντολών li $t1, 0x10 lb $t2, 0x12345678 # Register $t1 = 16 = 10hex # Reg. $t2=περιεχόμενα μνήμης (0Χ12345678) lw $t2, 0x12345678 # $t2=περιεχόμενα μνήμης (0Χ12345678/9/a/b) la $a0, welcome # Register $a0 = address of welcome message move $t4, $v0 # Register $t4 = Register $v0 add $t3, $zero, $t2 # Register $t3 = Register $t2 + 0 addi $t3, $t4, 1 # Register $t3 = Register $t4 + 1 ori $t3, $t4, 0x12 # Register $t3 = Reg. $t4 OR 0X 0001 0010 andi $t5, $t6, 255 # Register $t5 = Reg. $t6 AND 0X 1111 1111 10
Παραδείγματα εντολών xor $t6, $t6, $t6 # Register $t6 = Reg. $t6 XOR Reg. $t6 = 0 sll $t7, $t6, 3 # Register $t7 = Reg. $t6 <<< 3 = $t6 * 8 srl $t5, $t3, 5 # Register $t5 = Reg. $t3 >>> 5 = $t3 / 32 beq $t6, $t5, finals bne $t7, $t6, again beqz $t8, exit_now bgt $t6, $t5, loop1 b step2 j step2 # If Reg $t6 = $t5, PC = address finals # If Reg $t7 $t6, PC = address again # If Reg $t8 = 0, PC = address exit_now # If Reg $t6 > $t5, PC = address loop1 # PC = address step2 (πιο γρήγορη εντολή) # PC = address step2 (χωρίς περιορισμό) 11
Μαθησιακοί στόχοι 1 ης Εβδομάδας 1. Αρχιτεκτονική MIPS-32 (CPU, Registers, Memory, Co-proc.) 2. Προσομοιωτής QtSpim (Εγκατάσταση προγράμματος, Φόρτωση και τρέξιμο κώδικα) 3. Assembly Language και Κώδικας Μηχανής (Δομή αρχείου προσομοίωσης και κλήσεις συστήματος) 4. Έλεγχος Ροής Προγράμματος ($pc, $ra) 5. Εισαγωγή στην assembly 12