Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή Τρίτη (3 η ) δίωρη διάλεξη. Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση: Καθ. Εφαρμογών Νικόλαος Πετράκης, Τμήματος Ηλεκτρονικών Μηχανικών του Τ.Ε.Ι. Κρήτης. Τελευταία τροποποίηση: 2017-2018 εαρινό εξάμηνο.
Εντολές MIPS μορφής I (immediate) op rs rt constant or address 6 bits 5 bits 5 bits 16 bits Άμεσες αριθμητικές εντολές και εντολές φόρτωσης /αποθήκευσης rs: αριθμός καταχωριστή βάσης (base register) rt: αριθμός καταχωριστή προέλευσης ή προορισμού Constant: σταθερά από 2 15 έως +2 15 1 Address: σχετική απόσταση (offset) που προστίθεται στην διεύθυνση βάσης που βρίσκεται στο rs Σχεδιαστική Αρχή 4: Η καλή σχεδίαση απαιτεί καλούς συμβιβασμούς Οι διαφορετικές μορφές εντολών αυξάνουν την πολυπλοκότητα (για παράδειγμα δυσχεραίνουν την αποκωδικοποίηση), αλλά μπορούμε να μειώσουμε την πολυπλοκότητα αφενός διατηρώντας την ομοιομορφία των εντολών ως προς το μήκος τους (όλες στα 32 bit) και αφετέρου διατηρώντας, κατά το δυνατόν, παρόμοιες τις μορφές. Chapter 2 Instructions: Language of the Computer 2
Παράδειγμα μορφής I op rs rt constant or address 6 bits 5 bits 5 bits 16 bits addi $s0, $s1, 3 addi $s1 $s0 3 8 17 16 3 001000 10001 10000 0000000000000011 00100010001100000000000000000011 2 = 22300003 16 Chapter 2 Instructions: Language of the Computer 3
Άλλα παραδείγματα μορφής I op rs rt constant or address 6 bits 5 bits 5 bits 16 bits lw $t0, 32($s1) lw $s1 $t0 32 35 17 8 32... sw $t0, 36($s1) sw $s1 $t0 36 43 17 8 36... Chapter 2 Instructions: Language of the Computer 4
Η/Υ αποθηκευμένου προγράμματος The BIG Picture Οι εντολές αναπαριστώνται στο δυαδικό, όπως και τα δεδομένα Εντολές και δεδομένα αποθηκεύονται στην μνήμη Τα προγράμματα μπορούν δουλέψουν πάνω σε προγράμματα π.χ., compilers, linkers, Η συμβατότητα σε δυαδικό επίπεδο επιτρέπει σε μεταγλωττισμένα προγράμματα να δουλεύουν σε άλλους Η/Υ Τυποποιημένες Αρχιτεκτονικές Συνόλου Εντολών (Standardized ISAs) Chapter 2 Instructions: Language of the Computer 5
Λογικές Πράξεις Εντολές πράξεων ανά bit (bitwise) Πράξη (Operation) Τελεστές C Τελεστές Java Εντολές MIPS Ολίσθηση αριστερά (Shift left) << << sll Ολίσθηση δεξιά (Shift right) >> >>> srl Σύζευξη (Bitwise AND) & & and, andi Διάζευξη (Bitwise OR) or, ori Άρνηση (Bitwise NOT) ~ ~ nor Χρήσιμες για την εξαγωγή και την εισαγωγή ομάδων δυαδικών ψηφίων από/σε μια λέξη Chapter 2 Instructions: Language of the Computer 6
Εντολές ολίσθησης Δεν χρησιμοποιείται op rs rt rd shamt funct 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits shamt: πόσες θέσεις να ολισθήσει Λογική ολίσθηση αριστερά (shift left logical) Ολίσθησε αριστερά και γέμισε τα κενά με 0 sll κατά i bits πολλαπλασιάζει επί 2 i Λογική ολίσθηση δεξιά (shift right logical) Ολίσθησε δεξιά και γέμισε τα κενά με 0 srl κατά i bits διαιρεί διά 2 i (μόνο χωρίς πρόσημο) Chapter 2 Instructions: Language of the Computer 7
Εντολές σύζευξης (AND) Χρήσιμο για την εφαρμογή μάσκας σε μια λέξη Επιλογή κάποιων bits, επαναφορά άλλων στο 0 and $t0, $t1, $t2 $t2 $t1 0000 0000 0000 0000 0000 1101 1100 0000 0000 0000 0000 0000 0011 1100 0000 0000 Μάσκα $t0 0000 0000 0000 0000 0000 1100 0000 0000 Chapter 2 Instructions: Language of the Computer 8
Εντολές διάζευξης (OR) Χρήσιμο για να συμπεριλάβει κάποια bits σε μια λέξη Θέση κάποιων bits στο 1, αφήνοντας άλλα αμετάβλητα or $t0, $t1, $t2 $t2 $t1 $t0 0000 0000 0000 0000 0000 1101 1100 0000 0000 0000 0000 0000 0011 1100 0000 0000 0000 0000 0000 0000 0011 1101 1100 0000 Chapter 2 Instructions: Language of the Computer 9
Εντολές άρνησης (NOT) Χρήσιμο για την αντιστροφή των bits μιας λέξης Αλλάζει το 0 σε 1, και το 1 σε 0 Ο MIPS έχει την NOR (εντολή με 3 τελεστέους) a NOR b = NOT ( a OR b ) nor $t0, $t1, $zero $t1 Καταχωριστής 0: διαβάζεται πάντοτε ως μηδέν 0000 0000 0000 0000 0011 1100 0000 0000 $t0 1111 1111 1111 1111 1100 0011 1111 1111 Chapter 2 Instructions: Language of the Computer 10
Εντολές λήψης αποφάσεων Διακλάδωση σε μια εντολή (με ετικέτα) αν μια συνθήκη είναι αληθής Διαφορετικά, η ροή του προγράμματος συνεχίζει με την επόμενη εντολή beq rs, rt, L1 branch if equal εάν (rs == rt) πήγαινε στην εντολή με ετικέτα L1 bne rs, rt, L2 εάν (rs!= rt) πήγαινε στην εντολή με ετικέτα L2 j L3 branch if not equal jump Διακλάδωση χωρίς συνθήκη (unconditional jump) στην εντολή με ετικέτα L3 Chapter 2 Instructions: Language of the Computer 11
Μεταγλώττιση εντολών If Κώδικας C: if (i==j) f = g+h; else f = g-h; (Then:) Τα f, g, h, i και j, στους $s0, $s1, $s2, $s3 και $s4 Μεταγλωττισμένος κώδικας MIPS: bne $s3, $s4, Else add $s0,? $s1, $s2 j Exit Else: sub $s0, $s1, $s2 Exit: Ο Συμβολομεταφραστής υπολογίζει τις διευθύνσεις Chapter 2 Instructions: Language of the Computer 12
Μεταγλώττιση βρόχων (Loop) Κώδικας C: while (save[i]!= k) i++; Το i στο $s3, το k στο $s5, και η διεύθυνση του save στο $s6 Μεταγλωττισμένος κώδικας MIPS: Βασικά μπλοκ Θεωρείστε ότι ο πίνακας save είναι 32μπιτων ακεραίων. Loop: sll $t0, $s3, 2 add $t1,? $t0, $s6 lw $t2, 0($t1) beq $t2, $s5, Exit addi $s3, $s3, 1 j Loop Exit: Chapter 2 Instructions: Language of the Computer 13
Βασικά μπλοκ (Basic Blocks) Ένα βασικό μπλοκ είναι μια ακολουθία εντολών Χωρίς ενσωματωμένες διακλαδώσεις (εκτός από το τέλος της) και Χωρίς προορισμούς διακλάδωσης (branch targets) (εκτός από την αρχή) Οι μεταγλωττιστές, σε κάποια από τις πρώτες φάσεις της μεταγλώττισης, εντοπίζουν τα βασικά μπλοκ για βελτιστοποίηση Ένας εξελιγμένος επεξεργαστής μπορεί να επιταχύνει την εκτέλεση των βασικών μπλοκ Chapter 2 Instructions: Language of the Computer 14
Κι άλλες εντολές υπό συνθήκη Θέσε το αποτέλεσμα στο ένα (1) εάν μια συνθήκη είναι αληθής Διαφορετικά, δώσε του τιμή μηδέν (0) slt rd, rs, rt if (rs < rt) rd = 1; else rd = 0; slti rt, rs, constant if (rs < constant) rt = 1; else rt = 0; Συνδυάζονται με τις εντολές beq, bne slt $t0, $s1, $s2 # if ($s1 < $s2) bne $t0, $zero, L # branch to L Chapter 2 Instructions: Language of the Computer 15
Σχεδίαση εντολών διακλάδωσης Γιατί όχι και blt, ble, bgt, bge, κλπ; Το υλικό (hardware) για τον έλεγχο ανισοτήτων (<,, >, ) είναι πιο αργό από αυτό που ελέγχει για ισότητα ή διαφορά (=, ) Συμπεριλαμβάνοντάς το σε μια διακλάδωση οδηγεί σε περισσότερη δουλειά ανά εντολή, που επιβάλει ρολόι με χαμηλότερη συχνότητα Επιβαρύνεται το σύνολο των εντολών! Οι beq και bne είναι η συχνή περίπτωση. Αυτό είναι ένας καλός σχεδιαστικός συμβιβασμός Chapter 2 Instructions: Language of the Computer 16