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

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

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

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

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

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

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

Σχεδίαση της Διόδου Δεδομένων

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Σχεδίαση της Μονάδας Ελέγχου

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

Επεξεργαστής Υλοποίηση ενός κύκλου μηχανής

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

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

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

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

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

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

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

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

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

MIPS functions and procedures

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

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

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

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

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

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

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

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

Τέτοιες λειτουργίες γίνονται διαμέσου του

Στοιχεία από Assembly Γιώργος Μανής

ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Υ

Επεξεργαστής Υλοποίηση ενός κύκλου μηχανής

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

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

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

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

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

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

Θέµατα Φεβρουαρίου

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

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

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

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;

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

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

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

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

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

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

ΕΘΝΙKΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Ονοματεπώνυμο: ΑΜ:

Ερωτήσεις θεωρίας MY. Μέρος Α. Υλικό.

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Πληροφορική Ι. Αναπαράσταση αριθμών στο δυαδικό σύστημα. Δρ.

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

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

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

Εργαστήριο 3 ΟΡΓΑΝΩΣΗ ΤΗΣ ΚΜΕ. Εισαγωγή

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

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

ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Υ

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

Transcript:

ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ - VHDL ΥΛΙΚΟ ΚΑΙ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ Ενότητα 3 Αρχιτεκτονικές Συνόλου Εντολών με έμφαση στο MIPS R2000 Καθηγητής Αντώνης Πασχάλης 2017

Γενικές Γραμμές Βασικές Αρχιτεκτονικές Συνόλου Εντολών RISC vs CISC Τύποι και Μεγέθη Τελεστέων Προσημασμένοι Πραγματικοί Δυαδικοί Αριθμοί (ΙΕΕΕ 754) Αρχιτεκτονική MIPS R2000 Ευθυγράμμιση των Διευθύνσεων Αρχείο Καταχωρητών Γενικής Χρήσης MIPS R2000 Κωδικοποίηση Eντολών MIPS R2000 Τρόποι Διευθυνσιοδότησης Μνήμης Δεδομένων MIPS R2000 PC-Σχετική Διευθυνσιοδότηση Μνήμης Εντολών Υποστηριζόμενες Εντολές του MIPS R2000

Αρχιτεκτονική Συνόλου Εντολών Ανάκληση εντολής Αποκωδικοποίηση εντολής Ανάκληση τελεστέου Εκτέλεση εντολής Αποθήκευση αποτελέσματος Επόμενη εντολή Tελεστέοι (operands) εντολών που βρίσκονται αποθηκευμένοι; πόσοι είναι σε μία εντολή; τύποι και μεγέθη τελεστέων τρόποι διευθυνσιοδότησης Κατηγορίες Λειτουργιών (εντολών) RISC και CISC Η επόμενη εντολή που εκτελείται μεταπήδηση διακλάδωση κλήση και επιστροφή από διαδικασία κλήση και επιστροφή από διακοπή Μορφή & κωδικοποίηση συνόλου εντολών πως γίνεται η αποκωδικοποίηση; Αλληλεπίδραση με μεταγλωττιστές

Βασικές Αρχιτεκτονικές Συνόλου Εντολών ταξινόμηση η ανάλογα με το που βρίσκονται αποθηκευμένοι οι τελεστέοι Σαν τελεστέοι (operands) ορίζονται τα δεδομένα που χρησιμοποιούνται κατά την εκτέλεση μίας πράξης καθώς και το αποτέλεσμα της πράξης Έμμεση αποθήκευση σε Στοίβα (Stack) οι τελεστέοι αποθηκεύονται έμμεσα στη στοίβα, πριν και μετά την εκτέλεση της πράξης οι εντολές φόρτωσης από τη μνήμη στη στοίβα (PUSH) και αποθήκευσης από τη στοίβα στη μνήμη (POP) προσδιορίζουν 1 τελεστέο που αποθηκεύεται άμεσα στη μνήμη και 1 τελεστέο που αποθηκεύεται έμμεσα στη στοίβα οι εντολές εκτέλεσης πράξεων δεν προσδιορίζουν άμεσα κανένα τελεστέο, γιατί και οι 3 τελεστέοι προσδιορίζονται έμμεσα στη στοίβα Έμμεση αποθήκευση σε Συσσωρευτή (Accumulator) ο ένας από τους δύο τελεστέους πριν την εκτέλεση της πράξης καθώς και το αποτέλεσμα της πράξης αποθηκεύονται έμμεσα στο συσσωρευτή που είναι ένας καταχωρητής ειδικού σκοπού όλες οι εντολές προσδιορίζουν 1 τελεστέο που αποθηκεύεται άμεσα στη μνήμη και 1 τελεστέο που αποθηκεύεται έμμεσα στο συσσωρευτή

Βασικές Αρχιτεκτονικές Συνόλου Εντολών ταξινόμηση ανάλογα με το που βρίσκονται αποθηκευμένοι οι τελεστέοι Άμεση αποθήκευση σε καταχωρητή και μνήμη Αρχιτεκτονική καταχωρητή - μνήμης για αύξηση της απόδοσης, χρησιμοποιείται ένα αρχείο καταχωρητών γενικού σκοπού, αντί να χρησιμοποιηθεί αποκλειστικά ο συσσωρευτής όλες οι εντολές προσδιορίζουν 1 τελεστέο που αποθηκεύεται άμεσα σε έναν καταχωρητή του αρχείου καταχωρητών και 1 τελεστέο που αποθηκεύεται άμεσα στη μνήμη Άμεση αποθήκευση σε πολλούς (2 ή 3) καταχωρητές Αρχιτεκτονική LOAD - STORE για περαιτέρω αύξηση της απόδοσης, οι εντολές φόρτωσης από τη μνήμη στο αρχείο καταχωρητών (LOAD) και αποθήκευσης από το αρχείο καταχωρητών στη μνήμη (STORE) διαχωρίζονται από τις εντολές εκτέλεσης πράξεων που χρησιμοποιούν αποκλειστικά το αρχείο καταχωρητών οι εντολές LOAD και STORE προσδιορίζουν 1 τελεστέο που αποθηκεύεται άμεσα σε έναν καταχωρητή του αρχείου καταχωρητών και 1 τελεστέο που αποθηκεύεται άμεσα στη μνήμη οι εντολές εκτέλεσης πράξεων προσδιορίζουν 3 τελεστέους που αποθηκεύονται άμεσα σε 2 (ή 3) καταχωρητές του αρχείου καταχωρητών

Σημειογραφία Α σαν τελεστέος σε εντολή = η διεύθυνση της θέσης μνήμης με περιεχόμενο Mem[A] στην οποία είναι αποθηκευμένος ο τελεστέος Reg[R1] = το περιεχόμενο του καταχωρητή R1

Έμμεση Αποθήκευση σε Στοίβα A B C Μνήμη Mem[Α] Mem[B] PUSH A Mem[A] 1 Top of stack PUSH B Mem[B] Mem[A] 1 Μνήμη Mem[A] Mem[B] A B C Στοίβα Στοίβα Οι δύο πιο πάνω λέξεις εξέρχονται από τη στοίβα, προσθέτονται στην ΑΛΜ και αποθηκεύονται στην TOS Mem[C] = Mem[A] + Mem[B] A B C Μνήμη Mem[A] Mem[B] ADD Mem[A]+Mem[B] 1 Top of stack POP C 1 Μή Μνήμη Mem[A] Mem[Β] Mem[C] A B C Στοίβα Στοίβα

Έμμεση Αποθήκευση σε Συσσωρευτή (Accumulator) A Μνήμη Mem[Α] LOAD A A Μνήμη Mem[Α] ADD B B C Mem[B] ΑΛΜ Mem[A] AC B C Mem[B] ΑΛΜ Mem[A]+Mem[B] AC A B Μνήμη Mem[Α] Mem[B] STORE C ΑΛΜ Η εντολή LOAD Α φορτώνει το Mem[A] στον AC Η εντολή ADD B προσθέτει τον ΑC με το Mem[B] και αποθηκεύει το αποτέλεσμα της πρόσθεσης πάλι στον AC Ο AC χρησιμοποιείται σαν καταχωρητής του δεύτερου τελεστέου της ALM κατά την εκτέλεση της πρόσθεσης Η εντολή STORE C αποθηκεύει τον AC στο Mem[C] C Mem[C] Mem[C] = Mem[A] + Mem[B] AC Mem[A]+Mem[B] Mem[C] Mem[A] + Mem[B]

Άμεση Αποθήκευση σε Καταχωρητή & Μνήμη A Μνήμη Mem[Α] LOAD R1,A A Μνήμη Mem[Α] ADD R1,B B C Mem[B] ΑΛΜ Mem[A] R1 B C Mem[B] R1 ΑΛΜ Mem[A]+Mem[B] A B Μνήμη Mem[Α] Mem[B] STORE C,R1 ΑΛΜ Χρησιμοποιείται κάποιος καταχωρητής γενικής χρήσης (π.χ. R1) αντί του συσσωρευτή AC για να αποθηκευθεί το Mem[A] καθώς και το αποτέλεσμα της πρόσθεσης Mem[A]+Mem[B] C Mem[C] Mem[C] = Reg[R1] = Mem[A] + Mem[B] R1 Mem[A]+Mem[B]

A Μνήμη Mem[Α] Άμεση Αποθήκευση σε 2 Καταχωρητές LOAD R1,A A Μνήμη Mem[Α] LOAD R2,B B Mem[B] R2 B Mem[B] Mem[B] R2 C ΑΛΜ C ΑΛΜ Mem[A] R1 Mem[A] R1 A Μνήμη Mem[Α] ADD R1,R2 R2 Mem[B] A Μνήμη Mem[Α] B Mem[B] B C ΑΛΜ C Mem[C] R1 Mem[A]+Mem[B] Mem[B] R2 Mem[B] R1 STORE C,R1 ΑΛΜ Mem[A]+Mem[B] Mem[C] = Reg[R1] = Mem[A] + Mem[B] R1,R2: καταχωρητές γενικής χρήσης

A B C Μνήμη Mem[Α] Mem[B] Άμεση Αποθήκευση σε 3 Καταχωρητές LOAD R1,A A Μνήμη Mem[Α] LOAD R2,B R1 R2 R1 R2 Mem[A] B Mem[B] Mem[A] ΑΛΜ C ΑΛΜ Mem[B] R3 R3 A B Μνήμη Mem[Α] Mem[B] R1 ADD R3,R1,R2 R2 A B Μνήμη Mem[Α] R1 STORE C,R3 Mem[A] Mem[B] Mem[B] Mem[A] Mem[B] C ΑΛΜ C R3 Mem[A]+Mem[B] Mem[C] R3 R2 ΑΛΜ Mem[A]+Mem[B] Mem[C] = Reg[R3] = Mem[A] + Mem[B] R1,R2,R3: καταχωρητές γενικής χρήσης

Συγκρίσεις Αρχιτεκτονικών Συνόλου Εντολών Αριθμός Bytes ανά εντολή Αριθμός εντολών ανά πρόγραμμα Αριθμός κύκλων ανά εντολή, CPI(j)

Συγκρίνοντας Αριθμό Εντολών ανά Πρόγραμμα Η ακολουθία εντολών σε Assembly για το (C = A + B) και για τις τέσσερις αρχιτεκτονικές συνόλου εντολών Κατ. Γεν. Χρήσης Κατ. Γεν. Χρήσης Στοίβα Συσσωρευτής (καταχωρητής-μνήμη) (2 & 3 καταχωρητές) Push A Load A Load R1,A Load R1,A Load R1,A Push B Add B Add R1,B Load R2,B Load R2,B Add Store C Store C, R1 Add R1,R2 Add R3,R1,R2 Pop C Store C,R1 Store C,R3 Το αποτέλεσμα της πρόσθεσης αποθηκεύεται στον R1 πάλι. Στον R1 αποθηκεύονται: α) το Mem[Α] πριν την εκτέλεση της εντολής, και β) το αποτέλεσμα Mem[A]+Mem[B] μετά την εκτέλεση της εντολής

Άσκηση η 3.1 Ποια είναι η ακολουθία των εντολών σε Assembly που υπολογίζουν τις αριθμητικές παράστασεις Υ = Α + [10 x (B - C)] Υ = (Α+10) x (B-C) όπου τα Υ, Α, Β, C είναι διευθύνσεις μνήμης, για όλες τις βασικές αρχιτεκτονικές συνόλου εντολών

Συγκρίσεις Αρχιτεκτονικών Συνόλου Εντολών με Καταχωρητές Γενικής Χρήσης Άμεση αποθήκευση σε 3 καταχωρητές (RISC: SPARC, MIPS, PowerPC, ALPHA) Πλεονεκτήματα Σταθερή κωδικοποίηση εντολής Υποστήριξη απλών εντολών που απαιτούν απλούστερη υλοποίηση και εκτελούνται πολύ γρήγορα στον επεξεργαστή Μειονεκτήματα Μεγαλύτερο πλήθος εντολών ανά πρόγραμμα (το μειονέκτημα αυτό αντιμετωπίζεται με την παρούσες τεχνολογικές εξελίξεις στο σύστημα μνήμης σε χρόνο προσπέλασης μνήμης, μέγεθος και κόστος) Σπατάλη ψηφίων κατά την κωδικοποίηση των εντολών RISC: Περισσότερες απλές εντολές στο σύστημα μνήμης

Συγκρίσεις Αρχιτεκτονικών Συνόλου Εντολών με Καταχωρητές Γενικής Χρήσης Άμεση αποθήκευση σε καταχωρητή & μνήμη (CISC: Intel80x86, Motorola 68000) Πλεονεκτήματα Μικρότερο πλήθος εντολών ανά πρόγραμμα με την υποστήριξη σύνθετων εντολών Μεγαλύτερη πυκνότητα εντολών χωρίς σπατάλη ψηφίων κατά την κωδικοποίηση Μειονεκτήματα Υποστήριξη σύνθετων εντολών που απαιτούν πιο πολύπλοκη υλοποίηση (ιδίως της μονάδας ελέγχου με τη χρήση τεχνικών μικροπρογραμματισμού, όπου οι σύνθετες εντολές αντιστοιχούν σε πολλές μικρο-εντολές, που αποθηκεύονται στη μνήμη μικρο-προγράμματος) CISC: Λιγότερες σύνθετες εντολές στο σύστημα μνήμης που αντιστοιχούν σε πολλές απλές μικρο-εντολές στη μνήμη του μικρο-προγράμματος

Τύποι και Μεγέθη Τελεστέων Τύποι Τελεστεών Χαρακτήρας ASCII ή ακέραιος Μισή λέξη (ακέραιος [-2 15, 2 15-1 ) Λέξη (ακέραιος, [-2 31, 2 31-1] ) Κινητής υποδιαστολής απλής ακρίβειας Κινητής υποδιαστολής διπλής ακρίβειας Μεγέθη Τελεστέων 1 Byte (8 Bits) 2 Bytes (16 Bits) 4 Bytes (32 Bits) 4 Bytes (32 Bits) 8 Bytes (64 Bits) 2 BCD 1 Byte (8 Bits) Συνήθως υπάρχει δυνατότητα προσπέλασης σε 1, 2 ή 4 Bytes στη μνήμη Οι πράξεις γίνονται μεταξύ λέξεων (το μέγεθος της λέξης προσδιορίζει το μέγεθος των καταχωρητών). Εάν κάποιος από τους τελεστέους έχει μικρότερο μέγεθος γίνεται επέκταση πρόσημου ή επέκταση μηδενός, πριν την εκτέλεση της πράξης. Για επεξεργαστές 32 ψηφίων

Προσημασμένοι Πραγματικοί Δυαδικοί Αριθμοί σε Απεικόνιση Κινητής Υποδιαστολής (ΙΕΕΕ 754) Αρνητική υπερχείλιση Θετική υπερχείλιση -2 31 0 2 31-1 (~10 9 ) Ακέραιοι αριθμοί 32 ψηφίων σε απεικόνιση συμπληρώματος ως προς 2 Αρνητική υπερχείλιση υπoχείλιση (underflow) 0 Θετική υπερχείλιση -(1-2 -24 )x2 128-0,5x2-126 0,5x2-126 (1-2 -24 )x2 128 (~10 38 ) -(1-2 -53 )x2 1024-0,5x2-1022 0,5x2-1022 (1-2 -53 )x2 1024 (~10 308 ) Πραγματικοί αριθμοί 32 ψηφίων απλής ακρίβειας Πραγματικοί αριθμοί 64 ψηφίων διπλής ακρίβειας 1 8(11) ψηφία 23(52) ψηφία =32(64) ψηφία S Exponent (e) Mantissa (m -1 m -23(-52) )

Προσημασμένοι Πραγματικοί Δυαδικοί Αριθμοί σε Απεικόνιση Κινητής Υποδιαστολής (ΙΕΕΕ 754) τιμή Εκθέτης e Mantissa (m) 0 0 0 2-126(-1022) x (0,f) 0 f 0 2 e-127(-1023) x (1,f) 0 < e <255 (2047) f 255 (2047) 0 Not a Number (NaN) 255 (2047) f 0 1 8(11) ψηφία 23(52) ψηφία =32(64) ψηφία S Exponent (e) Mantissa (m -1 m -23(-52) )

MIPS R2000 Μονάδα Επεξεργασίας Ακεραίων - CPU αρχείο 32 καταχωρητών των 32-bits $0 $1 $31 Δεν θα υλοποιηθεί Lo MUL/DIV Hi ALU Μνήμη Cache L1

MIPS R2000: Τύποι & Μεγέθη Τελεστέων Στο μάθημα αυτό ασχολούμαστε με την επεξεργασία ακεραίων αριθμών Οι αριθμητικές πράξεις (προσημασμένες και μη) εκτελούνται με τελεστέους (operands) που είναι προσημασμένοι ακέραιοι αριθμοί σε απεικόνιση συμπληρώματος ως προς 2 μεγέθους μίας λέξης (32 bits) Όταν οι ακέραιοι αριθμοί έχουν μέγεθος 8 ή 16 bits, τότε πριν την εκτέλεση της αριθμητικής πράξης γίνεται πάντα επέκταση πρόσημου, ανεξάρτητα από το εάν η πράξη είναι προσημασμένη ή όχι Όταν η αριθμητική πράξη είναι προσημασμένη (signed), γίνεται έλεγχος υπερχείλισης για προσημασμένους ακέραιους αριθμούς και προκαλείται η αντίστοιχη εξαίρεση (exception) Συμβαίνει στις εντολές ADDI, ADD, SUB Όταν η αριθμητική πράξη δεν είναι προσημασμένη (unsigned), εκτελείται σαν προσημασμένη χωρίς να γίνεται έλεγχος υπερχείλισης Συμβαίνει στις εντολές ADDIU, ADDU, SUBU Χρησιμοποιούνται από τους μεταγλωττιστές της C

Οργάνωση των Bytes ενός Τελεστέου Big Endian: η διεύθυνση του τελεστέου είναι η διεύθυνση του περισσότερου σημαντικού byte του τελεστέου (xx00 = Big End Byte του τελεστέου) IBM 360/370, Motorola 68000, MIPS, Sparc, HP PA Little Endian: η διεύθυνση του τελεστέου είναι η διεύθυνση του λιγότερου σημαντικού byte του τελεστέου (xx00 = Little End Byte του τελεστέου) Intel 80x86, DEC Vax, DEC Alpha (Windows NT) Little end byte msb big end byte 3 2 1 0 0 1 2 3 lsb

Ευθυγράμμιση των Διευθύνσεων Ας υποθέσουμε ότι ένας τελεστέος έχει μέγεθος s Bytes Η διεύθυνση Α της θέσης μνήμης στην οποία αποθηκεύεται ο τελεστέος είναι ευθυγραμμισμένη, εάν Α mod s = 0 Η ευθυγράμμιση των διευθύνσεων προσφέρει: πιο απλή υλοποίηση της διευθυνσιοδότησης στο υλικό λιγότερες προσπελάσεις στη μνήμη ταχύτερη εκτέλεση των προγραμμάτων Μεγέθη Τελεστέων (s) Ευθυγράμμιση διεύθυνσης (στα 4 lsb της Α = offset) 1 Byte (8 Bits) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 2 Bytes (16 Bits) 0, 2, 4, 6, 8, A, C, E 4 Bytes (32 Bits) 0, 4, 8, C 8 Bytes (64 Bits) 0, 8

Ευθυγράμμιση των Διευθύνσεων Πως αποθηκεύονται στη μνήμη οι πιο κάτω τελεστέοι διαδοχικά για οργάνωση Big Endian και Little Endian και ποιες είναι οι διευθύνσεις τους, εάν ο πρώτος τελεστέος έχει διεύθυνση 00; ακέραιος (λέξη) των 4 bytes (I4,I3,I2,I1) ακέραιος (μισή λεξη) των 2 bytes (Κ2,Κ1) χαρακτήρας του 1 byte (C1) κινητής υποδιαστολής διπλής ακρίβειας των 8 bytes (D8-D1) array 3 χαρακτήρων του 1 byte έκαστος (A,B,C) κινητής ηήςυποδιαστολής απλής ακρίβειας ρβ των 4 bytes (S4-S1) 00 Ι4 08 D8 10 A 00 I1 08 D1 10 A 01 Ι3 09 D7 11 B 01 I2 09 D2 11 B 02 Ι2 0A D6 12 C 02 I3 0A D3 12 C BE B.E. 03 04 Ι1 Κ2 0B 0C D5 D4 13 14 S4 LE L.E. 03 04 I4 K1 0B 0C D4 D5 13 14 S1 05 Κ1 0D D3 15 S3 05 K2 0D D6 15 S2 06 C1 0E D2 16 S2 06 C1 0E D7 16 S3 07 0F D1 17 S1 07 0F D8 17 S4

Άσκηση η 3.2 Πως αποθηκεύονται στη μνήμη οι πιο κάτω τελεστέοι διαδοχικά για οργάνωση Big Endian και Little Endian και ποιες είναι οι διευθύνσεις τους, εάν ο πρώτος τελεστέος έχει διεύθυνση 1Ε09; χαρακτήρας του 1 byte (C1) array 4 χαρακτήρων του 1 byte έκαστος (A,B,C,D) ακέραιος (λέξη) των 4 bytes (I4,I3,I2,I1) κινητής υποδιαστολής διπλής ακρίβειας των 8 bytes (D8-D1) ακέραιος (μισή λέξη) των 2 bt bytes (H2H1) (H2,H1) κινητής υποδιαστολής απλής ακρίβειας των 4 bytes (S4-S1)

MIPS R2000: Χρήση της Μνήμης 7FFFFFFF $fp $sp πλαίσιο στοίβας Stack Segment 10010000 $gp 10008000 10000000 PC 00400000 Dynamic Data Static Data (64K) Code κρατημένο Data Segment Text tsegment

MIPS R2000: Αρχείο Καταχωρητών Γενικής Χρήσης (ΚΓΧ) όνομα αριθμός χρήση $zero 0 Περιέχει τη σταθερή τιμή 0 $at 1 Δεσμευμένος από τον Assembler $v0 2 Επιστροφή τιμών από functions $v1 3 Επιστροφή τιμών από functions $a0 4 Πέρασμα τιμών σε procedures* $a1 5 Πέρασμα τιμών σε procedures $a2 6 Πέρασμα τιμών σε procedures $a3 7 Πέρασμα τιμών σε procedures * περισσότερες από 4 τιμές περνούν μέσω στοίβας

MIPS R2000: Αρχείο Καταχωρητών Γενικής Χρήσης (ΚΓΧ) όνομα αριθμός χρήση $t0 8 Περιέχει δεδομένα που χανόνται* $t1 9 Περιέχει δεδομένα που χάνονται $t2 10 Περιέχει δεδομένα που χάνονται $t3 11 Περιέχει δεδομένα που χάνονται $t4 12 Περιέχει δεδομένα που χάνονται $t5 13 Περιέχει δεδομένα που χάνονται $t6 14 Περιέχει δεδομένα που χάνονται $t7 15 Περιέχει δεδομένα που χάνονται * δεν διατηρούνται μετά την κλήση διαδικασίας

MIPS R2000: Αρχείο Καταχωρητών Γενικής Χρήσης (ΚΓΧ) όνομα αριθμός χρήση $s0 16 Περιέχει δεδομένα που δεν χάνονται* $s1 17 $s2 18 $s3 19 $s4 20 $s5 21 $s6 22 $s7 23 Περιέχει δεδομένα που δεν χάνονται Περιέχει δεδομένα που δεν χάνονται Περιέχει δεδομένα που δεν χάνονται Περιέχει δεδομένα που δεν χάνονται Περιέχει δεδομένα που δεν χάνονται Περιέχει δεδομένα που δεν χάνονται Περιέχει δεδομένα που δεν χάνονται * δεν επηρεάζονται από την κλήση μίας διαδικασίας

MIPS R2000: Αρχείο Καταχωρητών Γενικής Χρήσης (ΚΓΧ) όνομα αριθμός χρήση $t8 24 Περιέχει δεδομένα που χανόνται $t9 25 Περιέχει δεδομένα που χάνονται $k0 26 Δεσμευμένος από το Λειτουργικό $k1 27 Δεσμευμένος από το Λειτουργικό $gp 28 Καθολικός Δείκτης (Global Pointer) 1 $sp 29 Δί Δείκτης Στοίβας (Stack kpointer) 2 $fp 30 Δείκτης Πλαισίου (Frame Pointer) 3 $ra 31 Επιστροφή από διαδικασία 1 δείχνει στο μέσο του static data segment για αποθήκευση καθολικών μεταβλητών χ μ g γ ή η μ β η 2 δείχνει το τέλος της στοίβας με ευθυγράμμιση 2 λέξεων 3 δείχνει την πρώτη λέξη του πλαισίου στοίβας της τρέχουσας διαδικασίας

MIPS R2000: Κωδικοποίηση Eντολών O MIPS υποστηρίζει σταθερή κωδικοποίηση μεγέθους 32 bits με τρεις τύπους εντολών: Τύπος Ι (Immediate) 31 26 21 16 0=LSB opcode rs rt immediate / address 6 Bits 5 Bits 5 Bits Τύπος R (Register) 16 Bits 31 26 21 16 11 6 0=LSB op=0 rs rt rd shamt funct 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits 31 Τύπος J (Jump) opcode 6 Bits 26 0=LSB target_address 26 Bits = 32 Bits = 32 Bits = 32 Bits

MIPS R2000: Κωδικοποίηση Eντολών 31 26 21 16 0=LSB opcode rs rt immediate / address 6 Bits 5 Bits 5 Bits 16 Bits = 32 Bits Ίδιος κώδικας λειτουργίας (opcode = 0) για όλες τις εντολές τύπου R. Αξιoποιώντας τα 6 lsb της εντολής, που δεν χρησιμοποιούνται στις εντολές τύπου R επιτυγχάνεται μείωση του μεγέθους του opcode (μόνο 6 ψηφία) σε όφελος του πεδίου immediate 31 26 21 16 11 6 0=LSB op=0 rs rt rd shamt funct 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits

MIPS R2000: Κωδικοποίηση Eντολών Κωδικός λειτουργίας - opcode (bits 31-26) (το πρώτο πεδίο της εντολής - Big Endian) χρησιμοποιείται για την αποκωδικοποίηση της εντολής προσδιορίζει την πράξη - λειτουργία της εντολής (εκτός από τις εντολές τύπου Register) προσδιορίζει τους τύπους και τα μεγέθη των τελεστέων προσδιορίζει τον τρόπο διευθυνσιοδότησης μνήμης για την εύρεση της ενεργούς διεύθυνσης των τελεστέων

MIPS R2000: Κωδικοποίηση Eντολών Πεδία διευθύνσεων καταχωρητών Προσδιορίζουν συγκεκριμένους καταχωρητές του αρχείου καταχωρητών ($0 - $31) rs : register source (bits 25-21), προσδιορίζει τον πηγαίο καταχωρητή rt : register target (bits 20-16), προσδιορίζει έναν καταχωρητή του οποίου η σημασία εξαρτάται από την εντολή (δεύτερος πηγαίος καταχωρητής, καταχωρητής προορισμού, ρ..) rd : register destination (bits 15-11), προσδιορίζει τον καταχωρητή προορισμού, όπου αποθηκεύεται το αποτέλεσμα μίας πράξης

MIPS R2000: Κωδικοποίηση Eντολών Πεδίο shamt (shift amount - bits 10-6) Χρησιμοποιείται αποκλειστικά στις εντολές ολίσθησης με σταθερό αριθμό ολισθήσεων (SLL, SRL, SRA) προσδιορίζει τον αριθμό των ολισθήσεων Πεδίο funct (bits 5-0) Χρησιμοποιείται αποκλειστικά στις εντολές τύπου Register ως πεδίο επέκτασης του κωδικού λειτουργίας προσδιορίζει την πράξη - λειτουργία της εντολής

MIPS R2000: Κωδικοποίηση Eντολών Πεδίο immediate (bits 15-0) Χρησιμοποιείται αποκλειστικά στις εντολές τύπου Immediate προσδιορίζει μία σταθερή τιμή στις αριθμητικές και λογικές πράξεις καθώς και στις εντολές σύγκρισης προσδιορίζει τη μετατόπιση σε εντολές που χρησιμοποιούν διευθυνσιοδότηση η μετατόπισης και PC-σχετική διευθυνσιοδότηση

MIPS R2000: Κωδικοποίηση Eντολών Πεδίο target_address (bits 25-0) Χρησιμοποιείται αποκλειστικά στις εντολές τύπου Jump που χρησιμοποιούν τη ψευδο-απευθείας (pseudo-direct) direct) διευθυνσιοδότηση προσδιορίζει τη διεύθυνση της επόμενης εντολής που θα εκτελεστεί λόγω της μεταπήδησης ως εξής: τα 2 λιγότερο σημαντικά ψηφία της διεύθυνσης είναι 0 λόγω ευθυγράμμισης (εντολή 4 bytes) τα 26 επόμενα λιγότερο σημαντικά ψηφία της διεύθυνσης προσδιορίζονται από το πεδίο target_address τα 4 περισσότερο σημαντικά ψηφία της διεύθυνσης παραμένουν ως έχουν (όριο τα 256 ΜΒ = 64 Μ εντολές)

MIPS R2000: Τρόποι Διευθυνσιοδότησης ης Μνήμης Δεδομένων Διευθυνσιοδότηση Μέσω Καταχωρητή (Register Addressing) Άμεση Διευθυνσιοδότηση (Immediate Addressing) Διευθυνσιοδότηση Μετατόπισης Displacement Addressing Έμμεση Διευθυνσιοδότηση μέσω Καταχωρητή (Register Indirect Addressing) Απόλυτη Διευθυνσιοδότηση Μνήμης (Absolute Addressing)

Διευθυνσιοδότηση Μέσω Καταχωρητή Register Addressing MIPS R2000 Χρήση: όταν οι τελεστέοι βρίσκονται στους καταχωρητές χρησιμοποιείται σε εντολές τύπου Register, που αφορούν κυρίως αριθμητικές και λογικές πράξεις οι δύο τελεστέοι και το αποτέλεσμα της πράξης αποθηκεύονται σε τρεις καταχωρητές Πλεονεκτήματα: δεν απαιτείται προσπέλαση στη μνήμη - μικρό CPI(j) Μειονεκτήματα: περιορίζεται μόνο στους διαθέσιμους καταχωρητές γενικής χρήσης ADD $t0, $s0, $s1 $t0 <= $s0 + $s1 reg[08] <= reg[16] + reg[17] 31 26 21 16 11 6 0=LSB op=0 rs=16 rt=17 rd=8 shamt=0 funct=32 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits

Άμεση Διευθυνσιοδότηση Immediate Addressing MIPS R2000 Χρήση: όταν ο ένας τελεστέος είναι σταθερά το πολύ 16 bits χρησιμοποιείται σε εντολές τύπου Immediate, που αφορούν αριθμητικές και λογικές πράξεις, αύξηση ενός δείκτη (arrays, loops, στοίβα), συγκρίσεις η σταθερή τιμή αποθηκεύεται στο πεδίο immediate Πλεονεκτήματα: δεν απαιτείται προσπέλαση στη μνήμη Μειονεκτήματα: περιορισμός στο μέγεθος του σταθερού τελεστέου ADDI $sp, $sp, 8 reg[29] <= reg[29] + 8 $sp <= $sp + 8 31 26 21 16 0=LSB op=8 rs=29 rt=29 immediate=8 6 Bits 5 Bits 5 Bits 16 Bits = 32 Bits

Διευθυνσιοδότηση Μετατόπισης Displacement Addressing MIPS R2000 Χρήση: όταν γίνεται προσπέλαση της μνήμης χρησιμοποιείται σε εντολές τύπου Immediate, που αφορούν φόρτωση από τη μνήμη (LOAD) και αποθήκευση στη μνήμη (STORE) η ενεργή διεύθυνση προσδιορίζεται από το άθροισμα του περιεχομένου του καταχωρητή rs με τη σταθερή μετατόπιση το πολύ 16 bits που αποθηκεύεται στο πεδίο immediate οι διευθύνσεις στη μνήμη έχουν μέγεθος 32 bits και είναι ευθυγραμμισμένες (προσπέλαση σε 2 32 θέσεις μνήμης του ενός byte) η οργάνωση των bytes των τελεστέων είναι Big Endian υποστηρίζεται φόρτωση & αποθήκευση τελεστέων μεγέθους 1 byte (B), 2 bytes (H), 4 bytes (W) η οποία προσδιορίζεται στον κωδικό λειτουργίας opcode

Διευθυνσιοδότηση Μετατόπισης Displacement Addressing MIPS R2000 Πλεονεκτήματα: ευελιξία Μειονεκτήματα: απαίτηση πρόσθεσης για τον υπολογισμό της ενεργούς διεύθυνσης LW $t0, 32($s3) 3) $t0 <= Mem[$s3 + 32] reg[8] <= Mem[reg[19] + 32] 31 26 21 16 0=LSB op=35 rs=19 rt=8 immediate=32 6 Bits 5 Bits 5 Bits 16 Bits = 32 Bits

Άλλοι Τρόποι Διευθυνσιοδότησης MIPS R2000 Έμμεση διευθυνσιοδότηση μέσω καταχωρητή (reg. indirect) προκύπτει από τη διευθυνσιοδότηση μετατόπισης, εάν θέσουμε σαν μετατόπιση το 0 Παράδειγμα: LW $t0,0($s2) = LW $t0,($s2) (reg[8] <= Mem[reg[18]] (32 bits) Απόλυτη διευθυνσιοδότηση μνήμης (absolute) προκύπτει από τη διευθυνσιοδότηση μετατόπισης, εάν θέσουμε σαν μετατόπιση την απόλυτη διεύθυνση και σαν καταχωρητή που μετέχει στην διευθυνσιοδότηση το $zero Παράδειγμα: LW $t0,1000($zero) (reg[8] <= Mem[1000+0] (32 bits) Προκύπτουν σαν ειδικές περιπτώσεις της διευθυνσιοδότησης μετατόπισης

Υποστηριζόμενες Εντολές του MIPS R2000 Εντολές Φόρτωσης & Αποθήκευσης (Τύπου Ι) LW, SW Αριθμητικές και Λογικές Εντολές (Τύπου Ι) ADDIU, ANDI, ORI, XORI Αριθμητικές και Λογικές Εντολές (Τύπου R) ADDU, SUBU, AND, OR, XOR, NOR Εντολές Ολίσθησης (Τύπου R) SLL, SRL, SRA, SLLV, SLRV SRAV

Υποστηριζόμενες Εντολές του MIPS R2000 Εντολή Σύγκρισης - Set (Τύπου Ι) SLTI Εντολή Σύγκρισης - Set (Τύπου R) SLT Εντολές Διακλάδωσης (Τύπου Ι) BEQ, BNE Εντολή Μεταπήδησης ή Επιστροφής από Διαδικασία (Τύπου R) JR Εντολή Κλήσης Διαδικασίας (Τύπου R) JALR

Σημειογραφία Σε κάθε διεύθυνση της μνήμης είναι αποθηκευμένο 1 byte. To Χ σαν διεύθυνση μνήμης στην οποία είναι αποθηκευμένος ένας τελεστέος σημαίνει τη διεύθυνση μνήμης στην οποία είναι αποθηκευμένο το περισσότερο σημαντικό byte του τελεστέου (Big Endian) Στη διεύθυνση X+k-1 είναι αποθηκευμένο το λιγότερο σημαντικό byte του τελεστέου, όταν αυτός έχει μέγεθος k bytes Η τιμή του τελεστέου είναι Mem[Χ]. Τα ψηφία ενός byte της μνήμης αριθμούνται έτσι, ώστε LSB=0 και MSB=7 reg[x] = το περιεχόμενο του καταχωρητή $X των 32 ψηφίων Τα ψηφία ενός καταχωρητή αριθμούνται έτσι, ώστε LSB=0 και MSB=31

Εντολές Φόρτωσης & Αποθήκευσης (Τύπου Ι) Εντολή Περιγραφή LW $t1,100($gp) 100($ Load word SW $t1,100($gp) Store word

Εντολές Φόρτωσης & Αποθήκευσης Ακεραίων (Τύπου Ι) LW rt,immediate(rs) op=0x23 address <= sign _ extend(immediate) + reg[rs] reg[rt] <= Mem[address] Παράδειγμα : LW $t1,100($gp) Φόρτωση στον $9 του τελεστέου μεγέθους 32 ψηφίων, που βρίσκεται σε 4 διαδοχικά bytes της μνήμης στη διεύθυνση X <= 100+reg[28] 31 Mem[X] 24 16 8 0=LSB Mem[X+1] Mem[X+2] Mem[X+3] ($9 = $t1) Το περιεχόμενο του $9 μετά την εκτέλεση της εντολής 31 26 21 16 0=LSB op=35 rs = 28 rt = 9 immediate = 100 6 Bits 5 Bits 5 Bits 16 Bits (κωδικοποίηση της εντολής του παραδείγματος) (IR) = 32 Bits

Εντολές Φόρτωσης & Αποθήκευσης Ακεραίων (Τύπου Ι) SW rt,immediate(rs) op=0x2b address <= sign _ extend(immediate) + reg[rs] Mem[address] <= reg[rt] (word) Παράδειγμα : SW $t1,100($gp) Αποθήκευση στη μνήμη στη διεύθυνση X <= 100+reg[28] του τελεστέου μεγέθους μγ 32 ψηφίων, που βρίσκεται στον $t1 = $9 $9(31..24) $9(23..16) $9(15..8) $9(7..0) Διεύθυνση X X+1 X+2 X+3 Το περιεχόμενο των 4 διαδοχικών θέσεων μνήμης μετά την εκτέλεση της εντολής 31 26 21 16 0=LSB op=43 rs = 28 rt = 9 immediate = 100 6 Bits 5 Bits 5 Bits 16 Bits (κωδικοποίηση της εντολής του παραδείγματος) (IR) = 32 Bits

Εντολή Αριθμητικές και Λογικές Εντολές (Τύπου Ι) Περιγραφή ΑDDIU $t1,$s1,100$s1 100 Addition immediate unsigned (με επέκταση πρόσημου χωρίς έλεγχο υπερχείλισης) ΑNDI $t1,$s1,100 AND immediate (με επέκταση μηδενός) ORI $t1,$s1,100 OR immediate (με επέκταση μηδενός) ΧΟRI $t1,$s1,100, XOR immediate (με επέκταση μηδενός)

Αριθμητικές και Λογικές Εντολές (Τύπου Ι) ADDIU rt, rs, immediate op=0x09 reg[rt] <= reg[rs] + sign_extend(immediate) Παράδειγμα : ADDIU $t1, $s1, 100 Αποθήκευση στον καταχωρητή $t1 = $9 του αθροίσματος του καταχωρητή $s1 = $17 με το περιεχόμενο του πεδίου immediate, αφού ύέχει υποστεί επέκταση πρόσημου. Δεν λαμβάνεται υπόψη η υπερχείλιση. 31 26 21 16 0=LSB op=9 rs = 17 rt = 9 immediate = 100 6 Bits 5 Bits 5 Bits 16 Bits (κωδικοποίηση της εντολής του παραδείγματος) (IR) = 32 Bits

Αριθμητικές και Λογικές Εντολές (Τύπου Ι) ANDI rt, rs, immediate op=0x0c reg[rt] <= reg[rs] AND zero_extend(immediate) Παράδειγμα : ANDI $t1, $s1, 100 Αποθήκευση στον καταχωρητή $t1 = $9 της λογικής πράξης AND ανά ψηφίο του καταχωρητή $s1 = $17 με το περιεχόμενο του πεδίου immediate, αφού έχει υποστεί επέκταση μηδενός. 31 26 21 16 0=LSB op=12 rs = 17 rt = 9 immediate = 100 6 Bits 5 Bits 5 Bits 16 Bits (κωδικοποίηση της εντολής του παραδείγματος) (IR) = 32 Bits

Αριθμητικές και Λογικές Εντολές (Τύπου Ι) ORI rt, rs, immediate op=0x0d reg[rt] <= reg[rs] OR zero_extend(immediate) Παράδειγμα : ORI $t1, $s1, 100 Αποθήκευση στον καταχωρητή $t1 = $9 της λογικής πράξης OR ανά ψηφίο του καταχωρητή $s1 = $17 με το περιεχόμενο του πεδίου immediate, αφού έχει υποστεί επέκταση μηδενός. 31 26 21 16 0=LSB op=13 rs = 17 rt = 9 immediate = 100 6 Bits 5 Bits 5 Bits 16 Bits (κωδικοποίηση της εντολής του παραδείγματος) (IR) = 32 Bits

Αριθμητικές και Λογικές Εντολές (Τύπου Ι) XORI rt, rs, immediate op=0x0e reg[rt] <= reg[rs] XOR zero_extend(immediate) Παράδειγμα : XORI $t1, $s1, 100 Αποθήκευση στον καταχωρητή $t1 = $9 της λογικής πράξης XOR ανά ψηφίο του καταχωρητή $s1 = $17 με το περιεχόμενο του πεδίου immediate, αφού έχει υποστεί επέκταση μηδενός. 31 26 21 16 0=LSB op=14 rs = 17 rt = 9 immediate = 100 6 Bits 5 Bits 5 Bits 16 Bits (κωδικοποίηση της εντολής του παραδείγματος) (IR) = 32 Bits

Αριθμητικές και Λογικές Εντολές (Τύπου R) Εντολή Περιγραφή ΑDDU $s1,$s2,$s3 $ $ Addition Unsigned (χωρίς έλεγχο υπερχείλισης) SUBU $s1,$s2,$s3 Subtract Unsigned (χωρίς έλεγχο υπερχείλισης) ΑND $s1,$s2,$s3$s2 $s3 OR $s1,$s2,$s3 ΧΟR $s1,$s2,$s3 NOR $s1,$s1,$zero AND (ανά ψηφίο) OR (ανά ψηφίο) XOR (ανά ψηφίο) NOR (ανά ψηφίο)

Αριθμητικές και Λογικές Εντολές (Τύπου R) ADDU rd, rs, rt op=0x00 funct=0x21 reg[rd] <= reg[rs] + reg[rt] Παράδειγμα : ADDU $s1, $s2, $s3 Αποθήκευση στον καταχωρητή $s1 = $17 του αθροίσματος των περιεχομένων των καταχωρητων $s2 = $18 και $s3 = $19, αντίστοιχα. Δεν λαμβάνεται υπόψη η υπερχείλιση. 31 26 21 16 11 6 0=LSB op=0 rs=18 rt=19 rd=17 shamt=0 funct=33 (IR) 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits (κωδικοποίηση της εντολής του παραδείγματος)

Αριθμητικές και Λογικές Εντολές (Τύπου R) SUBU rd, rs, rt op=0x00 funct=0x23 reg[rd] <= reg[rs] - reg[rt] Παράδειγμα : SUBU $s1, $s2, $s3 Αποθήκευση στον καταχωρητή $s1 = $17 της διαφοράς των περιεχομένων των καταχωρητων $s2 = $18 και $s3 = $19, αντίστοιχα. Δεν λαμβάνεται υπόψη η υπερχείλιση. 31 26 21 16 11 6 0=LSB op=0 rs=18 rt=19 rd=17 shamt=0 funct=35 (IR) 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits (κωδικοποίηση της εντολής του παραδείγματος)

Αριθμητικές και Λογικές Εντολές (Τύπου R) AΝD rd, rs, rt op=0x00 funct=0x24 reg[rd] <= reg[rs] AND reg[rt] Παράδειγμα : AND $s1, $s2, $s3 Αποθήκευση στον καταχωρητή $s1 = $17 της λογικής πράξης AND ανά ψηφίο των περιεχομένων των καταχωρητων $s2 = $18 και $s3 = $19, αντίστοιχα. 31 26 21 16 11 6 0=LSB op=0 rs=18 rt=19 rd=17 shamt=0 funct=36 (IR) 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits (κωδικοποίηση της εντολής του παραδείγματος)

Αριθμητικές και Λογικές Εντολές (Τύπου R) OR rd, rs, rt op=0x00 funct=0x25 reg[rd] <= reg[rs] OR reg[rt] Παράδειγμα : OR $s1, $s2, $s3 Αποθήκευση στον καταχωρητή $s1 = $17 της λογικής πράξης OR ανά ψηφίο των περιεχομένων των καταχωρητων $s2 = $18 και $s3 = $19, αντίστοιχα. 31 26 21 16 11 6 0=LSB op=0 rs=18 rt=19 rd=17 shamt=0 funct=37 (IR) 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits (κωδικοποίηση της εντολής του παραδείγματος)

Αριθμητικές και Λογικές Εντολές (Τύπου R) XOR rd, rs, rt op=0x00 funct=0x26 reg[rd] <= reg[rs] XOR reg[rt] Παράδειγμα : XOR $s1, $s2, $s3 Αποθήκευση στον καταχωρητή $s1 = $17 της λογικής πράξης XOR ανά ψηφίο των περιεχομένων των καταχωρητων $s2 = $18 και $s3 = $19, αντίστοιχα. 31 26 21 16 11 6 0=LSB op=0 rs=18 rt=19 rd=17 shamt=0 funct=38 (IR) 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits (κωδικοποίηση της εντολής του παραδείγματος)

Αριθμητικές και Λογικές Εντολές (Τύπου R) NOR rd, rs, rt op=0x00 funct=0x27 reg[rd] <= reg[rs] NOR reg[rt] Παράδειγμα : NOR $s1, $s1, $zero Αντιστροφή του περιεχομένου του καταχωρητή $s1 = $17 Η πιο συνηθισμένη χρήση της εντολής NOR 31 26 21 16 11 6 0=LSB op=0 rs=17 rt=0 rd=17 shamt=0 funct=39 (IR) 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits (κωδικοποίηση της εντολής του παραδείγματος)

Εντολές Ολίσθησης (Τύπου R) Εντολή Περιγραφή SLL $s1,$s2, $ 3 Shift left logical l (σταθερός αριθμός ολισθήσεων) SRL $s1,$s2, 3 Shift right logical (σταθερός αριθμός ολισθήσεων) SRA $s1,$s2, 3 Shift right arithmetic (σταθερός αριθμός ολισθήσεων με επέκταση πρόσημου) SLLV $s1,$s2,$s3 $s2 $s3 Shift left logical variable (μεταβλητός αρ. ολισθήσεων) SRLV $s1,$s2,$s3 Shift right logical variable (μεταβλητός αρ. ολισθήσεων) SRAV $s1,$s2,$s3 Shift right arithmetic variable (μεταβλητός αριθμός ολισθήσεων με επέκταση πρόσημου) NOP No operation (κάνει μόνο καθυστέρηση) Ψευδο-εντολή εντολή Η περιστροφή γίνεται με ψευδο-εντολές εντολές

Εντολές Ολίσθησης (Τύπου R) SLL rd, rt, shamt op=0x00 funct=0x00 reg[rd] <= reg[rt] shifted left logical by shamt Παράδειγμα : SLL $s1, $s2, 3 Αριστερή λογική ολίσθηση του περιεχομένου του καταχωρητή $s2 = $18 κατά 3 (από 0 μέχρι 31) και αποθήκευση στον καταχωρητή $s1 = $17. Η ψευδο-εντολή NOP μετατρέπεται στην εντολή SLL $zero, $zero, 0 με κωδικοποίηση όλα-0 31 26 21 16 11 6 0=LSB op=0 rs=0 rt=18 rd=17 shamt=3 funct=0 (IR) 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits (κωδικοποίηση της εντολής του παραδείγματος)

Εντολές Ολίσθησης (Τύπου R) SRL rd, rt, shamt op=0x00 funct=0x02 reg[rd] <= reg[rt] shifted right logical by shamt Παράδειγμα : SRL $s1, $s2, 3 Δεξιά λογική ολίσθηση του περιεχομένου του καταχωρητή $s2 = $18 κατά 3 (από 0 μέχρι 31) και αποθήκευση στον καταχωρητή $s1 = $17. 31 26 21 16 11 6 0=LSB op=0 rs=0 rt=18 rd=17 shamt=3 funct=2 (IR) 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits (κωδικοποίηση της εντολής του παραδείγματος)

Εντολές Ολίσθησης (Τύπου R) SRΑ rd, rt, shamt op=0x00 funct=0x03 reg[rd] <= reg[rt] shifted right arithmetic by shamt Παράδειγμα : SRΑ $s1, $s2, 3 Δεξιά αριθμητική ολίσθηση (που βασίζεται στο πρόσημο) του περιεχομένου του καταχωρητή $s2 = $18 κατά 3 (από 0 μέχρι 31) και αποθήκευση στον καταχωρητή $s1 = $17. 31 26 21 16 11 6 0=LSB op=0 rs=0 rt=18 rd=17 shamt=3 funct=3 (IR) 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits (κωδικοποίηση της εντολής του παραδείγματος)

Εντολές Ολίσθησης (Τύπου R) SLLV rd, rt, rs op=0x00 funct=0x04 reg[rd] <= reg[rt] shifted left logical by reg[rs] Παράδειγμα : SLLV $s1, $s2, $s3 Μεταβλητή αριστερή λογική ολίσθηση του περιεχομένου του καταχωρητή $s2 = $18 κατά τόσα ψηφία (από 0 μέχρι 31), όσα προσδιορίζονται στον καταχωρητή $s3 = $19, και αποθήκευση στον καταχωρητή $s1 = $17. 31 26 21 16 11 6 0=LSB op=0 rs=19 rt=18 rd=17 shamt=0 funct=4 (IR) 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits (κωδικοποίηση της εντολής του παραδείγματος)

Εντολές Ολίσθησης (Τύπου R) SRLV rd, rt, rs op=0x00 funct=0x06 reg[rd] <= reg[rt] shifted right logical by reg[rs] Παράδειγμα : SRLV $s1, $s2, $s3 Μεταβλητή δεξιά λογική ολίσθηση του περιεχομένου του καταχωρητή $s2 = $18 κατά τόσα ψηφία (από 0 μέχρι 31), όσα προσδιορίζονται στον καταχωρητή $s3 = $19, και αποθήκευση στον καταχωρητή $s1 = $17. 31 26 21 16 11 6 0=LSB op=0 rs=19 rt=18 rd=17 shamt=0 funct=6 (IR) 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits (κωδικοποίηση της εντολής του παραδείγματος)

Εντολές Ολίσθησης (Τύπου R) SRΑV rd, rt, rs op=0x00 funct=0x07 reg[rd] <= reg[rt] shifted right logical by reg[rs] Παράδειγμα : SRΑV $s1, $s2, $s3 Μεταβλητή δεξιά αριθμητική ολίσθηση του περιεχομένου του καταχωρητή $s2 = $18 κατά τόσα ψηφία (από 0 μέχρι 31), όσα προσδιορίζονται στον καταχωρητή $s3 = $19, και αποθήκευση στον καταχωρητή $s1 = $17. 31 26 21 16 11 6 0=LSB op=0 rs=19 rt=18 rd=17 shamt=0 funct=7 (IR) 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits (κωδικοποίηση της εντολής του παραδείγματος)

Εντολές Σύγκρισης - Set (Τύπου Ι και R) Εντολή Περιγραφή SLTI $t0, $s0, 10 Set less than immediate If reg[s0] < 10 then reg[t0]<=1 else reg[t0]<=0 Η σύγκριση γίνεται μεταξύ προσημασμένων μ αριθμών SLT $t0, $s1, $s2 Set less than If reg[s1] < reg[s2] then reg[t0]<=1 else reg[t0]<=0 Η σύγκριση γίνεται μεταξύ προσημασμένων αριθμών Δεν υπάρχει έλεγχος υπερχείλισης. Το αποτέλεσμα της σύγκρισης είναι πάντα ορθό στην περίπτωση που οι συγκρινόμενοι προσημασμένοι αριθμοί ανήκουν στην περιοχή από 2 30-1 (0011 1111 1111 1111 1111 1111 1111 1111) μέχρι - 2 30 (1100 0000 0000 0000 0000 0000 0000 0000) Η υπόλοιπες εντολές σύγκρισης είναι ψευδο-εντολές

Εντολές Σύγκρισης - Set (Τύπου Ι) SLTI rt, rs, immediate op=0x0a IF THEN reg[rt] <= 1 ELSE reg[rt] <= 0 reg[rs] < sign_extend(immediate) Παράδειγμα : SLTI $t0, $s1, 10 Εάν το περιεχόμενο του καταχωρητή $s1 = $17 είναι μικρότερο ρ από το περιεχόμενο του πεδίου immediate (10), αφού έχει υποστεί επέκταση πρόσημου, τότε στον καταχωρητή $t0 = $8 αποθηκεύεται το 1, αλλιώς αποθηκεύεται το 0. Η σύγκριση γίνεται μεταξύ προσημασμένων αριθμών. 31 26 21 16 0=LSB op=10 rs = 17 rt = 8 immediate = 10 6 Bits 5 Bits 5 Bits 16 Bits (κωδικοποίηση της εντολής του παραδείγματος) (IR) = 32 Bits

Εντολές Σύγκρισης - Set (Τύπου R) SLT rd, rs, rt op=0x00 funct=0x2a IF reg[rs] < reg[rt] THEN reg[rd] <= 1 ELSE reg[rd] <= 0 Παράδειγμα : SLT $t0, $s1, $s2 Εάν το περιεχόμενο του καταχωρητή $s1 = $17 είναι μικρότερο ρ από το περιεχόμενο του καταχωρητή $s2 = $18, τότε στον καταχωρητή $t0 = $8 αποθηκεύεται το 1, αλλιώς αποθηκεύεται το 0. Η σύγκριση γίνεται μεταξύ προσημασμένων αριθμών. 31 26 21 16 11 6 0=LSB op=0 rs=17 rt=18 rd=8 shamt=0 funct=42 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits (κωδικοποίηση της εντολής του παραδείγματος) (IR) = 32 Bits

Εντολές Ελέγχου Ροής Προγράμματος Εντολές διακλάδωσης με συνθήκη Ο μετρητής προγράμματος (program counter - PC) περιέχει τη διεύθυνση της εντολής που πρόκειται να ανακληθεί από τη μνήμη για να εκτελεσθεί μετά την ολοκλήρωση της εκτέλεσης της τρέχουσας εντολής Για να γίνει η αλλαγή στη ροή του προγράμματος με τη χρήση εντολών διακλάδωσης με συνθήκη εξετάζεται εάν πρώτα ικανοποιείται μία συγκεκριμένη συνθήκη, που ονομάζεται συνθήκη διακλάδωσης όταν δεν ικανοποιείται η συνθήκη διακλάδωσης, η επόμενη εντολή που πρόκειται να εκτελεσθεί είναι η αμέσως επόμενη εντολή μετά την εντολή διακλάδωσης (για τον MIPS ισχύει PC = PC + 4) όταν ικανοποιείται η συνθήκη, η διεύθυνση της επόμενη εντολής που πρόκειται να εκτελεσθεί προσδιορίζεται με μετατόπιση (μ) που προστίθεται στον μετρητή προγράμματος (program counter - PC), που ήδη περιέχει τη διεύθυνση της αμέσως επόμενης εντολής μετά την εντολή διακλάδωσης (για τον MIPS ισχύει PC = PC+4+4μ) + 4μ)

Μετατόπιση PC-Σχετική Διευθυνσιοδότηση ημετατόπιση είναι ένας προσημασμένος μ ακέραιος αριθμός που προσδιορίζει τη διαφορά της διεύθυνσης της εντολής, που θα εκτελεσθεί όταν ικανοποιείται η συνθήκη, από τη διεύθυνση της αμέσως επόμενης εντολής μετά την εντολή διακλάδωσης, συμπεριλαμβάνεται στην εντολή διακλάδωσης υπό συνθήκη σαν απευθείας τιμή PC-Σχετική Διευθυνσιοδότηση (PC - relative addressing) ονομάζεται ο τρόπος διευθυνσιοδότησης της μνήμης εντολών που χρησιμοποιείται στις εντολές διακλάδωσης υπό συνθήκη που προσδιορίζουν απευθείας με μετατόπιση τη διεύθυνση της εντολής, που θα εκτελεσθεί όταν ικανοποιείται η συνθήκη.

PC-Σχετική Διευθυνσιοδότηση Εντολές διακλάδωσης υπό συνθήκη (conditional branch) Μνήμη Εντολών των 4 bytes (32 bits) oργανομένη ανά byte Πρόγραμμα με PC - σχετική διευθυν/ση ργ μ η y.. Cond_branch label Cond_branch label label: Instruction_1 Instruction_1 PC+4 Instruction_2 Instruction_3 Instruction_4 Instruction_5 Instruction_6 Instruction_7.. Η εντολή Cond_branch αλλάζει τη ροή του προγράμματος. Όταν ικανοποιείται η συνθήκη, η αμέσως επόμενη εντολή που θα εκτελεσθεί είναι η Instruction_5, που προσδιορίζεται από το label, αλλιώς είναι η Instruction_1 Instruction_2 Instruction_3 Instruction_4 Instruction_5 Instruction_6 Instruction_7 PC PC+8 PC+12 PC+16 PC+20 PC+24 PC+28 Στους επεξεργαστές MIPS, η μετατόπιση είναι η διαφορά σε αριθμό εντολών της Instruction_5 από την Instruction_1, δηλαδή +4 (4x4=16 bytes)

PC-Σχετική Διευθυνσιοδότηση Πότε χρησιμοποιείται ; για να χρησιμοποιηθεί η η PC - σχετική διευθυνσιοδότηση η πρέπει η μετατόπιση να είναι γνωστή κατά το στάδιο της μεταγλώττισης, οπότε έχουμε ανεξαρτησία θέσης (δηλαδή, δεν εξαρτάται η μετατόπιση από το που θα φορτωθεί το πρόγραμμα στη μνήμη κατά την εκτέλεση του) όταν η μετατόπιση δεν είναι γνωστή κατά το στάδιο της μεταγλώττισης, τότε η διεύθυνση της εντολής, που θα εκτελεσθεί όταν ικανοποιείται η συνθήκη, προσδιορίζεται δυναμικά κατά την εκτέλεση του προγράμματος συνήθως με διευθυνσιοδότηση η καταχωρητή, που περιέχει τη διεύθυνση αυτής της εντολής, χωρίς να αποκλείεται η χρήση κάποιου άλλου τρόπου διευθυνσιοδότησης

Εντολές Διακλάδωσης (Τύπου Ι) Εντολή Περιγραφή BEQ $s1, $s2, label l Branch on equal If reg[s1] = reg[s2] then PC <= PC + 4 + 4μ else PC <= PC + 4 BNE $s1, $s2, label Branch on not equal If reg[s1] reg[s2] then PC <= PC + 4 + 4μ else PC <= PC + 4 Ο MIPS υλοποιεί και άλλες εντολές διακλάδωσης, ενώ υπάρχουν και ψευδο-εντολές PC - σχετική διευθυνσιοδότηση: Το label προσδιορίζει την εντολή, που θα εκτελεσθεί όταν ικανοποιείται η συνθήκη, και μετατρέπεται σε μετατόπιση (μ) κατά το στάδιο της μεταγλώττισης

Εντολές Διακλάδωσης (Τύπου Ι) Στους πραγματικούς επεξεργαστές MIPS, οι εντολές διακλάδωσης είναι καθυστερημένες διακλαδώσεις δώ (delayed d branches) Πάντα εκτελείται η εντολή που ακολουθεί τη διακλάδωση, που βρίσκεται στη διεύθυνση PC+4 και ονομάζεται delay slot Μετά την εκτέλεση της delay slot, εάν ικανοποιείται η συνθήκη της διακλάδωσης, εκτελείται η εντολή που βρίσκεται στη διεύθυνση PC+4+4μ Οι καθυστερημένες διακλαδώσεις επηρεάζουν τον υπολογισμό της μετατόπισης (μ) που γίνεται με βάση το PC+4 και όχι το PC Προσοχή γιατί ο SPIM συνήθως δεν προσομοιώνει την καθυστερημένη διακλάδωση και υπολογίζει τη σχετική απόσταση με βάση το PC Προσοχή δεν θα υλοποιήσουμε καθυστερημένες διακλαδώσεις Προσοχή, δεν θα υλοποιήσουμε καθυστερημένες διακλαδώσεις, αν και θα υπολογίσουμε τη σχετική απόσταση με βάση το PC+4

Εντολές Διακλάδωσης (Τύπου Ι) BEQ rs, rt, label op=0x04 IF reg[rs] =reg[rt] THEN PC <= PC + 4 + 4μ ELSE PC <= PC + 4 Παράδειγμα : BEQ $s1, $s2, label Διεύθυνση προορισμού διακλάδωσης Διεύθυνση επόμενης εντολής Εάν το περιεχόμενο του καταχωρητή $s1 = $17 είναι ίσο με το περιεχόμενο του καταχωρητή $s2 = $18, τότε PC <= PC+4+4μ, αλλιώς PC <= PC+4. Kατά τη μεταγλώττιση αντικαθίσταται το label με την μετατόπιση, που είναι η διαφορά σε αριθμό εντολών της εντολής που προσδιορίζει το label και της εντολής που έπεται της εντολής διακλάδωσης (delay slot). Η μετατόπιση κυμαίνεται από -2 15 μέχρι 2 15-1. 31 26 21 16 0=LSB op=4 rs = 17 rt = 18 immediate = μ 6 Bits 5 Bits 5 Bits 16 Bits (κωδικοποίηση της εντολής του παραδείγματος) (IR) = 32 Bits

Εντολές Διακλάδωσης (Τύπου Ι) BΝE rs, rt, label op=0x05 IF reg[rs] reg[rt] THEN PC <= PC + 4 + 4μ ELSE PC <= PC + 4 Παράδειγμα : BNE $s1, $s2, label Διεύθυνση προορισμού διακλάδωσης Διεύθυνση επόμενης εντολής Εάν το περιεχόμενο του καταχωρητή $s1 = $17 είναι άνισο με το περιεχόμενο του καταχωρητή $s2 = $18, τότε PC <= PC+4+4μ, αλλιώς PC <= PC+4. Kατά τη μεταγλώττιση αντικαθίσταται το label με την μετατόπιση, που είναι η διαφορά σε αριθμό εντολών της εντολής που προσδιορίζει το label και της εντολής που έπεται της εντολής διακλάδωσης (delay slot). Η μετατόπιση κυμαίνεται από -2 15 μέχρι 2 15-1. 31 26 21 16 0=LSB op=5 rs = 17 rt = 18 immediate = μ 6 Bits 5 Bits 5 Bits 16 Bits (κωδικοποίηση της εντολής του παραδείγματος) (IR) = 32 Bits

Εντολές Διακλάδωσης με Συνθήκη Υλοποίηση συνθηκών προσημασμένης σύγκρισης if reg[s1] = reg[s2] go to label BEQ $s1, $s2, label if reg[s1] reg[s2] go to label SLT $t0, $s1, $s2 BΝE $t0, $zero, label if reg[s1] reg[s2] go to label SLT $t0, $s2, $s1 BΝE $t0, $zero, label if reg[s1] reg[s2] go to label BΝE $s1, $s2, label if reg[s1] reg[s2] go to label SLT $t0, $s1, $s2 BEQ $t0, $zero, label if reg[s1] reg[s2] go to label SLT $t0, $s2, $s1 BEQ $t0, $zero, label Δεν υπάρχει έλεγχος υπερχείλισης. Το αποτέλεσμα της σύγκρισης (<,,, >) είναι πάντα ορθό στην περίπτωση που οι συγκρινόμενοι προσημασμένοι αριθμοί ανήκουν στην περιοχή από 2 30-1 (0011 1111 1111 1111 1111 1111 1111 1111) μέχρι -2 30 (1100 0000 0000 0000 0000 0000 0000 0000)

Εντολές Ελέγχου Ροής Προγράμματος Εντολές μεταπήδησης (Jump) χωρίς συνθήκη η αλλαγή στη ροή του προγράμματος γίνεται πάντα χωρίς να εξετασθεί κάποια συνθήκη η διεύθυνση της επόμενης εντολής που πρόκειται να εκτελεσθεί, εάν είναι γνωστή κατά το στάδιο της μεταγλώττισης, προσδιορίζεται με PC - σχετική διευθυνσιοδότηση, αλλιώς προσδιορίζεται δυναμικά κατά την εκτέλεση του προγράμματος συνήθως με διευθυνσιοδότηση δό καταχωρητή

Εντολές Μεταπήδησης (Τύπου R) Εντολή Περιγραφή JR $t0 Jump register, PC <= reg[t0] Διευθυνσιοδότηση καταχωρητή

Εντολές Μεταπήδησης (Τύπου R) JR rs op=0x00 funct=0x08 PC <= reg[rs] Παράδειγμα : JR $t0 H ενεργή ήδιεύθυνση της εντολής που πρόκειται να εκτελεσθεί μετά τη μεταπήδηση είναι αποθηκευμένη αρχικά στον καταχωρητή $t0 = $8 και μεταφέρεται στο μετρητή προγράμματος PC. 31 26 21 16 11 6 0=LSB op=0 rs=8 rt=0 rd=0 shamt=0 funct=8 (IR) 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits (κωδικοποίηση της εντολής του παραδείγματος)

Εντολές Ελέγχου Ροής Προγράμματος Εντολές κλήσης διαδικασίας - επιστροφής από διαδικασία με την κλήση της διαδικασίας η επόμενη εντολή που πρόκειται να εκτελεσθεί είναι η πρώτη εντολή της διαδικασίας ασίας που καλείται α η διεύθυνση της πρώτης εντολής της διαδικασίας που καλείται, εάν είναι γνωστή κατά το στάδιο της μεταγλώττισης, προσδιορίζεται με PC - σχετική διευθυνσιοδότηση, αλλιώς προσδιορίζεται δυναμικά κατά την εκτέλεση του προγράμματος συνήθως με διευθυνσιοδότηση καταχωρητή μετά την ολοκλήρωση της εκτέλεσης της διαδικασίας η ροή του προγράμματος επιστρέφει στην αμέσως επόμενη εντολή μετά την εντολή κλήσης της διαδικασίας που καλεί (με την εκτέλεση της εντολής επιστροφής σαν τελευταία εντολή της διαδικασίας που καλείται) για να εκτελεσθεί η εντολή επιστροφής πρέπει η διεύθυνσή της αμέσως επόμενης εντολής μετά την εντολή κλήσης της διαδικασίας να έχει ήδη αποθηκευθεί σε καταχωρητή ή στη στοίβα κατά την εκτέλεση της εντολής κλήσης της διαδικασίας

Εντολές Ελέγχου Ροής Προγράμματος Εντολές κλήσης διαδικασίας - επιστροφής από διαδικασία Μέθοδοι διατήρησης περιεχομένων καταχωρητών για να χρησιμοποιηθούν ξανά από τη διαδικασία που καλεί μετά την εκτέλεση της διαδικασίας που καλείται η διαδικασία που καλεί σώζει τα περιεχόμενα των καταχωρητών, που θέλει να διατηρήσει και μετά την εκτέλεση της διαδικασίας που καλείται, σε μία στοίβα πριν από την κλήση της διαδικασίας που καλείται (caller - saving) η διαδικασία που καλείται σώζει τα περιεχόμενα των καταχωρητών που θα χρησιμοποιήσει κατά την εκτέλεσή της σε μία στοίβα (callee - saving) Μεταφορά παραμέτρων από τη μία διαδικασία στην άλλη γίνεται και μέσω της στοίβας Η στοίβα είναι πολύ χρήσιμη και υλοποιείται στη μνήμη του υπολογιστή

Εντολές Κλήσης Διαδικασίας (Τύπου R) Εντολή Περιγραφή JALR $t0 Jump and link register, reg[ra] <= PC+4 & PC <= reg[t0] Διευθυνσιοδότηση καταχωρητή

Εντολές Κλήσης Διαδικασίας (Τύπου R) JALR rs, rd op=0x00 funct=0x09 reg[rd] <= PC + 4 (default : rd = $ra = $31) PC <= reg[rs] Παράδειγμα : JALR $t0 Η διεύθυνση της επόμενης εντολής (PC+4) αποθηκεύεται στον $ra = $31 κατά τη διαδικασία της σύνδεσης (link). H ενεργή διεύθυνση της εντολής που πρόκειται να εκτελεσθεί μετά τη μεταπήδηση είναι αποθηκευμένη αρχικά στον καταχωρητή $t0 = $8 και μεταφέρεται στο μετρητή προγράμματος PC. 31 26 21 16 11 6 0=LSB op=0 rs=8 rt=0 rd=31 shamt=0 funct=9 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits (κωδικοποίηση της εντολής του παραδείγματος) (IR) = 32 Bits

Εντολές Επιστροφής από Διαδικασία (Τύπου R) Εντολή Περιγραφή JR $ra Jump register, PC <= reg[ra] Διευθυνσιοδότηση καταχωρητή

Εντολές Επιστροφής από Διαδικασία (Τύπου R) JR rs op=0x00 funct=0x08 PC <= reg[rs] Παράδειγμα : JR $ra H ενεργή ήδιεύθυνση της εντολής που πρόκειται να εκτελεσθεί μετά την επιστροφή από τη διαδικασία, έχει ήδη αποθηκευθεί στον καταχωρητή $ra = $31 κατά την κλήση της διαδικασίας (με τη χρήση των εντολών JAL και JALR) και μεταφέρεται στο μετρητή προγράμματος PC. 31 26 21 16 11 6 0=LSB op=0 rs=31 rt=0 rd=0 shamt=0 funct=8 (IR) 6 Bits 5 Bits 5 Bits 5 Bits 5 Bits 6 Bits = 32 Bits (κωδικοποίηση της εντολής του παραδείγματος)