Κεφάλαιο 2. Εντολές: η γλώσσα του υπολογιστή. Οργάνωση και Σχεδίαση Υπολογιστών Η ιασύνδεση Υλικού και Λογισµικού, 4 η έκδοση

Σχετικά έγγραφα
Κεφάλαιο 2. Εντολές: η γλώσσα του υπολογιστή

Κεφάλαιο 2. Εντολές: η γλώσσα του υπολογιστή

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 3 Εντολές του MIPS (2)

Εντολές του MIPS (2)

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. Τρίτη (3 η ) δίωρη διάλεξη. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

ΠΛΕ- 027 Μικροεπεξεργαστές

Σύγχρονες Αρχιτεκτονικές Υπολογιστών

Διαδικασίες ΙI. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 5

Διαδικασίες Ι. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 4

Συναρτήσεις-Διαδικασίες

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 2 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Φροντιστήριο: MIPS assembly

Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy. Chapter 2. Εντολές : Η γλώσσα του υπολογιστή

ΠΛΕ- 027 Μικροεπεξεργαστές

Τεχνολογίες ημιαγωγών. Chapter 2 Instructions: Language of the Computer 1

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy

Αρχιτεκτονική Υπολογιστών

Data-Level Parallelism Linking & Loading

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Αρχιτεκτονική Υπολογιστών

ΕΠΛ605 Εργασία 1 Ημερομηνία Παράδοσης 12/9/2018 στην αρχή του μαθήματος

; Γιατί είναι ταχύτερη η λήψη και αποκωδικοποίηση των εντολών σταθερού μήκους;

add $t0,$zero, $zero I_LOOP: beq $t0,$s3, END add $t1, $zero,$zero J_LOOP: sub $t2, $s3, $t0 add $t2, $t2, $s1 int i, j, tmp; int *arr, n;

LANGUAGE OF THE MACHINE. TEI Κρήτης, Τμ. ΕΠΠ, Αρχιτεκτονική Υπολογιστών. Οργάνωση Υπολογιστή. Τυπική οργάνωση υπολογιστή

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

6. Επιστροφή ελέγχου στο σημείο εκκίνησης

Υποστήριξη διαδικασιών στο υλικό των υπολογιστών

Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy. Chapter 5. Ο επεξεργαστής: διαδρομή δεδομένων και μονάδα ελέγχου

Οργάνωση και Σχεδίαση Υπολογιστών Η ιασύνδεση Υλικού και Λογισµικού, 4 η έκδοση. Κεφάλαιο 2. Εντολές: η γλώσσα του υπολογιστή

με έμφαση στο MIPS R2000

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 2 Οργάνωση μνήμης Καταχωρητές του MIPS Εντολές του MIPS 1

Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

Αριθμητική Υπολογιστών (Κεφάλαιο 3)

MIPS functions and procedures

Αρχιτεκτονική Υπολογιστών Ι

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Μεταγλώτιση, σύνδεση

Μετάφραση ενός Προγράμματος Εξαιρέσεις

Αρχιτεκτονική υπολογιστών

και η µονάδα ελέγχου (control) O επεξεργαστής: Η δίοδος δεδοµένων (datapath) Εντολές διακλάδωσης (branch beq, bne) I Type Σχεδίαση datapath

Οργάνωση Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ασκήσεις 5: Εντολές Συγκρίσεων και Μεταφοράς Ελέγχου. Μανόλης Γ.Η.

1 η Ενδιάμεση Εξέταση Απαντήσεις/Λύσεις

Chapter 5. Ο επεξεργαστής: διαδρομή δεδομένων και μονάδα ελέγχου. Ενδέκατη (11 η ) δίωρη διάλεξη.

-Επεξεργαστής: datapath (δίοδος δεδοµένων) (1) και control (2) -Μνήµη (3) -Συσκευές Εισόδου (4), Εξόδου (5) (Μεγάλη ποικιλία!!)

Εντολές γλώσσας μηχανής

Αρχιτεκτονική Υπολογιστών

Chapter 3 Αριθμητική Υπολογιστών

Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

Αρχιτεκτονική Υπολογιστών

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Αρχιτεκτονική x86(-64) 32-bit και 64-bit λειτουργία. Αρχιτεκτονική x86(-64) Αρχιτεκτονική επεξεργαστών x86(-64) Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control)

Κεφάλαιο 4. Ο επεξεργαστής. Οργάνωση και Σχεδίαση Υπολογιστών Η ιασύνδεση Υλικού και Λογισµικού, 4 η έκδοση

Αρχιτεκτονική Υπολογιστών

Οργάνωση Υπολογιστών

Αρχιτεκτονικές Συνόλου Εντολών

Κεφάλαιο 2 Εντολές Η γλώσσα της Μηχανής (Instructions Language of the Computer)

O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control)

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

-Επεξεργαστής: datapath (δίοδος δεδομένων) (1) και control (2) -Μνήμη (3) -Συσκευές Εισόδου (4), Εξόδου (5) (Μεγάλη ποικιλία!!)

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΠΡΩΤΗ ΠΡΟΟΔΟΣ ΣΤΗΝ «ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Y»

-Επεξεργαστής: datapath (δίοδος δεδομένων) (1) και control (2) -Μνήμη (3) -Συσκευές Εισόδου (4), Εξόδου (5) (Μεγάλη ποικιλία!!)

Chapter 3. Αριθμητική Υπολογιστών. Έβδομη (7 η ) δίωρη διάλεξη. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Οργάνωση Υπολογιστών

ΗΜΥ 213. Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών. Διδάσκων: Δρ. Γιώργος Ζάγγουλος

Οργάνωση και Σχεδίαση Υπολογιστών Η ιασύνδεση Υλικού και Λογισµικού, 4 η έκδοση. Κεφάλαιο 3. Αριθµητική για υπολογιστές

Εργαστήριο Αρ. 1. Εισαγωγή στην Αρχιτεκτονική MIPS. Πέτρος Παναγή Σελ. 1

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

Περιγραφή αρχιτεκτονικής MIPS MIPS assembly (1o και 2o μέρος)

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών ARM και x86

Οργάνωση Η/Υ. Γιώργος ηµητρίου. Μάθηµα 2 ο. Πανεπιστήµιο Θεσσαλίας - Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ικτύων

Αρχιτεκτονική Υπολογιστών. Data. Κείμενο. Βίντεο. Αριθμοί Εικόνες. Ήχοι

Παραδείγματα Assembly (Μέρος

1. Οργάνωση της CPU 2. Εκτέλεση εντολών 3. Παραλληλία στο επίπεδο των εντολών 4. Γραμμές διοχέτευσης 5. Παραλληλία στο επίπεδο των επεξεργαστών

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

Εισαγωγή στην πληροφορική -4

; Τι περιέχεται στη συσκευασία ενός μικροεπεξεργαστή σήμερα;

Τελική Εξέταση, Απαντήσεις/Λύσεις

Τρόποι Διευθυνσιοδότησης

Οργάνωση Υπολογιστών (Ι)

Single Cycle Datapath. Αρχιτεκτονική Υπολογιστών. 5ο εξάμηνο ΣΗΜΜΥ ακ. έτος: Νεκ. Κοζύρης

ΚΕΦΑΛΑΙΟ 2: Χειρισµός εδοµένων

ΕΠΛ221: Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός. Κεφ. 2 Εντολές: H γλώσσα μηχανής

Αναδρομή. ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 6. Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

Κεφάλαιο 3. Αριθμητική για υπολογιστές

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΔΕΥΤΕΡΗ ΠΡΟΟΔΟΣ ΣΤΗΝ ΟΡΓΑΝΩΣΗ ΣΤΟΥΣ Η/Y (ΗΥ232)

Κεντρική Μονάδα Επεξεργασίας (ΚΜΕ) Τμήματα ΚΜΕ (CPU) Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (Ι)

Αναπαράσταση Δεδομένων. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

Οι υπολογιστές στον πραγματικό κόσμο

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Intel x86 ISA. Νίκος Μπέλλας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών ΗΥ

Οργάνωση Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Εργαστήριο 10: Επίδοση Επεξεργαστών, CPI. Μανόλης Γ.Η. Κατεβαίνης

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

Transcript:

Οργάνωση και Σχεδίαση Υπολογιστών Η ιασύνδεση Υλικού και Λογισµικού, 4 η έκδοση Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή ιαφάνειες διδασκαλίας του πρωτότυπου βιβλίου µεταφρασµένες στα ελληνικά και εµπλουτισµένες (µετάφραση, επιµέλεια, προσθήκες: ηµήτρης Γκιζόπουλος, Πανεπιστήµιο Αθηνών)

Σύνολο εντολών Σύνολο εντολών (Instruction set) Το «ρεπερτόριο» των εντολών ενός υπολογιστή ιαφορετικοί υπολογιστές έχουν διαφορετικά σύνολα εντολών Αλλά µε πολλά κοινά χαρακτηριστικά Οι πρώτοι υπολογιστές είχαν πολύ απλά σύνολα εντολών Απλοποιηµένη υλοποίηση Πολλοί σύγχρονοι έχουν επίσης απλά σύνολα εντολών 2.1 Εισαγωγή Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 2

«Αποθηκευµένο πρόγραµµα» The stored program concept Η ιδέα ότι οι εντολές και τα δεδοµένα πολλών τύπων µπορούν να αποθηκευτούν στη µνήµη ως αριθµοί Οδήγησε στον υπολογιστή αποθηκευµένου προγράµµατος (stored program computer) Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 3

Το σύνολο εντολών του MIPS Χρησιµοποιείται ως παράδειγµα σε όλο το βιβλίο Η MIPS Technologies (www.mips.com) έκανε εµπορικό τον Stanford MIPS Μεγάλο µερίδιο της αγοράς των πυρήνων (cores) ενσωµατωµένων επεξεργαστών Εφαρµογές σε καταναλωτικά ηλεκτρονικά, εξοπλισµό δικτύων και αποθήκευσης, φωτογραφικές µηχανές, εκτυπωτές, Τυπικό πολλών σύγχρονων ISA (Instruction Set Architecture) Πληροφορία στην αποσπώµενη κάρτα Αναφοράς εδοµένων MIPS (πράσινη κάρτα), και τα Παραρτήµατα Β και Ε Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 4

Αριθµητικές λειτουργίες Πρόσθεση και αφαίρεση, τρεις τελεστέοι (operands) ύο προελεύσεις και ένας προορισµός add a, b, c # το a παίρνει το b + c Όλες οι αριθµητικές λειτουργίες έχουν αυτή τη µορφή Σχεδιαστική αρχή 1: η απλότητα ευνοεί την κανονικότητα Η κανονικότητα κάνει την υλοποίηση απλούστερη 2.2 Λειτουργίες του υλικού των υπολογιστών Η απλότητα επιτρέπει µεγαλύτερη απόδοση µε χαµηλότερο κόστος Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 5

Πρόσθεση και αφαίρεση Κώδικας C: a = b + c; d = a e; Μεταγλωττισµένος κώδικας MIPS: add a, b, c sub d, a, e Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 6

Σύνθετη ανάθεση τιµής Κώδικας C: f = (g + h) - (i + j); Μεταγλωττισµένος κώδικας MIPS: add t0, g, h # t0 = g + h add t1, i, j # t1 = i + j sub f, t0, t1 # f = t0 - t1 Μία γραµµή κώδικα C, τρεις γραµµές κώδικα assembly MIPS Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 7

Πίνακες εντολών στο βιβλίο Συµβολική γλώσσα του MIPS Κατηγορία Εντολή Παράδειγµα Σηµασία Σχόλια Αριθµητικές πράξεις Μεταφορά δεδοµένων Λογικές πράξεις add add $s1,$s2,$s3 $s1 = $s2 + $s3 Τρεις τελεστέοι καταχωρητές subtract sub $s1,$s2,$s3 $s1 = $s2 $s3 Τρεις τελεστέοι καταχωρητές add immediate addi $s1,$s2,20 $s1 = $s2 + 20 Χρήση για πρόσθεση σταθεράς load word store word lw $s1,20($s2) $s1 = Memory[$s2+20] Λέξη από τη µνήµη σε καταχωρητή sw $s1,20($s2) Memory[$s2+20] = $s1 Λέξη από καταχωρητή στη µνήµη load half unsigned lhu $s1,20($s2) $s1 = Memory[$s2 + 20] Ηµιλέξη από τη µνήµη σε καταχωρητή store half load byte unsigned store byte sh $s1,20($s2) Memory[$s2 + 20] = $s1 Ηµιλέξη από καταχωρητή στη µνήµη lbu s1,20($s2) $s1 = Memory[$s2 + 20] Byte από τη µνήµη σε καταχωρητή sb $s1,20($s2) Memory[$s2 + 20] = $s1 Byte από καταχωρητή στη µνήµη load linked word 11 $s1,20(s2) $s1 = Memory[$s2 + 20] Φόρτωση λέξης ως πρώτο µέρος µιας αδιαίρετης εναλλαγής store condition. sc $s1,20($s2) Memory[$s2 + 20] = $s1; Αποθήκευση λέξης ως δεύτερο word $s1 = 0 ή 1 µέρος µιας αδιαίρετης εναλλαγής load upper lui $s1,20 $s1 = 20 * 2 16 Φορτώνει σταθερά στα immediate υψηλότερα 16 bit and and $s1,$s2,$s3 $s1 = $s2 & $s3 Τρεις τελεστέοι καταχωρητές AND bit προς bit or or $s1,$s2,$s3 $s1 = $s2 $s3 Τρεις τελεστέοι καταχωρητές OR bit προς bit nor nor $s1,$s2,$s3 $s1 = ~ ($s2 $s3) Τρεις τελεστέοι καταχωρητές NOR bit προς bit and immediate andi $s1,$s2,20 $s1 = $s2 & 20 AND bit προς bit µε σταθερά Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 8

Τελεστέοι-καταχωρητές Οι αριθµητικές εντολές χρησιµοποιούν καταχωρητές ως τελεστέους Ο MIPS διαθέτει ένα αρχείο καταχωρητών (register file) µε 32 καταχωρητές των 32-bit Χρήση για τα δεδοµένα που προσπελάζονται συχνά Αρίθµηση καταχωρητών από 0 έως 31 Τα δεδοµένα των 32-bit ονοµάζονται «λέξη» ( word ) Ονόµατα καταχωρητών του συµβολο- µεταφραστή (assembler) $t0, $t1,, $t9 για προσωρινές τιµές $s0, $s1,, $s7 για αποθηκευµένες µεταβλητές Σχεδιαστική αρχή 2: το µικρότερο είναι ταχύτερο παραβολή µε κύρια µνήµη: εκατοµµύρια θέσεων 2.3 Τελεστέοι του υλικού των υπολογιστών Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 9

Παράδειγµα τελεστέων καταχωρητών Κώδικας C: f = (g + h) - (i + j); οι f,, j στους $s0,, $s4 Μεταγλωττισµένος κώδικας MIPS: add $t0, $s1, $s2 add $t1, $s3, $s4 sub $s0, $t0, $t1 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 10

Τελεστέοι µνήµης Η κύρια µνήµη χρησιµοποιείται για σύνθετα δεδοµένα Πίνακες (arrays), δοµές (structures), δυναµικά δεδοµένα Για να εφαρµοστούν αριθµητικές λειτουργίες Φόρτωση (Load) τιµών από τη µνήµη σε καταχωρητές Αποθήκευση (Store) αποτελέσµατος από καταχωρητές στη µνήµη Η µνήµη διευθυνσιοδοτείται ανά byte (byte addressed) Κάθε διεύθυνση προσδιορίζει ένα byte των 8 bit Οι λέξεις είναι «ευθυγραµµισµένες» ( aligned ) στη µνήµη Η διεύθυνση πρέπει να είναι πολλαπλάσιο του 4 Ο MIPS είναι «Μεγάλου άκρου» ( Big Endian ) Το περισσότερο σηµαντικό byte βρίσκεται στη µικρότερη διεύθυνση µιας λέξης Σύγκριση µε «Μικρού άκρου» ( Little Endian : το λιγότερο σηµαντικό byte βρίσκεται στη µικρότερη διεύθυνση) Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 11

ιευθύνσεις byte και λέξεων Κάθε λέξη των 32 bit αποτελείται από 4 byte Κάθε byte έχει δική του διεύθυνση word 0 word 1 0xbf 0x1a 0x0c 0xde 0xaa 0x57 0xc5 0x4b byte address 0 byte address 1 byte address 2 byte address 3 byte address 4 byte address 5 byte address 6 byte address 7 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 12

Ευθυγράµµιση Ευθυγραµµισµένες (aligned) και µη ευθυγραµµισµένες (unaligned) λέξεις ευθυγραµµισµένη µη ευθυγραµµισµένη µη ευθυγραµµισµένη byte address 0 byte address 1 byte address 2 byte address 3 byte address 4 byte address 5 ευθυγραµµισµένη byte address 6 byte address 7 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 13

Big/Little Endian Πως αποθηκεύονται τα byte µιας λέξης 0x33221100 Οργάνωση big endian 0x33 0x22 0x11 0x00 b3 b2 b1 b0 Οργάνωση little endian b3 b2 0x33 0x22 byte address K (word address) byte address K+1 0x00 0x11 b0 b1 b1 0x11 byte address K+2 0x22 b2 b0 0x00 byte address K+3 0x33 b3 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 14

Παράδειγµα 1 µε τελεστέους µνήµης Κώδικας C: g = h + A[8]; g στον $s1, h στον $s2, η δνση βάσης του A στον $s3 Μεταγλωττισµένος κώδικας MIPS: Ο δείκτης 8 απαιτεί σχετική απόσταση (offset) ίση µε 32 (=8x4) 4 byte ανά λέξη lw $t0, 32($s3) # load word add $s1, $s2, $t0 σχετική απόσταση καταχωρητής βάσης Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 15

Εξήγηση παραδείγµατος νση βάσης (ή αρχική δνση) του Α είναι η δνση byte όπου βρίσκεται το στοιχείο Α[0] Επειδή είναι πίνακας λέξεων (32 bit) κάθε στοιχείο A[i] καταλαµβάνει 4 byte και αρχίζει από τη δνση «βάση»+4*i. «βάση» του Α ή δνση του Α[0] δνση του Α[1] δνση του Α[2] δνση του Α[7] δνση του Α[8].. 0 1 2 3 4 5 6 7 8 9 10 11 σχετική απόσταση (offset) 28 29 30 31 32 33 34 35 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 16

Παράδειγµα 2 µε τελεστέους µνήµης Κώδικας C: A[12] = h + A[8]; h στον $s2, διεύθυνση βάσης του A στον $s3 Μεταγλωττισµένος κώδικας MIPS: Ο δείκτης 8 απαιτεί σχετική απόσταση 32 lw $t0, 32($s3) # load word add $t0, $s2, $t0 sw $t0, 48($s3) # store word Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 17

Κανόνας για σχετ.απόσταση Η σχετική απόσταση (offset) σε µια εντολή lw ή µια εντολή sw για την προσπέλαση του στοιχείου a[i] ενός πίνακα υπολογίζεται (από τον προγραµµατιστή σε συµβολική γλώσσα ή τον µεταγλωττιστή) ως εξής: offset = i * (µέγεθος του a[i] σε byte) Πχ. αν ο πίνακας a περιέχει λέξεις (δηλαδή κάθε a[i] έχει µέγεθος 4 byte τότε το offset στην εντολή είναι ίσο µε 4*i lw $t0, offset($s3) Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 18

Καταχωρητές έναντι Μνήµης Οι καταχωρητές είναι ταχύτερα προσπελάσιµοι από τη µνήµη Οι λειτουργίες σε δεδοµένα µνήµης απαιτούν φορτώσεις και αποθηκεύσεις Εκτελούνται περισσότερες εντολές Ο µεταγλωττιστής πρέπει να χρησιµοποιεί τους καταχωρητές για µεταβλητές όσο περισσότερο γίνεται Να «διασκορπίζει» (spill) στη µνήµη µόνο τις λιγότερο συχνά χρησιµοποιούµενες µεταβλητές Η βελτιστοποίηση καταχωρητών είναι σηµαντική! Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 19

Άµεσοι τελεστέοι (immediate) Σταθερά δεδοµένα καθορίζονται σε µια εντολή addi $s3, $s3, 4 # add immediate Στο MIPS δεν υπάρχει εντολή άµεσης αφαίρεσης (subtract immediate) Απλώς χρησιµοποιείται µια αρνητική σταθερά addi $s2, $s1, 1 Σχεδιαστική αρχή 3: Κάνε τη συνηθισµένη περίπτωση γρήγορη Οι µικρές σταθερές είναι συνηθισµένες Ο άµεσος τελεστέος αποφεύγει µια εντολή φόρτωσης (load) Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 20

Η σταθερά Μηδέν Ο καταχωρητής 0 του MIPS ($zero) είναι η σταθερά 0 εν µπορεί να γραφεί µε άλλη τιµή Χρήσιµη για συνηθισµένες λειτουργίες Π.χ., µετακίνηση (move) µεταξύ καταχωρητών add $t2, $s1, $zero ισοδύναµη µε τη addi $t2, $s1, 0 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 21

Ακέραιοι δυαδικοί αριθµοί Ο MIPS αποθηκεύει και επεξεργάζεται απρόσηµους (unsigned) ( 0) και προσηµασµένους (signed) (θετικούς και αρνητικούς) ακεραίους των 32 bit 2.4 Προσηµασµένοι και απρόσηµοι αριθµοί Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 22

Απρόσηµοι δυαδικοί ακέραιοι Με δεδοµένο έναν αριθµό των n bit x = x + n 1 n 2 1 0 n 1 2 + x n 2 2 + L + x 1 2 x 0 2 Εύρος: 0 έως +2 n 1 Παράδειγµα 0000 0000 0000 0000 0000 0000 0000 1011 2 = 0 + + 1 2 3 + 0 2 2 +1 2 1 +1 2 0 = 0 + + 8 + 0 + 2 + 1 = 11 10 Με χρήση 32 bit 0 ως +4,294,967,295 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 23

Προσηµασµένοι αριθµοί ιαφορετικές αναπαραστάσεις Συµπλήρωµα ως προς 2 Two s complement Συµπλήρωµα ως προς 1 One s complement Πρόσηµο και µέγεθος Sign and magnitude Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 24

Συµπλήρωµα ως προς 2 Με δεδοµένο έναν αριθµό των n bit x = x + n 1 n 2 1 0 n 1 2 + x n 2 2 + L + x 1 2 x 0 2 Εύρος: 2 n 1 ως +2 n 1 1 Παράδειγµα 1111 1111 1111 1111 1111 1111 1111 1100 2 = 1 2 31 + 1 2 30 + + 1 2 2 +0 2 1 +0 2 0 = 2,147,483,648 + 2,147,483,644 = 4 10 Με χρήση 32 bit 2,147,483,648 ως +2,147,483,647 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 25

Συµπλήρωµα ως προς 2 Το bit 31 είναι το bit προσήµου 1 για αρνητικούς αριθµούς 0 για µη αρνητικούς αριθµούς (θετικούς και µηδέν) Το ( 2 n 1 ) δεν µπορεί να παρασταθεί Οι µη αρνητικοί αριθµοί έχουν την ίδια απρόσηµη και προσηµασµένη σε συµπλήρωµα ως προς 2 αναπαράσταση Μερικοί συγκεκριµένοι αριθµοί 0: 0000 0000 0000 1: 1111 1111 1111 Ο πιο αρνητικός: 1000 0000 0000 Ο πιο θετικός: 0111 1111 1111 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 26

Προσηµασµένη άρνηση Συµπλήρωµα και πρόσθεση του 1 «Συµπλήρωµα» σηµαίνει 1 0, 0 1 x + x = 1111...1112 x 2 = 1 x + 1 = x Παράδειγµα: βρείτε τον αντίθετο (άρνηση) του +2 +2 = 0000 0000 0010 2 2 = 1111 1111 1101 2 + 1 = 1111 1111 1110 2 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 27

Επέκταση προσήµου Αναπαράσταση ενός αριθµού µε περισσότερα 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 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 28

Αναπαράσταση εντολών Οι εντολές κωδικοποιούνται στο δυαδικό Ονοµάζεται κώδικας µηχανής (machine code) Εντολές MIPS Κωδικοποιούνται ως λέξεις εντολής των 32 bit Μικρός αριθµός µορφών (formats) για τον κωδικό λειτουργίας (opcode), τους αριθµούς καταχωρητών, κλπ. Κανονικότητα! Αριθµοί καταχωρητών $t0 $t7 είναι οι καταχωρητές 8 15 $t8 $t9 είναι οι καταχωρητές 24 25 $s0 $s7 είναι οι καταχωρητές 16 23 2.5 Αναπαράσταση εντολών στον υπολογιστή Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 29

Μορφές εντολών MIPS Ο MIPS έχει µόνο 3 µορφές εντολών (instruction formats) Μορφή-R (R-format) Από το Register Μορφή-Ι (I-format) Από το Immediate Μορφή-J (J-format) Από το Jump Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 30

Εντολές µορφής R του MIPS op rs rt rd shamt funct 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit Πεδία εντολής op: κωδικός λειτουργίας (opcode) rs: αριθµός πρώτου καταχωρητή προέλευσης rt: αριθµός δεύτερου καταχωρητή προέλευσης rd: αριθµός καταχωρητή προορισµού shamt: ποσότητα ολίσθησης (00000 για τώρα) funct: κωδικός συνάρτησης (επεκτείνει τον κωδικό λειτουργίας) Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 31

Παράδειγµα µορφής R op rs rt rd shamt funct 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit add $t0, $s1, $s2 special $s1 $s2 $t0 0 add 0 17 18 8 0 32 000000 10001 10010 01000 00000 100000 00000010001100100100000000100000 2 = 02324020 16 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 32

εκαεξαδικό Βάση 16 Συµπαγής αναπαράσταση σειρών bit 4 bit ανά δεκαεξαδικό ψηφίο 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 1110 1100 1010 1000 0110 0100 0010 0000 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 33

Εντολές µορφής I του MIPS op rs rt σταθερά ή διεύθυνση 6 bit 5 bit 5 bit 16 bit Άµεσες αριθµητικές εντολές και εντολές load/store rt: αριθµός καταχωρητή προορισµού ή προέλευσης Σταθερά: 2 15 έως +2 15 1 ιεύθυνση: σχετική απόσταση (offset) που προστίθεται στη διεύθυνση βάσης που περιέχει ο rs Σχεδιαστική αρχή 4: Η καλή σχεδίαση απαιτεί καλούς συµβιβασµούς Οι διαφορετικές µορφές περιπλέκουν την αποκωδικοποίηση, αλλά επιτρέπουν παντού εντολές των 32 bit ιατήρηση όσο το δυνατόν απλούστερων µορφών Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 34

Υπολογιστές Αποθηκευµένου Προγράµµατος ΓΕΝΙΚΗ εικόνα Οι εντολές αναπαρίστανται σε δυαδικό, όπως τα δεδοµένα Οι εντολές και τα δεδοµένα αποθηκεύονται στη µνήµη Προγράµµατα µπορούν να επενεργούν σε προγράµµατα π.χ, compilers, linkers, Η δυαδική συµβατότητα επιτρέπει τα µεταγλωττισµένα προγράµµατα να εκτελούνται σε διαφορετικούς υπολογιστές Καθιερωµένες ISA Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 35

Λογικές λειτουργίες Εντολές για χειρισµούς ανά bit Λειτουργία C Java MIPS Shift left << << sll Shift right >> >>> srl Bitwise AND & & and, andi Bitwise OR or, ori Bitwise NOT ~ ~ nor 2.6 Λογικές λειτουργίες Χρήσιµες για εξαγωγή και εισαγωγή οµάδων bit σε µια λέξη Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 36

Λειτουργίες ολίσθησης op rs rt rd shamt funct 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit shamt: πόσες θέσεις ολίσθηση Shift left logical (αριστερή λογική ολίσθηση) Αριστερή ολίσθηση και συµπλήρωση µε bit 0 sll κατά i bit πολλαπλασιάζει µε 2 i Shift right logical (δεξιά λογική ολίσθηση) εξιά ολίσθηση και συµπλήρωση µε bit 0 srl κατά i bit διαιρεί µε 2 i (απρόσηµοι µόνο) Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 37

Λειτουργίες AND Χρήσιµες για την «απόκρυψη» (masking) bit σε µια λέξη Επιλογή κάποιων bit, µηδενισµών των άλλων and $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 0000 1100 0000 0000 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 38

Λειτουργίες OR Χρήσιµες για να συµπεριληφθούν κάποια bit σε µια λέξη Κάποια bit τίθενται στο 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 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 39

Λειτουργίες NOT Χρήσιµες για την αντιστροφή bit σε µια λέξη Αλλαγή του 0 σε 1, και του 1 σε 0 Ο MIPS δεν διαθέτει εντολή NOT Ο MIPS διαθέτει εντολή NOR των 3 τελεστέων a NOR b == NOT ( a OR b ) nor $t0, $t1, $zero Καταχωρητής 0: πάντα ίσος µε µηδέν $t1 $t0 0000 0000 0000 0000 0011 1100 0000 0000 1111 1111 1111 1111 1100 0011 1111 1111 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 40

Λειτουργίες συνθήκης ιακλάδωση (branch) σε µια εντολή µε ετικέτα αν µια συνθήκη είναι αληθής ιαφορετικά, συνέχισε ακολουθιακά beq rs, rt, L1 αν (rs == rt) διακλάδωση στην εντολή µε ετικέτα L1 bne rs, rt, L1 αν (rs!= rt) διακλάδωση στην εντολή µε ετικέτα L1 j L1 άλµα χωρίς συνθήκη στην εντολή µε ετικέτα L1 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 41 2.7 Εντολές λήψης αποφάσεων

Μεταγλώττιση εντολών if Κώδικας C: if (i==j) f = g+h; else f = g-h; 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: ο συµβολοµεταφραστής υπολογίζει τις διευθύνσεις Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 42

Μεταγλώττιση εντολών Loop Κώδικας C: while (save[i] == k) i += 1; i στον $s3, k στον $s5, η δ/νση βάσης του save στον $s6 Μεταγλωττισµένος κώδικας MIPS: Loop: sll $t1, $s3, 2 add $t1, $t1, $s6 lw $t0, 0($t1) bne $t0, $s5, Exit addi $s3, $s3, 1 j Loop Exit: Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 43

Βασικά µπλοκ Ένα βασικό µπλοκ (basic block) είναι µια ακολουθία εντολών χωρίς ιακλαδώσεις (εκτός από το τέλος) Προορισµούς διακλάδωσης (εκτός από την αρχή) Ένας µεταγλωττιστής προσδιορίζει βασικά µπλοκ για βελτιστοποίηση Ένας προχωρηµένος επεξεργαστής µπορεί να επιταχύνει την εκτέλεση των βασικών µπλοκ Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 44

Και άλλες λειτουργίες συνθήκης Set-on-less than (slt) Το αποτέλεσµα παίρνει τη τιµή 1 αν µια συνθήκη είναι αληθής ιαφορετικά, παίρνει τη τιµή 0 slt rd, rs, rt αν (rs < rt) rd = 1 διαφορετικά rd = 0 slti rt, rs, constant αν (rs < constant) rt = 1 διαφορετικά rt = 0 Χρήση σε συνδυασµό µε τις beq, bne slt $t0, $s1, $s2 # if ($s1 < $s2) bne $t0, $zero, L # branch to L Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 45

Σχεδίαση εντολών διακλάδωσης Γιατί όχι blt, bge, κλπ.; Το υλικό για τις <,, είναι πιο αργό από αυτό για τις =, Ο συνδυασµός συνθηκών για µια διακλάδωση περιλαµβάνει περισσότερη δουλειά ανά εντολή, και απαιτεί πιο αργό ρολόι Επιβαρύνονται όλες οι εντολές! Οι beq καιbne είναι η συνήθης περίπτωση Καλός σχεδιαστικός συµβιβασµός Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 46

Υλοποίηση άλλων συνθηκών Πως υλοποιούµε την «εντολή» bge bge $s1, $s2, L Με συνδυασµό των slt και beq/bne slt $t0, $s1, $s2 beq $t0, $zero, L εν είναι πραγµατική εντολή του MIPS, αλλά οι assemblers (όπως ο SPIM) έχουν την «ψευδοεντολή» bge Θα ξαναµιλήσουµε για τις ψευδοεντολές (pseudo-instructions) αργότερα Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 47

Προσηµασµένες και απρόσηµες Προσηµασµένη σύγκριση: slt, slti Απρόσηµη σύγκριση: sltu, sltui Παράδειγµα $s0 = 1111 1111 1111 1111 1111 1111 1111 1111 $s1 = 0000 0000 0000 0000 0000 0000 0000 0001 Ποιος είναι µεγαλύτερος; Εξαρτάται! slt $t0, $s0, $s1 # προσηµασµένη 1 < +1 $t0 = 1 sltu $t0, $s0, $s1 # απρόσηµη +4,294,967,295 > +1 $t0 = 0 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 48

Κλήση διαδικασίας Απαιτούµενα βήµατα 1. Τοποθέτηση παραµέτρων σε καταχωρητές 2. Μεταφορά ελέγχου στη διαδικασία 3. Απόκτηση χώρου αποθήκευσης για τη διαδικασία 4. Εκτέλεση λειτουργιών της διαδικασίας 5. Τοποθέτηση αποτελέσµατος σε καταχωρητή για τον καλούντα 6. Επιστροφή στη θέση της κλήσης 2.8 Υποστήριξη διαδικασιών στο υλικό του υπολογιστή Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 49

Χρήση καταχωρητών $a0 $a3: ορίσµατα (καταχωρητές 4 7) $v0, $v1: τιµές αποτελέσµατος (καταχωρητές 2 και 3) $t0 $t9: προσωρινοί (temporary) Μπορούν να γραφούν µε νέες τιµές από τον καλούµενο $s0 $s7: αποθηκευµένοι (saved) Πρέπει να αποθηκευτούν/επαναφερθούν από τον καλούµενο $gp: καθολικός δείκτης (global pointer) για στατικά δεδοµένα (καταχ. 28) $sp: δείκτης στοίβας (stack pointer) (καταχ.29) $fp: δείκτης πλαισίου (frame pointer) (καταχ.30) $ra: δνση επιστροφής (return address) (καταχ. 31) Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 50

Εντολές κλήσης διαδικασίας Κλήση διαδικασίας: jump and link jal ProcedureLabel Η δ/νση της επόµενης εντολής γράφεται στον $ra Άλµα στη διεύθυνση προορισµού Επιστροφή από διαδικασία: jump register jr $ra Αντιγράφει τον $ra στο µετρητή προγράµµατος (program counter) Μπορεί επίσης να χρησιµοποιηθεί για υπολογισµένα άλµατα π.χ., για εντολές case/switch Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 51

Παράδειγµα διαδικασίας φύλλου Φύλλο (leaf): διαδικασία που δεν καλεί άλλη Κώδικας C: int leaf_example (int g, h, i, j) { int f; f = (g + h) - (i + j); return f; } Ορίσµατα g,, j στους $a0,, $a3 f στον $s0 (συνεπώς πρέπει να αποθηκευθεί ο $s0 στη στοίβα) Αποτέλεσµα στον $v0 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 52

Παράδειγµα διαδικασίας φύλλου Πρέπει να τοποθετηθούν στους $a0, $a1, $a2, $a3 οι τιµές των παραµέτρων κλήσης π.χ. (το πρόγραµµα που καλεί τη leaf_example έχει στους $s0, $s1, $s2, $s3 τις µεταβλητές που θα δώσουν τιµές στα ορίσµατα g, h, i, j. add $a0,$s0,$zero add $a1,$s1,$zero add $a2,$s2,$zero add $a3,$s3,$zero Κώδικας MIPS για την κλήση της: jal leaf_example Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 53

Παράδειγµα διαδικασίας φύλλου Κώδικας MIPS: leaf_example: addi $sp sp, $sp sp, -4 sw $s0, 0($sp sp) add $t0, $a0, $a1 add $t1, $a2, $a3 sub $s0, $t0, $t1 add $v0, $s0, $zero lw $s0, 0($sp sp) addi $sp sp, $sp sp, 4 jr $ra Αποθήκευση $s0 στη στοίβα Σώµα διαδικασίας Αποτέλεσµα Επαναφορά του $s0 Επιστροφή Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 54

ιαδικασίες µη φύλλα ιαδικασίες που καλούν άλλες διαδικασίες Για ένθετη(nested) κλήση, ο καλών πρέπει να αποθηκεύσει στη στοίβα: Τη διεύθυνση επιστροφής του Όποια ορίσµατα και προσωρινές τιµές χρειάζονται µετά την κλήση Επαναφορά από τη στοίβα µετά την κλήση Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 55

Παράδειγµα διαδικασίας µη φύλλου Κώδικας C (παραγοντικό µε αναδροµή/recursion): int fact (int n) { if (n < 1) return 1; else return n * fact(n - 1); } Όρισµα n στον $a0 Αποτέλεσµα στον $v0 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 56

Παράδειγµα διαδικασίας µη φύλλου Κώδικας MIPS: fact: addi $sp, $sp, -8 # adjust stack for 2 items sw $ra, 4($sp) # save return address sw $a0, 0($sp) # save argument slti $t0, $a0, 1 # test for n < 1 beq $t0, $zero, L1 addi $v0, $zero, 1 # if so, result is 1 addi $sp, $sp, 8 # pop 2 items from stack jr $ra # and return L1: addi $a0, $a0, -1 # else decrement n jal fact # recursive call lw $a0, 0($sp) # restore original n lw $ra, 4($sp) # and return address addi $sp, $sp, 8 # pop 2 items from stack mul $v0, $a0, $v0 # multiply to get result jr $ra # and return Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 57

Τοπικά δεδοµένα στη στοίβα Τοπικά δεδοµένα δεσµεύονται από τον καλούµενο π.χ., οι αυτόµατες µεταβλητές της C Πλαίσιο διαδικασίας (procedure frame) ή εγγραφή ενεργοποίησης (activation record) Χρησιµοποιείται από µερικούς µεταγλωττιστές για το χειρισµό της αποθήκευσης της στοίβας Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 58

ιάταξη της µνήµης Κείµενο (Text): κώδικας του προγράµµατος Στατικά δεδοµένα (Static data): καθολικές µεταβλητές π.χ., στατικές µεταβλητές της C, πίνακες σταθερών (constant arrays) και συµβολοσειρές (strings) Ο $gp παίρνει αρχική τιµή που επιτρέπει ±σχετικές αποστάσεις µέσα στο τµήµα αυτό υναµικά δεδοµένα: σωρός (heap) π.χ., malloc στη C, new στη Java Στοίβα (stack): αυτόµατη αποθήκευση Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 59

Αναδροµή ουράς Μερικές αναδροµικές διαδικασίες σε C µπορούν να υλοποιηθούν µε επανάληψη ενός βρόχου και όχι µε αναδροµή Ταχύτερες: αποφυγή των επιβαρύνσεων της αναδροµής και τις πολλαπλές κλήσεις διαδικασίας πχ. int sum (int n, int acc) { if (n > 0) return sum(n 1, acc + n); else return acc; } Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 60

Αναδροµή ουράς (συνέχεια) Η κλήση sum(3,0) θα καλέσει διαδοχικά τις sum(2,3), sum(1,5), και sum(0,6) µεγάλη επιβάρυνση, ονοµάζεται κλήση ουράς (tail call) και αναδροµή ουράς (tail recursion) Υλοποίηση µε βρόχο (το n στον $α0, και το acc στον $a1) sum: slti $a0,1 # έλεγχο αν n <= 0 beq$a0, $zero, sum_exit # µετάβαση sum_exit # αν n <= 0 add$ a1, $a1, $a0 # πρόσθεση n στο acc addi $a0, $a0, 1 # αφαίρεση 1 από n j sum # µετάβαση στη sum sum_exit: add$v0, $a1, $zero # επιστροφή τιµή acc jr $ra # επιστροφή σε καλούντα Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 61

εδοµένα χαρακτήρων Σύνολα χαρακτήρων σε κωδικοποίηση byte ASCII: 128 χαρακτήρες 95 γραφικής αναπαράστασης, 33 ελέγχου Latin-1: 256 χαρακτήρες ASCII, +96 επιπλέον χαρακτήρες γραφικής αναπαράστασης Unicode: σύνολο χαρακτήρων 32-bit Χρήστη σε Java, και σε wide characters της C++, Τα περισσότερα αλφάβητα του κόσµου, και σύµβολα UTF-8, UTF-16: κωδικοποιήσεις µεταβλητού µήκους 2.9 Επικοινωνία µε τους ανθρώπους Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 62

Λειτουργίες Byte/Ηµιλέξης Θα µπορούσαν να χρησιµοποιήσουν λειτουργίες ανά bit MIPS byte/halfword load/store Επεξεργασία συµβολοσειρών (strings): συνήθης περίπτωση lb rt, offset(rs) lh rt, offset(rs) Επέκταση προσήµου στα 32 bit στον rt lbu rt, offset(rs) lhu rt, offset(rs) Επέκταση µηδενικού στα 32 bit στον rt sb rt, offset(rs) sh rt, offset(rs) Αποθήκευση (store) µόνο του δεξιότερου byte/ηµιλέξης Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 63

Παράδειγµα αντιγραφής string Κώδικας C (απλοϊκός): Συµβολοσειρά (string) που τερµατίζεται µε µηδενικό χαρακτήρα (null char) void strcpy (char x[], char y[]) { int i; i = 0; while ((x[i]=y[ ]=y[i])!=' ])!='\0') i += 1; } ιευθύνσεις των x, y στον $a0, $a1 Το i στον $s0 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 64

Παράδειγµα αντιγραφής string Κώδικας MIPS: strcpy: addi $sp, $sp, -4 # adjust stack for 1 item sw $s0, 0($sp) # save $s0 add $s0, $zero, $zero # i = 0 L1: add $t1, $s0, $a1 # addr of y[i] in $t1 lbu $t2, 0($t1) # $t2 = y[i] add $t3, $s0, $a0 # addr of x[i] in $t3 sb $t2, 0($t3) # x[i] = y[i] beq $t2, $zero, L2 # exit loop if y[i] == 0 addi $s0, $s0, 1 # i = i + 1 j L1 # next iteration of loop L2: lw $s0, 0($sp) # restore saved $s0 addi $sp, $sp, 4 # pop 1 item from stack jr $ra # and return Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 65

Σταθερές των 32 bit Οι περισσότερες σταθερές είναι µικρές Ένα άµεσο πεδίο των 16 bit είναι αρκετό Για τις περιστασιακές σταθερές των 32 bit lui rt, constant lui $s0, 61 lui load upper immediate Αντιγράφει τη σταθερά των 16 bit στα 16 αριστερά (ψηλά/upper) bit του rt Μηδενίζει τα δεξιά 16 bit του rt ori $s0, $s0, 2304 0000 0000 0111 1101 0000 0000 0000 0000 0000 0000 0111 1101 0000 1001 0000 0000 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 66 2.10 ιευθυνσιοδότηση MIPS για Άµεσα και νσεις των 32-Bit

ιευθυνσιοδότηση διακλαδώσεων Οι εντολές διακλάδωσης (branch) καθορίζουν opcode, δύο καταχωρητές, δ/νση προορισµού Οι περισσότεροι προορισµοί διακλάδωσης είναι κοντά στην εντολή διακλάδωσης Προς τα εµπρός και προς τα πίσω op rs rt σταθερά ή διεύθυνση 6 bit 5 bit 5 bit 16 bit ιευθυνσιοδότηση σχετική ως προς PC (PC-relative addressing) /νση προορισµού = PC + offset 4 Ο PC είναι ήδη αυξηµένος κατά 4 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 67

ιευθυνσιοδότηση άλµατος Οι προορισµοί άλµατος (για τις εντολές j και jal) µπορεί να βρίσκονται οπουδήποτε στο τµήµα κειµένου (κώδικα) Κωδικοποίηση της πλήρους δ/νσης µέσα στην εντολή op address 6 bit 26 bit Ψευδο-άµεση (Pseudo-Direct) διευθυνσιοδότηση άλµατος /νση προορισµού = PC 31 28 : (address 4) Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 68

Παράδειγµα δ/νσης προορισµού Κώδικας βρόχου από προηγούµενο παράδειγµα Υποθέστε ότι το Loop είναι στη θέση 80000 Loop: sll $t1, $s3, 2 80000 0 0 19 9 4 0 add $t1, $t1, $s6 80004 0 9 22 9 0 32 lw $t0, 0($t1) 80008 35 9 8 0 bne $t0, $s5, Exit 80012 5 8 21 2 addi $s3, $s3, 1 80016 8 19 19 1 j Loop 80020 2 20000 Exit: 80024 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 69

ιακλάδωση πολύ µακριά Αν ο προορισµός της διακλάδωσης είναι πολύ µακριά για να κωδικοποιηθεί στα 16 του πεδίου σχετικής απόστασης (offset), ο συµβολοµεταφραστής ξαναγράφει τον κώδικα Παράδειγµα beq $s0,$s1, L1 bne $s0,$s1, L2 j L1 L2: Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 70

Περίληψη τρόπων διευθ/σης Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 71

Αποκωδ/ση κώδικα µηχανής Ποια είναι η συµβολική εντολή που αντιστοιχεί στη εντολή µηχανής00af8020 hex 1 ο βήµα: µετατροπή στο δυαδικό για να βρούµε το opcode 0000 0000 1010 1111 1000 0000 0010 0000 31 28 26 5 2 0 Συµβουλευόµαστε τον επόµενο πίνακα Που βρίσκεται το opcode = 000000; Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 72

Αποκωδικοποίησης συνέχεια 28-26 31-29 op(31:26) 0(000) 1(001) 2(010) 3(011) 4(100) 5(101) 6(110) 7(111) 0(000) µορφή R Bltz/gez jump jump & link branch eq branch ne blez bgtz 1(001) add addiu set less set less than andi ori xori load upper immediate than imm. imm. unsigned immediate 2(010) TLB FlPt 3(011) 4(100) load byte load half 5(101) store byte store half 6(110) load lwc1 linked word 7(111) store swc1 cond. word lwl load word load byte unsigned load half unsigned lwr swl store word swr Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 73

Αποκωδικοποίησης συνέχεια opcode = 000000, άρα εντολή τύπου-r Γνωρίζουµε όλα τα πεδία (του τύπου-r) 000000 00101 01111 10000 00000 100000 opcode rs rt rd shamt funct Με βάση το πεδίο funct = 100000 βρίσκουµε ποια εντολή του τύπου-r είναι Συµβουλευόµαστε τον επόµενο πίνακα Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 74

Αποκωδικοποίησης συνέχεια 2-0 5-3 shift left 0(000) logical 1(001) jump register op(31:26)=000000 (µορφή R), funct(5:0) 0(000) 1(001) 2(010) 3(011) 4(100) 5(101) 6(110) 7(111) shift right sra sllv srlv srav logical jalr syscall break 2(010) mfhi mthi mflo mtlo 3(011) mult multu div divu add addu subtract subu and or xor not or 4(100) (nor) 5(101) set l.t. set l.t. unsigned 6(110) 7(111) Άρα είναι η εντολή add Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 75

Αποκωδικοποίησης συνέχεια Βρίσκουµε και τους καταχωρητές rs = 5 ($a1) rt = 15 ($t7) rd = 16 ($s0) Το πεδίο shamt είναι 00000 (δε χρησιµοποιείται στην εντολή add) Τελικά η εντολή είναι η: add $s0, $a1,$t7 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 76

Συγχρονισµός ύο επεξεργαστές µοιράζονται µια περιοχή µνήµης Ο P1 γράφει, µετά ο P2 διαβάζει Συναγωνισµός δεδοµένων (data race) αν οι P1 και P2 δε συγχρονιστούν Το αποτέλεσµα εξαρτάται από τη σειρά των προσπελάσεων Απαιτείται υποστήριξη από το υλικό Αδιαίρετη (ατοµική) λειτουργία ανάγνωσης/εγγραφής µνήµης Καµία άλλη προσπέλαση στη θέση αυτή δεν επιτρέπεται ανάµεσα στην ανάγνωση και την εγγραφή Μπορεί να είναι µία εντολή Π.χ. αδιαίρετη εναλλαγή καταχωρητή µνήµης ή ένα αδιαίρετο ζεύγος εντολών 2.11 Παραλληλία και εντολές: συγχρονισµός Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 77

Συγχρονισµός στον MIPS Load linked: ll rt, offset(rs) Store conditional: sc rt, offset(rs) Το ζεύγος εντολών ll/sc επιτυγχάνει αν η θέση (µνήµης) δεν έχει αλλάξει µεταξύ των ll και sc Επιστρέφει 1 στον rt Αποτυγχάνει αν η θέση µνήµης έχει αλλάξει Επιστρέφει 0 στον rt Παράδειγµα: αδιαίρετη εναλλαγή atomic swap (για test/set µιας µεταβλητής κλειδώµατος) try: add $t0,$zero,$s4 ;copy exchange value ll $t1,0($s1) ;load linked sc $t0,0($s1) ;store conditional beq $t0,$zero,try ;branch store fails add $s4,$zero,$t1 ;put load value in $s4 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 78

Μετάφραση και εκκίνηση Πολλοί µεταγλωττιστές παράγουν απευθείας αντικειµενικές µονάδες (object modules) Στατική σύνδεση (static linking) 2.12 Μετάφραση και εκκίνηση ενός προγράµµατος Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 79

Ψευδοεντολές συµβολοµεταφραστή Οι περισσότερες εντολές του συµβολοµεταφραστή αναπαριστούν εντολές µηχανής µία προς µία Ψευδοεντολές (pseudoinstructions): αποκυήµατα της φαντασίας του συµβολοµεταφραστή! move $t0, $t1 add $t0, $zero, $t1 blt $t0, $t1, L slt $at, $t0, $t1 bne $at, $zero, L $at (ο καταχωρητής 1): assembler temporary Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 80

Παραγωγή αντικειµενικής µονάδας Ο συµβολοµεταφραστής (ή ο µεταγλωττιστής) µεταφράζει το πρόγραµµα σε εντολές µηχανής Παρέχει πληροφορία για την κατασκευή ενός πλήρους προγράµµατος από τα µέρη του Κεφαλίδα (header): περιγράφει τα περιεχόµενα της αντικειµενικής µονάδας Τµήµα κειµένου (text segment): µεταφρασµένες εντολές Τµήµα στατικών δεδοµένων (static data segment): δεδοµένα που κατανέµονται για όλη τη διάρκεια ζωής του προγράµµατος Πληροφορία επανατοποθέτησης (relocation info): για περιεχόµενα που εξαρτώνται από την απόλυτη θέση του φορτωµένου προγράµµατος Πίνακας συµβόλων (symbol table): καθολικοί ορισµοί και εξωτερικές αναφορές Πληροφορίες αποσφαλµάτωσης (debug info): για συσχέτιση µε τον πηγαίο κώδικα Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 81

Σύνδεση αντικειµενικών µονάδων Παράγει µια εκτελέσιµη εικόνα (executable image) 1.Ενώνει τα τµήµατα 2.Επιλύει τις ετικέτες (προσδιορίζει τις διευθύνσεις τους) 3. ιορθώνει (patching) τις αναφορές που εξαρτώνται από τη θέση και τις εξωτερικές αναφορές Θα µπορούσε να αφήσει τις εξαρτήσεις θέσεων να ρυθµιστούν από ένα φορτωτή επανατοποθέτησης (relocating loader) Αλλά µε την εικονική µνήµη, αυτό δεν είναι απαραίτητο Το πρόγραµµα µπορεί να φορτωθεί σε απόλυτη θέση στο χώρο των εικονικών διευθύνσεων Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 82

Παράδειγµα σύνδεσης ιαδικασία Α (αντικειµενικό αρχείο) Επικεφαλίδα αντικειµενικού αρχείου Όνοµα ιαδικασία Α Μέγεθος κειµένου 100 hex Μέγεθος δεδοµένων 20 hex Τµήµα κειµένου ιεύθυνση Εντολή 0 lw $a0, 0($gp) 4 jal 0... Τµήµα δεδοµένων 0 (X)... Πληροφορίες επανατοποθέτησης ιεύθυνση Τύπος εντολής Εξάρτηση 0 lw X 4 jal B Πίνακας συµβόλων Ετικέτα ιεύθυνση X B Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 83

Παράδειγµα σύνδεσης (συν.) ιαδικασία Β (αντικειµενικό αρχείο) Επικεφαλίδα αντικειµενικού αρχείου Όνοµα ιαδικασία Β Μέγεθος κειµένου 200 hex Μέγεθος δεδοµένων 30 hex ιεύθυνση Εντολή 0 sw $a1, 0($gp) 4 jal 0... Τµήµα δεδοµένων 0 (Υ)... Πληροφορίες επανατοποθέτησης ιεύθυνση Τύπος εντολής Εξάρτηση 0 sw Y 4 jal A Πίνακας συµβόλων Ετικέτα ιεύθυνση Y A Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 84

Σύνδεση σε εκτελέσιµο Κείµενο 400000 hex δεδοµένα 10000000 hex Επικεφαλίδα εκτελέσιµου αρχείου Μέγεθος κειµένου Μέγεθος δεδοµένων 300 hex 50 hex Τµήµα κειµένου ιεύθυνση Εντολή 0040 0000hex lw $a0, 8000 hex ($gp) 0040 0004 hex jal 40 0100 hex... 0040 0100 hex sw $a1, 8020 hex ($gp) 0040 0104 hex jal 40 0000 hex... Τµήµα δεδοµένων ιεύθυνση 1000 0000 hex (X)...... 1000 0020 hex (Υ)...... Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 85

Φόρτωση προγράµµατος Φόρτωση από το αρχείο εικόνας (image file) του δίσκου στη µνήµη για να εκτελεστεί 1.Ανάγνωση της κεφαλίδας (header) για να καθοριστούν τα µεγέθη των τµηµάτων 2. ηµιουργία χώρου εικονικών διευθύνσεων 3.Αντιγραφή του κώδικα (text) και των δεδοµένων, που έχουν πάρει αρχικές τιµές, στη µνήµη Ή ενεργοποίηση των καταχωρίσεων του πίνακα σελίδων ώστε να δηµιουργηθούν σφάλµατα σελίδας και να µεταφερθούν στη µνήµη 4.Τοποθέτηση των ορισµάτων στη στοίβα 5.Αρχικές τιµές καταχωρητών (και οι $sp, $fp, $gp) 6.Άλµα στη ρουτίνα εκκίνησης Αντιγράφει τα ορίσµατα στους $a0, και καλεί τη main Όταν η main επιστρέψει, εκτελείται η κλήση συστήµατος exit Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 86

υναµική σύνδεση Η σύνδεση και φόρτωση των διαδικασιών βιβλιοθήκης γίνεται µόνο όταν καλούνται Απαιτείται ο κώδικας της διαδικασίας να είναι επανατοποθετήσιµος (relocatable) Αποφεύγει τη διόγκωση της εικόνας του προγράµµατος που προκαλεί η στατική σύνδεση όλων των βιβλιοθηκών που αναφέρονται Αυτόµατα λαµβάνει υπόψη τις νέες εκδόσεις βιβλιοθηκών Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 87

«Ράθυµη» (lazy) σύνδεση Πίνακας εµµεσότητας (indirection table) Στέλεχος (stub): φορτώνει την ταυτότητα (ID) της ρουτίνας, Άλµα στο πρόγραµµα σύνδεσης και φόρτωσης Κώδικας προγράµµατος σύνδεσης και φόρτωσης υναµικά χαρτογραφηµένος κώδικας Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 88

Εκκίνηση εφαρµογών Java Απλό, φορητό σύνολο εντολών της JVM Μεταγλωττίζει τα bytecode των «καυτών» µεθόδων σε εγγενή κώδικα της µηχανής υπηρεσίας (host) ιερµηνεύει τα bytecode Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 89

Παράδειγµα ταξινόµησης σε C είχνει τη χρήση των εντολών συµβολικής γλώσσας σε µια συνάρτηση ταξινόµησης φυσαλίδας (bubble sort) της C ιαδικασία swap (φύλλο) void swap(int v[], int k) { int temp; temp = v[k]; v[k] = v[k+1]; v[k+1] = temp; } Το v στον $a0, το k στον $a1, το temp στον $t0 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 90 2.13 Ένα παράδειγµα ταξινόµησης στη C που τα συνδυάζει όλα

Η διαδικασία Swap swap: sll $t1, $a1, 2 # $t1 = k * 4 add $t1, $a0, $t1 # $t1 = v+(k*4) # (address of v[k]) lw $t0, 0($t1) # $t0 (temp) = v[k] lw $t2, 4($t1) # $t2 = v[k+1] sw $t2, 0($t1) # v[k] = $t2 (v[k+1]) sw $t0, 4($t1) # v[k+1] = $t0 (temp) jr $ra # return to calling routine Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 91

Η διαδικασία Sort σε C Μη φύλλο (καλεί τη swap) void sort (int v[], int n) { int i, j; for (i = 0; i < n; i += 1) { for (j = i 1; j >= 0 && v[j] > v[j + 1]; j -= 1) { swap(v,j); } } } Το v στον $a0, το k στον $a1, το i στον $s0, το j στον $s1 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 92

Το σώµα της διαδικασίας move $s2, $a0 # save $a0 into $s2 move $s3, $a1 # save $a1 into $s3 move $s0, $zero # i = 0 for1tst: slt $t0, $s0, $s3 # $t0 = 0 if $s0 $s3 (i n) beq $t0, $zero, exit1 # go to exit1 if $s0 $s3 (i n) addi $s1, $s0, 1 # j = i 1 for2tst: slti $t0, $s1, 0 # $t0 = 1 if $s1 < 0 (j < 0) bne $t0, $zero, exit2 # go to exit2 if $s1 < 0 (j < 0) sll $t1, $s1, 2 # $t1 = j * 4 add $t2, $s2, $t1 # $t2 = v + (j * 4) lw $t3, 0($t2) # $t3 = v[j] lw $t4, 4($t2) # $t4 = v[j + 1] slt $t0, $t4, $t3 # $t0 = 0 if $t4 $t3 beq $t0, $zero, exit2 # go to exit2 if $t4 $t3 move $a0, $s2 # 1st param of swap is v (old $a0) move $a1, $s1 # 2nd param of swap is j jal swap # call swap procedure addi $s1, $s1, 1 # j = 1 j for2tst # jump to test of inner loop exit2: addi $s0, $s0, 1 # i += 1 j for1tst # jump to test of outer loop Μεταφορά παραµέτρων Εξωτερικός βρόχος Εσωτερικός βρόχος Μεταβίβαση παραµέτρων και κλήση Εσωτερικός βρόχος Εξωτερικός βρόχος Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 93

Η πλήρης διαδικασία sort: addi $sp,$sp, 20 # make room on stack for 5 registers sw $ra, 16($sp) # save $ra on stack sw $s3,12($sp) # save $s3 on stack sw $s2, 8($sp) # save $s2 on stack sw $s1, 4($sp) # save $s1 on stack sw $s0, 0($sp) # save $s0 on stack # procedure body exit1: lw $s0, 0($sp) # restore $s0 from stack lw $s1, 4($sp) # restore $s1 from stack lw $s2, 8($sp) # restore $s2 from stack lw $s3,12($sp) # restore $s3 from stack lw $ra,16($sp) # restore $ra from stack addi $sp,$sp, 20 # restore stack pointer jr $ra # return to calling routine Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 94

Επίδραση βελτιστοποιήσεων µεταγλωττιστή 3 2,5 2 1,5 1 0,5 0 Μεταγλώττιση Bubble Sort µε τον gcc σε Pentium 4 µε Linux Σχετική απόδοση 140000 120000 100000 80000 60000 40000 20000 0 καµία O1 O2 O3 Πλήθος εντολών καµία O1 O2 O3 180000 160000 140000 120000 100000 80000 60000 40000 20000 0 Κύκλοι ρολογιού καµία O1 O2 O3 2 1,5 1 0,5 0 CPI καµία O1 O2 O3 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 95

Επίδραση της γλώσσας και του αλγορίθµου 3 Σχετική απόδοση bubblesort 2,5 2 1,5 1 0,5 0 C/καµία C/O1 C/O2 C/O3 Java/int Java/JIT 2,5 Σχετική απόδοση quicksort 2 1,5 1 0,5 0 C/καµία C/O1 C/O2 C/O3 Java/int Java/JIT 3000 Επιτάχυνση quicksort έναντι bubblesort 2500 2000 1500 1000 500 0 C/καµία C/O1 C/O2 C/O3 Java/int Java/JIT Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 96

Τι µάθαµε Το πλήθος εντολών και το CPI δεν είναι καλές ενδείξεις απόδοσης από µόνες τους Οι βελτιστοποιήσεις µεταγλώττιστή είναι ευαίσθητες στον αλγόριθµο Ο κώδικας Java/JIT είναι σηµαντικά ταχύτερος από τη διερµηνεία της JVM Συγκρίσιµος µε το βελτιστοποιηµένο κώδικα C σε κάποιες περιπτώσεις Τίποτε δεν µπορεί να διορθώσει έναν ανόητο αλγόριθµο! Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 97

Πίνακες και δείκτες Η αριθµοδεικτοδότηση πινάκων (array indexing) περιλαµβάνει Πολλαπλασιασµό του αριθµοδείκτη µε το µέγεθος του στοιχείου Πρόσθεση στη διεύθυνση βάσης του πίνακα Οι δείκτες (pointers) αντιστοιχούν απευθείας σε διευθύνσεις µνήµης Μπορούν να µας γλιτώσουν από τις δυσκολίες της αριθµοδεικτοδότησης 2.14 Πίνακες και δείκτες Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 98

Παράδειγµα: µηδενισµός πίνακα clear1(int array[], int size) { int i; for (i = 0; i < size; i += 1) array[i] = 0; } move $t0,$zero # i = 0 loop1: sll $t1,$t0,2 # $t1 = i * 4 add $t2,$a0,$t1 # $t2 = # &array[i] sw $zero, 0($t2) # array[i] = 0 addi $t0,$t0,1 # i = i + 1 slt $t3,$t0,$a1 # $t3 = # (i < size) bne $t3,$zero,loop1 # if ( ) # goto loop1 clear2(int *array, int size) { int *p; for (p = &array[0]; p < &array[size]; p = p + 1) *p = 0; } move $t0,$a0 # p = & array[0] sll $t1,$a1,2 # $t1 = size * 4 add $t2,$a0,$t1 # $t2 = # &array[size] loop2: sw $zero,0($t0) # Memory[p] = 0 addi $t0,$t0,4 # p = p + 4 slt $t3,$t0,$t2 # $t3 = #(p<&array[size]) bne $t3,$zero,loop2 # if ( ) # goto loop2 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 99

Σύγκριση πινάκων και δεικτών Ο πολλαπλασισµός υφίσταται «µείωση δύναµης» ( strength reduction ) σε ολίσθηση Η έκδοση µε πίνακες απαιτεί η ολίσθηση να είναι µέσα στο βρόχο Είναι µέρος του υπολογισµού αριθµοδείκτη µετά την αύξηση του i Αντιδιαστολή µε την αύξηση του δείκτη (pointer) Ο µεταγλωττιστής µπορεί να πετύχει το ίδιο αποτέλεσµα µε τη χρήση δεικτών (pointers) από τον προγραµµατιστή Απαλοιφή επαγωγικής µεταβλητής (induction variable elimination) Καλύτερα το πρόγραµµα να είναι πιο ξεκάθαρο και ασφαλέστερο Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 100

Οµοιότητες ARM & MIPS ARM: ο δηµοφιλέστερος ενσωµατωµένος πυρήνας Παρόµοιο βασικό σύνολο εντολών µε τον MIPS ARM MIPS Έτος ανακοίνωσης 1985 1985 Μέγεθος εντολής 32 bit 32 bit Χώρος διευθύνσεων 32-bit επίπεδος 32-bit επίπεδος Ευθυγράµµιση δεδοµένων Ευθυγραµµισµένα Ευθυγραµµισµένα 2.16 Πραγµατικότητα: εντολές ARM Τρόποι διευθυνσιοδότησης δεδοµένων 9 3 Καταχωρητές 15 32-bit 31 32-bit Είσοδος/έξοδος Με χαρτογράφηση µνήµης (memory mapped) Με χαρτογράφηση µνήµης (memory mapped) Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 101

Σύγκριση και διακλάδωση στον ARM Χρησιµοποιεί κωδικούς συνθήκης για το αποτέλεσµα µιας αριθµητικής/λογικής εντολής Αρνητικό (negative), µηδέν (zero), κρατούµενο (carry), υπερχείλιση (overflow) Εντολές σύγκρισης (compare) που δίνουν τιµές στους κωδικούς συνθήκης χωρίς να διατηρούν το αποτέλεσµα Κάθε εντολή µπορεί να είναι υπό συνθήκη 4 υψηλότερα bit της λέξης εντολής: τιµή της συνθήκης Μπορεί να αποφύγει τις διακλαδώσεις επάνω από µεµονωµένες εντολές Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 102

Κωδικοποίηση εντολών Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 103

Η αρχιτεκτονική Intel x86 Εξέλιξη µε αναδροµική συµβατότητα (backward compatibility) 8080 (1974): µικροεπεξεργαστής 8-bit Συσσωρευτής (accumulator), και επιπλέον 3 ζεύγη καταχωρητήαριθµοδείκτη (index-register) 8086 (1978): επέκταση του 8080 στα 16-bit Σύνθετο σύνολο εντολών (Complex instruction set CISC) 8087 (1980): συνεπεξεργαστής κινητής υποδιαστολής Προσθέτει εντολές και στοίβα καταχωρητών (register stack) για κινητή υποδιαστολή 80286 (1982): διευθύνσεις 24-bit, µονάδα διαχείρισης µνήµης (MMU) Τµηµατοποιηµένη (segmented) χαρτογράφηση και προστασία µνήµης 80386 (1985): επέκταση στα 32-bit (σήµερα IA-32) Επιπλέον τρόποι διευθυνσιοδότησης και λειτουργίες Σελιδοποιηµένη (paged) χαρτογράφηση µνήµης καθώς και τµήµατα (segments) 2.17 Πραγµατικότητα: εντολές x86 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 104

Η αρχιτεκτονική Intel x86 Περισσότερη εξέλιξη i486 (1989): µε διοχέτευση (pipeline), κρυφές µνήµες και FPU µέσα στο τσιπ Συµβατοί ανταγωνιστές: AMD, Cyrix, Pentium (1993): υπερβαθµωτός (superscalar), διαδροµή δεδοµένων (datapath) των 64-bit Επόµενες εκδόσεις πρόσθεσαν τις εντολές MMX (Multi-Media extension) Το «διαβόητο» σφάλµα διαίρεσης κινητής υποδιαστολής Pentium Pro (1995), Pentium II (1997) Νέα µικροαρχιτεκτονική (δείτε Colwell, The Pentium Chronicles) Pentium III (1999) Πρόσθεσε τις εντολές SSE (Streaming SIMD Extensions) και τους σχετικούς καταχωρητές Pentium 4 (2001) Νέα µικροαρχιτεκτονική Πρόσθεσε τις εντολές SSE2 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 105

Η αρχιτεκτονική Intel x86 Και επιπλέον AMD64 (2003): επέκταση αρχιτεκτονικής στα 64 bit EM64T Extended Memory 64 Technology (2004) Η AMD64 υιοθετήθηκε από την Intel (µε βελτιώσεις) Πρόσθεσε εντολές SSE3 Intel Core (2006) Πρόσθεσε εντολές SSE4, υποστήριξη εικονικής µνήµης AMD64 (ανακοίνωση το 2007): εντολές SSE5 Η Intel αρνήθηκε να ακολουθήσει, αντίθετα Advanced Vector Extension (ανακοίνωση το 2008) Μεγαλύτεροι καταχωρητές SSE, περισσότερες εντολές Αν η Intel δεν επέκτεινε µε διατήρηση της συµβατότητας, θα το έκαναν οι ανταγωνιστές της! Τεχνική κοµψότητα Εµπορική επιτυχία Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 106

Βασικοί καταχωρητές x86 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 107

Βασικοί τρόποι διευθ/σης x86 ύο τελεστέοι ανά εντολή Τελεστέος προέλευσης/προορισµού Καταχωρητής Καταχωρητής Καταχωρητής Μνήµη Μνήµη εύτερος τελεστέος προέλευσης Καταχωρητής Άµεσο Μνήµη Καταχωρητής Άµεσο Τρόποι διευθυνσιοδότησης µνήµης /νση σε καταχωρητή /νση = R base + µετατόπιση /νση = R base + 2 scale R index (scale = 0, 1, 2, ή 3) /νση = R base + 2 scale R index + µετατόπιση Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 108

Κωδικοποίηση εντολών x86 Κωδικοποίηση µεταβλητού µήκους Τα επιθεµατικά byte (postfix bytes) καθορίζουν τον τρόπο διευθυνσιοδότησης Τα προθεµατικά byte (prefix bytes) τροποποιούν τη λειτουργία Μήκος τελεστέου, επανάληψη, κλείδωµα, Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 109

Υλοποίηση IA-32 Το σύνθετο σύνολο εντολών κάνει δύσκολη την υλοποίηση Τα υλικό µεταφράζει τις εντολές σε απλούστερες µικρολειτουργίες (microoperations) Απλές εντολές: 1 1 Πολύπλοκες εντολές: 1 πολλές Μικροµηχανή (microengine) παρόµοια µε RISC Το µερίδιο της αγοράς κάνει αυτή τη λύση οικονοµικά βιώσιµη Συγκρίσιµη απόδοση µε RISC Οι µεταγλωττιστές αποφεύγουν τις σύνθετες εντολές Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 110

Πλάνες Ισχυρή εντολή υψηλότερη απόδοση Απαιτούνται λιγότερες εντολές Αλλά οι σύνθετες εντολές είναι δύσκολο να υλοποιηθούν Μπορεί να καθυστερήσουν όλες τις εντολές, ακόµη και τις πιο απλές Οι µεταγλωττιστές είναι καλοί στο να παράγουν γρήγορο κώδικα µε απλές εντολές Χρήση κώδικα συµβολικής γλώσσας για υψηλή απόδοση Αλλά οι σύγχρονοι µεταγλωττιστές είναι καλύτεροι στο χειρισµό των σύγχρονων επεξεργαστών Περισσότερες γραµµές κώδικα περισσότερα σφάλµατα και µικρότερη παραγωγικότητα 2.18 Πλάνες και παγίδες Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 111

Πλάνες Αναδροµική συµβατότητα (backward compatibility) το σύνολο εντολών δεν αλλάζει Αλλά προστίθενται περισσότερες εντολές σύνολο εντολών x86 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 112

Παγίδες Οι διαδοχικές λέξεις δε βρίσκονται σε διαδοχικές διευθύνσεις Αύξηση κατά 4, όχι κατά 1! ιατήρηση ενός δείκτη (pointer) προς µια αυτόµατη µεταβλητή µετά την επιστρεφή της διαδικασίας π.χ., µεταβίβαση του δείκτη µέσω ενός ορίσµατος Ο δείκτης γίνεται άκυρος µετά το «άδειασµα» της στοίβας για τη διαδικασία Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 113

Συµπερασµατικές παρατηρήσεις Σχεδιαστικές αρχές 1. Η απλότητα ευνοεί την κανονικότητα 2. Το µικρότερο είναι ταχύτερο 3. Κάνε τη συνηθισµένη περίπτωση γρήγορη 4. Η καλή σχεδίαση απαιτεί καλούς συµβιβασµούς Επίπεδα λογισµικού/υλικού Μεταγλωττιστής, συµβολοµεταφραστής, υλικό MIPS: τυπική αρχιτεκτονική συνόλου εντολών RISC σύγκριση µε x86 Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 114 2.19 Συµπερασµατικές παρατηρήσεις

Συµπερασµατικές παρατηρήσεις Μέτρηση εκτελέσεων εντολών MIPS σε µετροπρογράµµατα Κάντε τη συνηθισµένη περίπτωση γρήγορη Κάντε συµβιβασµούς Κατηγορία εντολής Παραδείγµατα MIPS SPEC2006 Int SPEC2006 FP Αριθµητικές add, sub, addi 16% 48% Μεταφοράς δεδοµένων Λογικές ιακλάδωσης υπό συνθήκη lw, sw, lb, lbu, lh, lhu, sb, lui and, or, nor, andi, ori, sll, srl beq, bne, slt, slti, sltiu 35% 36% 12% 4% 34% 8% Άλµατος j, jr, jal 2% 0% Κεφάλαιο 2 Εντολές: η γλώσσα του υπολογιστή 115