ΗΜΥ 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 και στόχο έχει να διευκολύνει τον προγραμματιστή ο οποίος δεν χρειάζεται να προγραμματίζει σε κώδικα μηχανής (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 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Τρόποι Διευθυνσιοδότησης A45 Η διεύθυνση μνήμης μπορεί να δηλωθεί με 6 τρόπους: 1. Περιεχόμενο καταχωρητή: lw $t1, ($t2) 2. Άμεση τιμή: lb $t1, 0x10abcdef 3. Άμεση τιμή + περιεχόμενο καταχωρητή: lw $t1, 28($t2) 4. Διεύθυνση που αντιστοιχεί σε ετικέτα users : lb $t2, users 5. Διεύθ. ετικέτας +/- άμεση τιμή: lb $t3, users+3 6. Διεύθυνση ετικέτας +/-(άμεση τιμή + περιεχόμενο καταχωρητή: lb $t4, spaces-2($t2) 9 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Χάρτης Μνήμης (Παράδειγμα) (Data) Περιεχόμενα Διεύθυνσης Μνήμης 0x1000001B (Data) Περιεχόμενα Διεύθυνσης Μνήμης 0x1000000Α ΑΒ Ε3 Β1 33 99 77 21 34 88 66 32 56 ΒΒ ΕΕ 55 ΑΑ 10 20 30 40 54 2Α 3Β 22 ΕΑ ΑΒ 23 11 ΔΙΕΥΘΥΝΣΗ 0x10000018 0x10000014 0x10000010 0x1000000C 0x10000008 0x10000004 0x10000000 10 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Εντολές Load..18..14..10..0C Έστω ότι $t6 =0x10000004, σκεφτείτε τί αλλάζει πιο κάτω: 1. lb $t1, 2($t6) 2. lw $t2, 0x1000000C 3. lw $t3, 4($t6) 4. lw $t4, 12($t6) 5. la $t5, 0x10000014 $t1=0x0000002a = 2A $t2=0xbbee55aa $t3=0x10203040 $t4=0x88663256 $t5=0x10000014..08..04..00 11 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Εντολές Store (συνέχεια από Load) Από Load: $t3=0x10203040, $t4=0x88663256, $t5=0x10000014, $t6 = 0x10000004 1. sw $t3, 0x10000004 2. sw $t4, 16($t6) 3. sb $t5, 0x10000003 0x10000004/5/6/7= 40 302010 0x10000014/5/6/7= 56 326688 0x10000003 = 14 Μνήμη: Πριν και Μετά από την εκτέλεση των 3 εντολών Store 88 66 32 56 10 20 30 40 14 ΔΙΕΥΘΥΝΣΗ 0x10000018 0x10000014 0x10000010 0x1000000C 0x10000008 0x10000004 0x10000000 12 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Παράδειγμα Πρόσθεσης 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 13 # press enter to keep SPIM HAPPY! Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Παραδείγματα εντολών li $t1, 0x10 # Register $t1 = 16 = 10hex lb $t2, 0x12345678 # 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 OR0X 00010010 andi $t5, $t6, 255 #Register $t5 = Reg. $t6 AND0X 1111 1111 14 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Παραδείγματα εντολών xor $t6, $t6, $t6 # Register $t6 = Reg. $t6 XORReg. $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 # If Reg $t6 = $t5, PC = address finals bne $t7, $t6, again #If Reg $t7 $t6, PC = address again beqz $t8, exit_now #If Reg $t8 = 0, PC = address exit_now bgt $t6, $t5, loop1 #If Reg $t6 > $t5, PC = address loop1 b step2 j step2 # PC = address step2 (πιο γρήγορη εντολή) # PC = address step2 (χωρίς περιορισμό) 15 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Δηλώσεις Μεταβλητών 1..data 2. users:.byte1, 2, 3, 4, 5, 6 3. time:.word20, 30, 40, 50 4. results:.space 1000 5..text 6. main 16 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Μετάβαση υπό προϋποθέσεις Branch if equal beq rs, rt, label Branch if zero beqz rs, label Branch if not equal bne rs, rt, label Branch if greater bgt rs, rt, label Ο rt μπορεί να αντικατασταθεί με αριθμό! Ποια η διαφορά μεταξύ bgtκαι bgtu; Μετάβαση χωρίς προϋποθέσεις μπορεί να γίνει με τις εντολές Jump και Branch Ποια η διαφορά μεταξύ Jump και Branch; 17 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Άσκηση 1 Γράψτε ένα μικρό πρόγραμμα (1-3 εντολές) με το οποίο μπορείτε να ανιχνεύσετε την τιμή του δυαδικού ψηφίου στη θέση 7 της θέσης μνήμης 0Χ23450009 εάν το λιγότερο σημαντικό ψηφίο είναι αυτό που βρίσκεται στη θέση 0. lb $t1, 0x23450009 andi $t1, $t1, 0x80 # 0x80 = 1000 0000 beqz $t1, bit_was0 # if bit was 1 συνεχίζει εδώ το πρόγραμμα # if bit was 0 θα συνεχίσει στο bit_was0: 18 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Άσκηση 2 Γράψτε με 2 διαφορετικούς τρόπους (addressing modes) μικρά προγράμματα (1-3 εντολές το καθένα) που να φορτώνουν μόνοτο περιεχόμενο της θέσης μνήμης 0Χ18000081 στον καταχωρητή $t1. 1. lb $t1, 0Χ18000081 2. la $t2, 0Χ18000081 lb $t1, 0($t2) 3. la $t3, 0Χ1800007F lb $t1, 2($t3) Ίδιος τρόπος 19 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Άσκηση 3 Συμπληρώστε τις εντολές srl, και and, έτσι ώστε η κάθε εντολή να μηδενίζει τον καταχωρητή $t1. srl $t1 $t1, 31 srl $t1 $t1, 1 Χρειάζονται 2 εντολές and $t1, $t1, $zero A56 20 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Άσκηση 4 Εξηγήστε την εντολή srl$t5, $t4, 8 εάν τα περιεχόμενα των καταχωρητών πριν την εκτέλεση της είναι ως ακολούθως: $t4 = 00F0Α012 και $t5 = 03706 Β2Ε. Ποιο θα είναι το αποτέλεσμα; Κάνει δεξιά ολίσθηση κατά 8 μπιτς στο περιεχόμενο του $t4 και αποθηκεύει το αποτέλεσμα στον $t5. 00F0A012 >> 8 bits, άρα 2 ψηφία Hex: $t5 = 0000F0A0 21 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Άσκηση 5 Δίνονται τα περιεχόμενα των καταχωρητών ως ακολούθως: $t6 = 1200F0Α0 και $t7 = 0Β23706Ε Εξηγήστε την εντολή andi$t6, $t7, 0x17και υπολογίστε τα περιεχόμενα του καταχωρητή στον οποίο θα αποθηκευτεί το αποτέλεσμα. Λογική πράξη and μεταξύ του περιεχομένου του $t7 και της τιμής 0x17. Αποθήκευση του αποτελέσματος στον $t6. 0Β23706Ε 01101110 0000 0017 andόπου ΧΧ είναι: 00010111 and 000000ΧΧ 00000110 Άρα $t6 = 0x00000006 22 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Άσκηση 6 Εξηγήστε την εντολή xor$t3, $t4, $t5 και υπολογίστε τα περιεχόμενα του καταχωρητή στον οποίο θα αποθηκευτεί το αποτέλεσμααν αρχικά οι καταχωρητές: $t3 = 12F400Α0, $t4 = 7890Β800, $t5 = 00007800. Λογική πράξη xor ανα μπίτ. Αν μια είσοδος της xor είναι μηδέν, τότε η έξοδος = με την άλλη είσοδο. Άρα με xorμεταξύ $t4 και $t5, το αποτέλεσμα θα είναι: 7890??00, όπου??είναι οι έξοδοι 8 πυλών xorμε εισόδους Β8και 78 αντίστοιχα. Αυτές δίνουν C0, άρα ολόκληρο το αποτέλεσμα (32 μπιτς) που θα αποθηκευτεί στον $t3 θα είναι: 7890 C000 23 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Άσκηση 7 Εάν οι θέσεις μνήμης 0Χ34560000 έως 0Χ34560009 έχουν αποθηκευμένες τις τιμές (HEX)Α0, Α1, Α2, Α3, Α4, Α5, Β6, Β7, Β8 και Β9 αντίστοιχα, υπολογίστε τα περιεχόμενα των καταχωρητών μετά την εκτέλεση των εντολών: lb $t5, 0X34560007 lw $t7, 0X34560004 $t5 = 00 00 00 B7 $t7 =B7 B6 A5 A4 24 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Άσκηση 8 Ποιες διευθύνσεις μνήμης θα αλλάξουν περιεχόμενο μετά την εκτέλεση των πιο κάτω εντολών; 1. sb $t8, 0X20000004 2. sw$t8, 0X20000008 Καθορίστε επίσης το νέο τους περιεχόμενο σε δεκαεξαδική μορφή εάν: $t8 = 0Χa12bc34d 1. Η θέση μνήμης 0X20000004θα γίνει 4d 2.Οι θέσεις μνήμης 0X20000008, 0X20000009, 0X2000000Α, και 0X2000000Β, θα γίνουν 4d, c3, 2b, και a1 αντίστοιχα 25 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Μαθησιακοί στόχοι 1 ης Εβδομάδας 1. Αρχιτεκτονική MIPS-32 (CPU, Registers, Memory, Co-proc.) 2. Προσομοιωτής QtSpim 9.1.17 (Εγκατάσταση προγράμματος, Φόρτωση και τρέξιμο κώδικα) 3. Assembly Languageκαι Κώδικας Μηχανής (Δομή αρχείου προσομοίωσης και κλήσεις συστήματος) 4. Έλεγχος Ροής Προγράμματος ($pc, $ra) 5. Εισαγωγή στην assembly 6. Τρόποι Διευθυνσιοδότησης της Μνήμης 26 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.