Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση: Καθ. Εφαρμογών Νικόλαος Πετράκης, Τμήματος Ηλεκτρονικών Μηχανικών του Τ.Ε.Ι. Κρήτης. Τελευταία τροποποίηση: 2014-2015 χειμερινό εξάμηνο.
Αναπαράσταση εντολών Οι εντολές κωδικοποιούνται στο δυαδικό Ονομάζεται κώδικας μηχανής (machine code) Οι εντολές του MIPS (MIPS instructions) Κωδικοποιημένες λέξεις εντολών στα 32 bit Μικρός αριθμός μορφών εντολών (instruction formats) που κωδικοποιούν τον κώδικα λειτουργίας (opcode), τους αριθμούς καταχωρητών, Κανονικότητα! Αριθμοί καταχωρητών (Register numbers) $t0 $t7 είναι οι καταχωρητές 8 15 $s0 $s7 είναι οι καταχωρητές 16 23 $t8 $t9 είναι οι καταχωρητές 24 25 Chapter 2 Instructions: Language of the Computer 2
Εντολές MIPS μορφής R (register) op rs rt rd shamt funct 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits Πεδία εντολής (Instruction fields) op: κωδικός λειτουργίας (operation code) (opcode) rs: αριθμός πρώτου καταχωρητή προέλευσης (source) rt: αριθμός δεύτερου καταχωρητή προέλευσης (source) rd: αριθμός καταχωρητή προορισμού (destination) shamt: ποσότητα ολίσθησης (shift amount) (προς το παρόν έχει τιμή 00000) funct: κωδικός συνάρτησης (function code) (επεκτείνει το opcode) Chapter 2 Instructions: Language of the Computer 3
Παράδειγμα μορφής R (1o) op rs rt rd shamt funct 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits add $t0, $s1, $s2 Συμβολική γλώσσα (assembly) special $s1 $s2 $t0 0 add 0 17 18 8 0 32 000000 10001 10010 01000 00000 100000 00000010001100100100000000100000 2 = 02324020 16 Γλώσσα μηχανής (machine language) Chapter 2 Instructions: Language of the Computer 4
Παράδειγμα μορφής R (2o) op rs rt rd shamt funct 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits sub $t9, $t0, $t1 special $t0 $t1 $t9 0 sub 0 8 9 25 0 34 000000 01000 01001 11001 00000 100010 00000001000010011100100000100010 2 = 0109C822 16 Chapter 2 Instructions: Language of the Computer 5
Δεκαεξαδικό (Hexadecimal) Βάση 16 Συμπαγής αναπαράσταση σειρών από bit 4 δυαδικά ψηφία (bits) ανά δεκαεξαδικό ψηφίο 0 0000 4 0100 8 1000 c 1100 1 0001 5 0101 9 1001 d 1101 2 0010 6 0110 a 1010 e 1110 3 0011 7 0111 b 1011 f 1111 Παράδειγμα: eca8 6420 (hex) 1110 1100 1010 1000 0110 0100 0010 0000 (two) Chapter 2 Instructions: Language of the Computer 6
Εντολές 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 7
Παράδειγμα μορφής 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 8
Άλλα παραδείγματα μορφής 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 9
Η/Υ αποθηκευμένου προγράμματος The BIG Picture Οι εντολές αναπαριστώνται στο δυαδικό, όπως και τα δεδομένα Εντολές και δεδομένα αποθηκεύονται στην μνήμη Τα προγράμματα μπορούν δουλέψουν πάνω σε προγράμματα π.χ., compilers, linkers, Η συμβατότητα σε δυαδικό επίπεδο επιτρέπει σε μεταγλωττισμένα προγράμματα να δουλεύουν σε άλλους Η/Υ Τυποποιημένες Αρχιτεκτονικές Συνόλου Εντολών (Standardized ISAs) Chapter 2 Instructions: Language of the Computer 10
Λογικές Πράξεις Εντολές πράξεων ανά 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 11
Εντολές ολίσθησης 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 12
Εντολές σύζευξης (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 13
Εντολές διάζευξης (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 14
Εντολές άρνησης (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 15
Εντολές λήψης αποφάσεων Διακλάδωση σε μια εντολή (με ετικέτα) αν μια συνθήκη είναι αληθής Διαφορετικά, η ροή του προγράμματος συνεχίζει με την επόμενη εντολή 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 16
Μεταγλώττιση εντολών If Κώδικας C: if (i==j) f = g+h; else f = g-h; Τα f, g, στους $s0, $s1, Μεταγλωττισμένος κώδικας MIPS: bne $s3, $s4, Else add $s0, $s1, $s2 j Exit Else: sub $s0, $s1, $s2 Exit: Ο Συμβολομεταφραστής υπολογίζει τις διευθύνσεις Chapter 2 Instructions: Language of the Computer 17