Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή Δεύτερη (2 η ) δίωρη διάλεξη. Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση: Καθ. Εφαρμογών Νικόλαος Πετράκης, Τμήματος Ηλεκτρονικών Μηχανικών του Τ.Ε.Ι. Κρήτης. Τελευταία τροποποίηση: 2017-2018 εαρινό εξάμηνο.
Σύνολο εντολών Το λεξιλόγιο των «διαταγών» που είναι κατανοητές από ένα υπολογιστή Διαφορετικοί υπολογιστές έχουν διαφορετικά σύνολα εντολών Αλλά με παρόμοιες θεμελιώδεις αρχές Επειδή υπάρχουν βασικές λειτουργίες που όλοι οι υπολογιστές πρέπει να παρέχουν Επειδή οι σχεδιαστές έχουν έναν κοινό στόχο: Μεγιστοποίηση απόδοσης και ελαχιστοποίηση κόστους Οι πρώτοι υπολογιστές είχαν πολύ απλά σύνολα εντολών Απλοποιημένη υλοποίηση Πολλοί σύγχρονοι (μοντέρνοι) υπολογιστές έχουν επίσης απλά σύνολα εντολών Chapter 2 Instructions: Language of the Computer 2
Δύο διαφορετικές φιλοσοφίες (στρατηγικές) σχεδίασης επεξεργαστών CISC (Complex Instruction Set Computer) Όταν μέσα σε ενιαίες εντολές εκτελούνται κάμποσες λειτουργίες χαμηλού επιπέδου (π.χ. φόρτωμα από την μνήμη, αριθμητική πράξη, αποθήκευση στην μνήμη). Τέτοια παραδείγματα είναι: IBM System/360, PDP-11, VAX, Motorola 68k, και Intel x86. RISC (Reduced Instruction Set Computer) Στηρίζεται στην ιδέα ότι το απλοποιημένο σύνολο εντολών μπορεί να προσφέρει υψηλότερη απόδοση αν συνδυαστεί με μικροεπεξεργαστή ικανό να τις εκτελεί με λιγότερους κύκλους/εντολή. Τέτοια παραδείγματα είναι: DEC Alpha, AMD 29k, ARC, ARM, Atmel AVR, Intel i860 και i960, MIPS, Motorola 88000, Power (PowerPC) και SPARC. Chapter 2 Instructions: Language of the Computer 3
MIPS Ακρωνύμιο από: Microprocessor without Interlocked Pipeline Stages (Μικροεπεξεργαστής χωρίς αλληλεμπλεκόμενα στάδια διοχέτευσης) Υπάρχουν πολλές εκδόσεις συνόλου εντολών MIPS (MIPS I, MIPS II,, MIPS V, MIPS32, MIPS64) Εμείς θα μελετήσουμε την τρέχουσα έκδοση MIPS32, που είναι μια 32-μπιτη υλοποίηση. Επίσης, είναι διαθέσιμες προαιρετικές επεκτάσεις, όπως: MIPS-3D (απλό σύνολο εντολών κινητής υποδιαστολής SIMD, εξειδικευμένο για 3D εργασίες), MDMX (πιο επεκταμένο σύνολο εντολών SIMD για ακεραίους χρησιμοποιώντας τους 64μπιτους καταχωρητές κινητής υποδιαστολής, MIPS MT (Προσθέτει δυνατότητες MultiThreading), κ.α. Chapter 2 Instructions: Language of the Computer 4
Το σύνολο των εντολών του MIPS Χρησιμοποιείται ως παράδειγμα σε όλο το βιβλίο Το ερευνητικό έργο Stanford MIPS το εκμεταλλεύτηκε εμπορικά η MIPS Technologies (www.mips.com) (αρχικά ονομαζόταν MIPS Computer Systems), ενώ από το 2013 εξαγοράστηκε από την Imagination Technologies (www.imgtec.com/mips). Μεγάλη μερίδα της αγοράς των ενσωματωμένων πυρήνων (Μόνο το 2002 κατασκευάστηκαν ~100 εκατομ.) Εφαρμογές σε καταναλωτικά ηλεκτρονικά, εξοπλισμό δικτύωσης/αποθήκευσης, φωτογραφικές μηχανές, εκτυπωτές, κινητά τηλέφωνα, Τυπικό παράδειγμα πολλών μοντέρνων ISAs Ρίξτε μια ματιά στην πράσινη κάρτα με τα δεδομένα αναφοράς MIPS (στην αρχή του βιβλίου σας) (μετά το 1980) Chapter 2 Instructions: Language of the Computer 5
Μικροεπεξεργαστές MIPS Βρίσκονται σε προϊόντα των εταιρειών: ATI Technologies, Broadcom, Cisco, NEC, Nintendo, Silicon Graphics, Sony, Texas Instruments, Toshiba, κ.α. Chapter 2 Instructions: Language of the Computer 6
Αριθμητικές πράξεις Πρόσθεση και αφαίρεση, τρεις τελεστέοι Δύο προέλευσης και ένας προορισμού add a, b, c # βάλε στο a το b + c a b+c Όλες οι αριθμητικές πράξεις έχουν αυτή την μορφή Σχεδιαστική αρχή 1: Η απλότητα ευνοεί την κανονικότητα Η κανονικότητα απλοποιεί την υλοποίηση Η απλότητα επιφέρει μεγαλύτερη απόδοση με μικρότερο κόστος Υπολογίστε το άθροισμα τεσσάρων μεταβλητών Chapter 2 Instructions: Language of the Computer 7
Αριθμητικό παράδειγμα Κώδικας σε C : a = b + c; d = a e; Κώδικας MIPS : add a, b, c sub d, a, e # a b + c? # d a - e Chapter 2 Instructions: Language of the Computer 8
Κι άλλο αριθμητικό παράδειγμα Κώδικας σε C : f = (g + h) - (i + j); Κώδικας MIPS : add t0, g, h # temp t0 g + h add t1, i, j #? temp t1 i + j sub f, t0, t1 # f t0 - t1 Chapter 2 Instructions: Language of the Computer 9
Τελεστέοι υλικού των υπολογιστών Οι αριθμητικές εντολές χρησιμοποιούν ως τελεστέους τα περιεχόμενα καταχωριστών (register operands) Ο MIPS έχει 32 καταχωριστές με 32 μπιτ έκαστος Χρησιμοποιούνται στα συχνά προσπελάσιμα δεδομένα Είναι αριθμημένοι από το 0 έως το 31 Ομάδες δεδομένων των 32 μπιτ ονομάζονται «λέξεις» (words) Σύμβαση για τα ονόματα στον συμβολομεταφραστή $t0, $t1,, $t9 για προσωρινούς (temporary) καταχωριστές $s0, $s1,, $s7 για αποθηκευμένους (saved) καταχωριστές Σχεδιαστική αρχή 2: Το μικρότερο είναι ταχύτερο Πολύ μεγαλύτερος αριθμός καταχωριστών θα μπορούσε να αυξήσει δραματικά τον χρόνο κύκλου ρολογιού Σε αντίθεση με την κύρια μνήμη που έχει εκατομμύρια ή ακόμα και δισεκατομμύρια θέσεων Chapter 2 Instructions: Language of the Computer 10
το ίδιο με χρήση καταχωριστών Κώδικας σε C: f = (g + h) - (i + j); (Όπου: το f στο $s0, το g στο $s1, το h στο $s2, το i στο $s3, το j στο $s4, και επιπλέον χρησιμοποιούνται ως προσωρινοί καταχωριστές οι $t0 και $t1) Κώδικας MIPS: add $t0, $s1, $s2 # $t0 g + h add $t1, $s3, $s4 # $t1 i + j sub $s0, $t0, $t1 # f $t0 - $t1 (το οποίο είναι το: (g + h) - (i + j)) Chapter 2 Instructions: Language of the Computer 11
Τελεστέοι Μνήμης Η κύρια μνήμη χρησιμοποιείται για σύνθετα δεδομένα Πίνακες (arrays), δομές (structures), δυναμικά δεδομένα Για να πραγματοποιηθούν αριθμητικές πράξεις Φορτώνονται (load) οι τιμές από την μνήμη στους καταχωριστές Αποθηκεύονται (store) τα αποτελέσματα από τους καταχωριστές στη μνήμη Η μνήμη διευθυνσιοδοτείται σε επίπεδο ψηφιολέξης Κάθε διεύθυνση καθορίζει (ταυτοποιεί) μια ψηφιολέξη (byte) Οι λέξεις στη μνήμη είναι ευθυγραμμισμένες (aligned) Η διεύθυνση (μια λέξης) πρέπει να είναι πολλαπλάσιο του 4 Ο MIPS είναι τύπου Big Endian (μεγάλου άκρου) Το σημαντικότερο byte στη μικρότερη διεύθυνση Σε αντίθεση με το Little Endian (μικρού άκρου) όπου το λιγότερο σημαντικό byte ευρίσκεται στην μικρότερη διεύθυνση Τι συμβαίνει με τον προσομοιωτή SPIM ή με τον MARS; Chapter 2 Instructions: Language of the Computer 12
Τελεστέοι Μνήμης (παράδειγμα 1) Κώδικας σε C: g = h + A[8]; (Όπου: το g στο $s1, το h στο $s2, και διεύθυνση βάσης του Α στο $s3 και επιπλέον χρησιμοποιείται ως προσωρινός καταχωριστής ο $t0) Κώδικας MIPS: Θεωρείστε ότι ο πίνακας Α είναι πίνακας 32-μπιτων ακεραίων (δηλαδή, ο καθένας απαιτεί χώρο τεσσάρων ψηφιολέξεων ) Ο αριθμοδείκτης 8 απαιτεί σχετική απόσταση ίση με 32 4 ψηφιολέξεις (bytes) ανά λέξη (word) lw $t0, 32($s3) # load word add $s1, $s2, $t0 σχετική απόσταση (offset) καταχωριστής βάσης (base register) Chapter 2 Instructions: Language of the Computer 13
Τελεστέοι Μνήμης (παράδειγμα 2) Κώδικας C: A[9] = h + A[8]; (Όπου: το h στο $s2, και η διεύθυνση βάσης του Α στο $s3 και επιπλέον χρησιμοποιείται ως προσωρινός καταχωριστής ο $t0) Κώδικας MIPS: Ο αριθμοδείκτης 8 απαιτεί σχετική απόσταση 32, ενώ ο 9 απαιτεί 36. lw $t0, 32($s3) # load word add $t0, $s2, $t0 sw $t0, 36($s3) # store word Chapter 2 Instructions: Language of the Computer 14
Καταχωριστές εναντίον Μνήμης Οι καταχωριστές παρέχουν ταχύτερη πρόσβαση από την μνήμη Η λειτουργία με δεδομένα που βρίσκονται στην μνήμη απαιτεί φορτώσεις (loads) και αποθηκεύσεις (stores) Πρέπει να εκτελεστούν περισσότερες εντολές Ο μεταγλωττιστής πρέπει να χρησιμοποιεί τους καταχωριστές για τις μεταβλητές όσο το δυνατόν περισσότερο Σκόρπισμα (spill) στη μνήμη μόνο των λιγότερο συχνά χρησιμοποιούμενων μεταβλητών ή αυτών που θα χρησιμοποιηθούν εντατικά αργότερα Η αποδοτική χρήση των καταχωριστών είναι σημαντική! Chapter 2 Instructions: Language of the Computer 15
Σταθεροί ή άμεσοι τελεστέοι Σταθερές που καθορίζονται σε μια εντολή, π.χ. άμεση πρόσθεση (add immediate): addi $s3, $s3, 4 # $s3 $s3 + 4 Δεν υπάρχει εντολή άμεσης αφαίρεσης Απλά προσθέτουμε μια αρνητική σταθερά addi $s2, $s1, -1 # $s2 $s1-1 Σχεδιαστική Αρχή 3: Κάνε την συνηθισμένη περίπτωση γρήγορη Μικρές σταθερές τιμές εμφανίζονται συχνά Η χρήση άμεσου τελεστή μας γλυτώνει από μια εντολή φόρτωσης από την μνήμη Chapter 2 Instructions: Language of the Computer 16
Η σταθερά Μηδέν (Zero) Ο καταχωριστής 0 του MIPS ($zero) είναι η σταθερά μηδέν (0) Δεν μπορεί να αλλάξει περιεχόμενο Πολύ χρήσιμος για τετριμμένες λειτουργίες π.χ., μεταφορά μεταξύ καταχωριστών add $t2, $s1, $zero # $t2 $s1 ή αρχικοποίηση μεταβλητών addi $t3, $zero, 10 # $t3 10 and $t4, $t4, $zero # $t4 0 Chapter 2 Instructions: Language of the Computer 17
Απρόσημοι δυαδικοί ακέραιοι Με δεδομένο έναν αριθμό των n bit x x 2 x 2 x 2 n 1 n 2 1 0 n 1 n 2 1 0 2 x Εύρος: από 0 έως +2 n 1 Παράδειγμα 0000 0000 0000 0000 0000 0000 0001 1001 2 = 0 + + 1 2 4 + 1 2 3 + 0 2 2 + 0 2 1 + 1 2 0 = 0 + + 16 + 8 + 0 + 0 + 1 = 25 10 Με χρήση 32 bit από 0 έως +4,294,967,295 Chapter 2 Instructions: Language of the Computer 18
Προσημασμένοι ακέραιοι σε συμπλήρωμα ως προς 2 Με δεδομένο έναν αριθμό των n bit x x 2 x 2 x 2 n 1 n 2 1 0 n 1 n 2 1 0 2 Εύρος: από 2 n 1 έως +2 n 1 1 Παράδειγμα 1111 1111 1111 1111 1111 1111 1111 1001 2 = 1 2 31 + 1 2 30 + + 1 2 3 + 0 2 2 +0 2 1 +1 2 0 = 2,147,483,648 + 2,147,483,641 = 7 10 Με χρήση 32 bit από 2,147,483,648 έως +2,147,483,647 x Chapter 2 Instructions: Language of the Computer 19
Προσημασμένοι ακέραιοι σε συμπλήρωμα ως προς 2 Το bit 31 είναι το bit προσήμου 1 για αρνητικούς αριθμούς 0 για μη αρνητικούς αριθμούς (θετικούς και μηδέν) Το ( 2 n 1 ) δεν μπορεί να παρασταθεί Οι μη αρνητικοί αριθμοί έχουν την ίδια απρόσημη και προσημασμένη σε συμπλήρωμα ως προς 2 αναπαράσταση Μερικοί συγκεκριμένοι αριθμοί 0: 0000 0000 0000 1: 1111 1111 1111 Ο πιο αρνητικός: 1000 0000 0000 Ο πιο θετικός: 0111 1111 1111 Chapter 2 Instructions: Language of the Computer 20
Προσημασμένη άρνηση Συμπλήρωμα (ως προς 1) και πρόσθεση του 1 «Συμπλήρωμα» σημαίνει 1 0, 0 1 x x 1111...111 2 1 x 1 x Παράδειγμα: βρείτε τον αντίθετο (άρνηση) του +2 +2 = 0000 0000 0010 2 2 = 1111 1111 1101 2 + 1 = 1111 1111 1110 2 Chapter 2 Instructions: Language of the Computer 21
Επέκταση προσήμου Αναπαράσταση ενός αριθμού με περισσότερα bit Διατήρηση της αριθμητικής τιμής Στο σύνολο εντολών του MIPS addi: επέκταση προσήμου στη τιμή του άμεσου (immediate) lb, lh: επέκταση προσήμου στο byte/ημιλέξη που φορτώνεται beq, bne: επέκταση προσήμου στη μετατόπιση (displacement) Επανάληψη του bit προσήμου προς τα αριστερά παραβολή: απρόσημες τιμές: επέκταση με μηδενικά Παραδείγματα: 8-bit σε 16-bit +2: 0000 0010 => 0000 0000 0000 0010 2: 1111 1110 => 1111 1111 1111 1110 Chapter 2 Instructions: Language of the Computer 22
Αναπαράσταση εντολών Οι εντολές κωδικοποιούνται στο δυαδικό Ονομάζεται κώδικας μηχανής (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 23
Εντολές 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 24
Παράδειγμα μορφής 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 25
Παράδειγμα μορφής 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 26
Δεκαεξαδικό (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 27