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

Σχετικά έγγραφα
Αρχιτεκτονική Υπολογιστών

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

5. Σχεδιάστε ένα κύκλωμα περιττής ισοτιμίας για το βασικό κώδικα ΑSCII (7 bits).

Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής. Mic-1 MMV. Προσομοιωτής Αρχιτεκτονικής H/Y

6. Ακολουθίες μικροεντολών 7. Συμβολισμός μικροεντολών (MAL)

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

Arqitektonik Upologist n

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

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

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

3. Γλώσσα μηχανής IJVM 4. Σχεδιαστικές επιλογές 5. Κρυφή μνήμη

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

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

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

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

ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

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

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

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

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

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

Κεντρική Μονάδα Επεξεργασίας

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

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

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

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής. Εισαγωγή στους Η/Υ

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

7. Ροή ελέγχου 8. Μηχανισμοί εισόδου/εξόδου

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής. Εισαγωγή στους Η/Υ

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

Μάθημα 3.2: Κεντρική Μονάδα Επεξεργασίας

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

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009 ΑΠΑΝΤΗΣΕΙΣ

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

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

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

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

Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ. «Φέτα» ημιαγωγών (wafer) από τη διαδικασία παραγωγής ΚΜΕ

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

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

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

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

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

Δομημένος Προγραμματισμός

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

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

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

Κάθε functional unit χρησιμοποιείται μια φορά σε κάθε κύκλο: ανάγκη για πολλαπλό hardware = κόστος υλοποίησης!

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

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Απόδοση ΚΜΕ. (Μέτρηση και τεχνικές βελτίωσης απόδοσης)

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

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

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

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

Σελίδα 1 από 12. Απαντήσεις στο φυλλάδιο 55. Ερώτηση 1 η : Ένα υπολογιστικό σύστηµα αποτελείται από:

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

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

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2014

Το mic1 διανέμεται με τους όρους της GNU General Public License. Ο πηγαίος κώδικας περιέχεται στην έκδοση.

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

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

Είναι το «μυαλό» του υπολογιστή μας. Αυτός κάνει όλους τους υπολογισμούς και τις πράξεις. Έχει δική του ενσωματωμένη μνήμη, τη λεγόμενη κρυφή

Προηγμένοι Μικροεπεξεργαστές. Έλεγχος Ροής Προγράμματος

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

Μικροαρχιτεκτονική του LC3

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

MIPS Interactive Learning Environment. MILE Simulator. Version 1.0. User's Manual

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

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

Ας ξεκινήσουμε. Macro-instructions. (Assembly level) Micro-instructions Main memory. (micro-code)

Βασικές Σχεδίασης Υπολογιστών Αριθμητική Μονάδα Επεξεργασίας Κεφάλαιο 10

Στοιχεία από την αρχιτεκτονική των μικροϋπολογιστών

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

i Όλες οι σύγχρονες ΚΜΕ είναι πολυπλοκότερες!

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

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

Αρχιτεκτονικη υπολογιστων

i Throughput: Ο ρυθμός ολοκλήρωσης έργου σε συγκεκριμένο χρόνο

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μάθημα 8. 1 Στέργιος Παλαμάς

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015

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

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΛΑΜΙΑΣ. A. Μετατροπή αριθμών 1. Μετατροπή αριθμών από δεκαδικό σε δυαδικό σύστημα αρίθμησης

ΠΛΕ- 027 Μικροεπεξεργαστές 5ο μάθημα: Αρχιτεκτονική πυρήνα: υλοποίηση ενός κύκλου

Οργάνωση Η/Υ. Ο Επεξεργαστής TRN. Τμήμα Εφαρμοσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Α. Χατζηγεωργίου-Η. Σακελλαρίου

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

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

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2012

ΤΕΧΝΙΚΕΣ ΑΥΞΗΣΗΣ ΤΗΣ ΑΠΟΔΟΣΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ I

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

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 3: Εντολές λογικών πράξεων και εντολές κλήσης ρουτινών

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Παραδείγματα Προγραμματισμού σε Assembly του TRN

Οργάνωση Η/Υ. Γλώσσα Assembly. Τμήμα Εφαρμσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Α. Χατζηγεωργίου-Η. Σακελλαρίου

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

Υπολογιστικά Συστήματα Λογική Σχεδίαση Αρχιτεκτονική Η/Υ Διδάσκοντες: Δρ. Ευγενία Αδαμοπούλου, Δρ. Κώστας Δεμέστιχας

Φροντιστήριο. Παραγωγή τελικού κώδικα. Παραγωγή τελικού κώδικα

Transcript:

Αρχιτεκτονική Υπολογιστών Mic-1 και IJVM Βασικές Πηγές: Αρχιτεκτονική Υπολογιστών: μια Δομημένη Προσέγγιση, Α. Tanenbaum, Vrije Universiteit, Amsterdam. Computer Organization, W. Robinson, CS-231, Vanderbildt Univesrity. Mic-1 Programming Simulator, D. Carlson, St. Vincents College. Priniciples of Computer Organization, R. Ontko, Earlham College. Mic-1 simulator http://www.ontko.com/mic1 Mic-1MMV simulator, Rick Salter, Oberlin College. http://www.cs.oberlin.edu/~rms/mic1/ Mic-1 Architecture, Monash University. Σύνθεση: Κ.Γ. Μαργαρίτης, Πανεπιστήμιο Μακεδονίας, Τμήμα Εφαρμοσμένης Πληροφορικής.

Αρχιτεκτονική Υπολογιστών Mic-1 και IJVM Περιγραφή και στοιχεία υλοποίησης του Mic-1 Παράδειγμα Αρχιτεκτονικής Συνόλου Εντολών: IJVM Προσομοιωτής Mic-1 και Προγραμματισμός IJVM/JAS Υλοποίηση της IJVM στο Mic-1

Μικροαρχιτεκτονική Mic-1 Δύο βασικά τμήματα: Διαδρομή Δεδομένων (Datapath) = λογική αφαίρεση της CPU όπως τη 'βλέπει' η ISA. Έλεγχος (Control) = η υλοποίηση της διερμηνείας της ISA απο το επίπεδο της μικροαχιτεκτονικής.

Mic-1 Διαδρομή Δεδομένων Οι εσωτερικοί δίαυλοι και οι μονάδες επεξεργασίας και αποθήκευσης δεδομένων του επεξεργαστή Mic-1. Υλοποιεί την Αρχιτεκτονική Συνόλου Εντολών (ISA) Integer Java Virtual Machine (IJVM), υποσύνολο της JVM. Αρχιτεκτονική 32-bit word αλλά byte addressable.

Mic-1 Δίαυλοι Δίαυλος Α Έξοδος μόνο για καταχωρητή H. Είσοδος στην ALU. Δίαυλος Β Έξοδος για όλους τους άλλους καταχωρητές εκτός του MAR. Μόνο ένας καταχωρητής κάθε φορά. Είσοδος στην ALU. Δίαυλος C Είσοδος σε όλους τους καταχωρητές. Πολλοί καταχωρητές μαζί (ίσως). Έξοδος της ALU μέσω Ολισθητή.

Mic-1 Καταχωρητές (1) Καταχωρητής Διευθύνσεων Μνήμης Memory Address Register (MAR) * Περιέχει διευθύνσεις μνήμης 32 bits. Καταχωρητής Δεδομένων Μνήμης Memory Data Register (MDR) * Περιέχει δεδομένα από/προς τη μνήμη μεγέθους 32 bits. Μετρητής Προγράμματος Programm Counter (PC) * Περιέχει τη διεύθυνση της επόμενης προς εκτέλεση εντολής. Καταχωρητής Απομονωτή Μνήμης Μemory Buffer Register (MBR) * Περιέχει δεδομένα 1 byte από τη μνήμη (κωδικό λειτουργίας, opcode)

Mic-1 Καταχωρητές (2) Δείκτης Στοίβας Stack Pointer (SP) * Περιέχει τη διεύθυνση της κορυφής της στοίβας τοπικών μεταβλητών. Τοπικές Μεταβλητές Local Variables (LV) * Περιέχει τη διεύθυνση της βάσης τoυ χώρου τοπικών μεταβλητών. Δείκτης Δεξαμενής Σταθερών Constant Pool Pointer (CPP) * Περιέχει τη διεύθυνση της βάσης της περιοχής των σταθερών.

Mic-1 Καταχωρητές (3) Κορυφή της Στοίβας Top Of the Stack (TOS) * Περιέχει ή δείχνει τη κορυφή της στοίβας τοπικών μεταβλητών (διμελείς πράξεις στοίβας και κλήσεις μεθόδων). Προσωρινός Καταχωρητής Old Program Counter (OPC) * Προσωρινή αποθήκευση ενδιάμεσων αποτελεσμάτων για έλεγχο ροής προγράμματος (σε κλήσεις μεθόδων ο παλιός PC προς αποθήκευση). Καταχωτητής Βοήθειας Help regsiter (H) * Προσωρινή αποθήκευση ενδιάμεσων αποτελεσμάτων για πράξεις ALU.

Mic-1: Έλεγχος Διαδρομής Δεδομένων Β bus enable * Επιλογή ενός καταχωρητή για εγγραφή στο Δίαυλο B. C bus enable * Επιλογή καταχωρητών για ανάγνωση από το Δίαυλο C. Έλεγχος ALU * 6 σήματα για επιλογή πράξεων ALU, τα F0, F1, ENA, ENB, INVA, INC. N και Ζ * Negative και Zero σήματα προς έλεγχο- επιλογή επόμενης λειτουργίας. Shifter Control * Έλεγχος Ολίσθησης SLL8 (Shift Left Logical 8 bits) SRA1(Shift Right Arithmetic 1 bit)

Αριθμητική Λογική Μονάδα (1) Μια 1-bit ALU.

Αριθμητική Λογική Μονάδα (2) Οκτώ 1-bit ALUs συνεδεδεμένες σε μια 8-bit ALU. Δεν φαίνονται τα σήματα INVΑ και ΕΝΑ, ΕΝΑΒ.

Έλεγχος Αριθμητικής Λογικής Μονάδας Συνδυασμοί σημάτων ελέγχου της ALU και οι πράξεις που αντιστοιχούν σε αυτούς.

Ολισθητής Αριστερός/Δεξιός 1-bit Ολισθητής.

Κυκλώματα Μανδάλωσης (Latches) και Δισταθή Κυκλώματα (Flip-Flops) Κύλώμα Χρονισμού. Κύκλωμα Μανδάλωσης. Δισταθές κύκλωμα D.

Σύνδεση Καταχωρητή σε Διαύλους Το CK ('χρονισμός') ελέγχει την είσοδο ενώ το ΟΕ ('απομονωτής') ελέγχει την έξοδο.

Χρονισμός Διαδρομής Δεδομένων (1) Διάγραμμα χρονισμού ενός πλήρους κύκλου ρολογιού.

Χρονισμός Διαδρομής Δεδομένων (2) Κάθε κύκλος ρολογιού αντιστοιχεί σε μια μικροεντολή. Ο κύκλος χωρίζεται σε 5 'λογικούς' υπο-κύκλους: (Δw)σταθεροποίηση σημάτων, (Δx) έξοδος από καταχωρητές προς διαύλους Α, Β, (Δy) πράξεις και ολίσθηση, (Δz) είσοδος από δίαυλο C προς καταχωρητές, (..) σταθεροποίηση. Οι καταχωρητές ελέγχονται ουσιαστικά από την κάθοδο και την άνοδο της ακμής του ρολογιού: Kάθοδος = εγγραφή σε δίαυλο A, Β. Άνοδος = ανάγνωση από δίαυλο C. Η ALU δουλεύει συνεχώς αλλά η έξοδός της είναι ορθή μόνο στο τέλος του υποκύκλου (Δy). Απαιτείται: * Αυστηρός χρονισμός διαύλων * Σχετικά μακρός κύκλος ρολογιού * Ακριβής γνώση καθυστερήσεων διάδοσης σήματος στην ALU * Γρήγορη ανάγνωση / εγγραφή σε καταχωρητές.

Mic-1: Λειτουργία Μνήμης (1) Δύο θύρες μνήμης: * Μια R/W 32-bit (word addressable) για δεδομένα, MDR <=> mem(mar) bytes 0, 4, 8,... Σήματα ελέγχου READ, WRITE * Μια RΟ 8-bit (byte addressable) για εντολές, low-bytembr <= mem(pc) bytes 0, 1, 2... Σήμα ελέγχου FETCH. Ειδικός έλεγχος MBR (δυο βέλη): * απρόσημος (index/offset): 0x000low-byteMBR * προσημασμένος (sign extention): 0x000low-byteΜΒR ή 0x111low-byteMBR

Mic-1: Λειτουργία Μνήμης (2) word byte 000C 000C 0000 000D 0000 000E 0000 0000 000F 0008 0000 0008 0000 0009 0000 000A 000B 0004 0000 0004 0000 0005 0000 0006 0000 0007 0000 Διευθύνσεις 0000 0000 0001 0000 0002 0003 PC = 0000 PC+1 = 0001 MAR = 0000 MAR+1 = 0004 LV = 0004 LV+1 = 0008 SP = 0004 SP+1 = 0008 byte-addressable word-addessable

Mic-1: Λειτουργία Μνήμης (3) Απεικόνιση των bits του MAR στο δίαυλο διευθύνσεων ώστε η φυσική byte addressable μνήμη να αντιστοιχεί με λογική word addessable μνήμη για τα δεδομένα.

Μικροεντολές Η μορφή μικροεντολής του Mic-1. Addr : Διεύθυνση πιθανής επόμενης μικροεντολής. JAM : Προσδιορίζει πώς επιλέγεται η επόμενη μικροεντολή. ALU : Πράξεις ALU και Ολισθητή. C : Επιλογή καταχωρητών που θα διαβάσει δεδομένα από το δίαυλο C. Mem: Λειτουργίες Μνήμης Β : Επιλογή καταχωρητή που θα γράψει δεδομένα στο δίαυλο Β.

Ελεγχος Μικροεντολών *ROM μικροεντολών μεγέθους 512x36 bits. *H προς εκτέλεση μικροεντολή βρικεται στο Καταχωρητή Μικρο Εντολών (MIR). *Κάθε μικροεντολή ορίζει την επόμενη, όχι απαραίτητα ακολουθιακή εκτέλεση. * Ο Μετρητής Μικρο Προγράμματος (MPC) καθορίζεται από συνδυασμό - MBR - Addr - JAMN/JAMZ/JMPC - N/Z

Αποκωδικοποιητής Αποκωδικοποιητής 3-σε-8.

Μνήμη ROM Μνήμη ROM 16 λέξεων των 8 bits η κάθε μια.

Μικρο-εκτέλεση 1. Φόρτωση MIR από μικροrom(mpc). Σήματα ελέγχου Δw. 2. Σήματα προς διαδρομή δεδομένων, λειτουργίες διαύλων Α, Β. Δx. 3. Λειτουργίες ALU, Ολισθητή και Μνήμης. Δy. 4. Λειτουργίες διαύλου C, φόρτωση Ν/Ζ, φόρτωση καταχωρητών και MDR, MBR από Μνήμη. Δz. 5. Προετοιμασία νέου MPC.

Μάκρο-εκτέλεση Ανάκληση- Εκτέλεση 1. MBR = mem(pc); PC = PC + 1 2. Αποκωδικοποίηση (MBR). 3. Ανάκληση τελεστέων 4. Εκτέλεση εντολής 5. Αποθήκευση αποτελέσματος 6. Πίσω στο βήμα 11 Κάθε ένα από τα παραπάνω βήματα εκτελείται μέσω μιας σειράς μικρο-εκτελέσων. Κάθε εντολή IJVM μπορεί να απαιτεί ένα ή περισσότερους κύκλους μηχανής (clock cylcles).

Αρχιτεκτονική Υπολογιστών Mic-1 και IJVM Περιγραφή και στοιχεία υλοποίησης του Mic-1 Παράδειγμα Αρχιτεκτονικής Συνόλου Εντολών: IJVM Προσομοιωτής Mic-1και Προγραμματισμός IJVM/JAS Υλοποίηση της IJVM στο Mic-1

Στοίβες (1) Χρήση στοίβας για την αποθήκευση τοπικών μεταβλητών. (a) Ενεργή η κύρια μέθοδος A. (b) Η A έχει καλέσει τη B. (c) Η B έχει καλέσει τη C. (d) Οι C και B έχουν επιστρέψει και η A έχει καλέσει τη D.

Στοίβες (2) Χρήση μιας στοίβας τελεστέων (operands) για την εκτέλεση αριθμητικών πράξεων. (a) push LV+1 (εκεί που δείχνει ο LV συν μια θέση / word) (b) push LV+2 (c) add = (pop στην ALUinA, pop στην ALUinB, add, push ALUout) (d) pop LV

Το μοντέλο μνήμης της IJVM (1) Δεξαμενή Σταθερών Πλαίσιο Τοπικών Μεταβλητών Περιοχή Μεθόδων Στοίβα Τρεχόντων Τελεστέων Τα διάφορα μέρη του μοντέλου μνήμης της IJVM.

Το μοντέλο μνήμης της IJVM (2) Δεξαμενή Σταθερών * Δεν μπορεί να γραφεί από τη IJVM * Περιέχει σταθερές, συμβολοσειρές, δείκτες σε άλλες περιοχές μνήμη Πλαίσιο Τοπικών Μεταβλητών * Χώρος αποθήκευσης τοπικών μεταβλητών και παραμετρων για κάθε μέθοδο, όσο αυτή εκτελείται. Στοίβα Τρεχόντων Τελεστέων * Χώρος τελεστέων για τις πράξεις της τρέχουσας μεθόδου Περιοχή Μεθόδων * Περιέχει τον εκτελέσιμο κώδικα * Byte addressable

Το Σύνολο Εντολών της IJVM (1) Οι τελεστέοι byte, const, και varnum έχουν μέγεθος 1 byte. Οι τελεστέοι disp, index, και offset έχουν μέγεθος 2 bytes.

Το Σύνολο Εντολών της IJVM (2) Αριθμητικές Πράξεις IADD pop a, pop b, c=a+b, push c ISUB pop a, pop b, c=b-a, push c IINC varnum, const x = x+/-const (x τοπική μεταβλητή) varnum: σχετική διεύθυνση 1byte (από LV) const: ακέραιος 1 byte Λογικές Πράξεις IAND pop a, pop b, c=a AND b, push c IOR pop a, pop b, c=a OR b, push c

Το Σύνολο Εντολών της IJVM (3) Στοίβα και Μνήμη ILOAD varnum push x (x τοπική μεταβλητή) ISTORE varnum pop x (x τοπική μεταβλητή) BIPUSH byte push byte μετά από μετατροπή σε προσημασμένο 32 bit LDC_W index push x (x σταθερά) index: σχετική διεύθυνση 2 bytes (από CPP) Στοίβα DUP POP SWAP pop a, push a, push a (αντιγραφή) pop a (διαγραφή) pop a, pop b, push b, push a (ανταλλαγή)

Το Σύνολο Εντολών της IJVM (4) Έλεγχος Ροής GOTO offset IFEQ offset PC = PC +/- offset pop a if (a == 0) then PC = PC +/- offset IFLT offset pop a if (a < 0) then PC = PC +/- offset IF_ICMPEQ offset pop a, pop b, if (a == b) then PC = PC +/- offset offset: σχετική διεύθυνση 2bytes (PC) Βοηθητικές λειτουργίες NOP καμμία ενέργεια WIDE πρόθεμα για χρήση varnum 2 bytes αντί 1 byte

Το Σύνολο Εντολών της IJVM (5) Κλήση Μεθόδου INVOKEVIRUAL disp κλήση μεθόδου disp: σχετική έμμεση διεύθυνση 2bytes (CPP, PC) IRETURN επιστροφή από μέθοδο Οι εντολές αυτές αναλύονται παρακάτω.

Μεταγλώττιση Java σε εντολές IJVM (1)

Μεταγλώττιση Java σε εντολές IJVM (2) (a) Τμήμα κώδικα Java. (b) Η αντίστοιχη συμβολική μορφή (IJVM assembly ή JAS). (c) Ο κώδικας σε γλώσσα μηχανής IJVM (δεκαεξαδική μορφή) - σχέση μία προς μια εντολή IJVM με JAS. Συνέχεια.. (d) Κάθε εντολή σε γλώσσα μηχανής IJVM μετά την ανάκλησή της από τη μνήμη διερμηνεύεται (αποκωδικοποιείται και εκτελείται) με βάση το μικροκώδικα που βρίσκεται στη ROM του μικροπρογράμματος.

Μεταγλώττιση Java σε εντολές IJVM (3) SP k LV j i Αρχική κατάσταση και πλαίσιο τοπικών μεταβλητών Η στοίβα τελεστέων μετά από την εκτέλεση κάθε εντολής του κώδικα.

Αρχιτεκτονική Υπολογιστών Mic-1 και IJVM Περιγραφή και στοιχεία υλοποίησης του Mic-1 Παράδειγμα Αρχιτεκτονικής Συνόλου Εντολών: IJVM Προσομοιωτής Mic-1 και Προγραμματισμός IJVM/JAS Υλοποίηση της IJVM στο Mic-1

Εγκατάσταση και Χρήση (1) Μεταφόρτωση από το http://www.it.uom.gr/teaching/tanenbaum/mic1mmv Ακολουθούμε τις οδηγίες εγκατάστασης, ελέγχου λειτουργίας και παροχής βοήθειας. Παρακολούθηση Μικροεντολών, Διαδρομής Δεδομένων, Περιοχής Μεθόδου, Στοίβας, Δεξαμενής Σταθερών, Εισόδου και Εξόδου. Ιδιαίτερα χρήσιμη βοήθεια, περιλαμβάνει και εγχειρίδια προγραμματισμού. Δυνατότητα μεταβολής assembler και μικροκώδικα. Διαθέσιμος ο πηγαίος κώδικας και τεκμηρίωση ανάπτυξης. Συλλογική έργασία με GNU Public Licence (ανάπτυξη?)

Εγκατάσταση και Χρήση (2) Πακέτο Jar σε δύο 'διανομές', Ms-Windows και Linux Δομή καταλόγων, Τύποι Αρχείων bin (εκτελέσιμα) Mic1MMV_hr.jar, Mic1MMV_lr.jar, runmic1.bat lib (διαμόρφωση) ijvm.conf, mic1.properties, GNU.TXT examples (παραδείγματα) MAL / microassembler code MAL -> microisntruction code MIC1 mic1ijvm.mal: προεπιλεγμένος microassembler code JAS-IJVM / assembler code JAS -> machine code IJVM doc (τεκμηρίωση) UserGuide.jar: java -jar UserGuide.jar, UserGuide_hs.jar (μαζί) src (πηγαίος κώδικας) Mic1MMV_xxx.zip (source code for Mic-1 MMV)

Παραδείγματα (1) Φόρτωση και Εκτέλεση ενός Προγράμματος IJVM 1. Εκκίνηση προσομοιωτή. 2. Choose File > Load IJVM program (menu bar). 3. File chooser, πλοήγηση στο κατάλογο examples/jas-ijvm Examples. 4. Επιλογή: ijvmtest.ijvm. Το IJVM πρόγραμμα στη Method Area. 5. Επιλογή: Prog Speed στο Command Console (radio button Prog). 6. Click στο Run button (μπλέ δεξί βέλος) στο Command Console για να γίνει διερμηνεία του IJVM προγράμματος με το προεπιλεγμένο μικροπρόγραμμα. 7. Μετά την εκτέλεση, στο Output Console: OK 8. Δοκιμές: Back (κόκκινο αριστερό βέλος), Reset, διάφορες επιλογές Speed στο Command Console.

Παραδείγματα (2) Συνέχεια από την ιστοσελίδα των παραδειγμάτων.../mic1-examples/html Παράδειγμα 2: Συμβολομετάφραση (assembly) ενός Προγράμματος JAS Παράδειγμα 3: Νέα Συμβολομετάφραση (re- assembly) ενός Προγράμματος JAS Παράδειγμα 4: Επιλογή διαφορετικών Ταχυτήτων (Speed), Καθυστερήσεων (Delay). Τις ίδιες (και πολύ περισσότερες) πληροφορίες μπορείτε να βρείτε στο Ηelp του Mic-1. Τα παραδείγματα είναι στο Getting Started. Quick Tour στo Programm Operation/Overview και Αναλυτικά τα Menus στο Controls and Views.

Το Σύνολο Εντολών της IJVM/JAS Οι τελεστέοι byte, const, και varnum έχουν μέγεθος 1 byte. Οι τελεστέοι disp, index, και offset έχουν μέγεθος 2 bytes.

Προγραμματισμός σε JAS Από το Help του Mic-1 πηγαίνουμε στο Program Operation Using Mic1-MMV Writing JAS Programs Πρέπει να μελετήσουμε το JAS Language Specification. * Δομή και σύνταξη της JAS (μακρο εντολές assembly) * IJVM και τρείς επιπλέον εντολές HALT IN OUT Τερματισμός προγράμματος Είσοδος byte/char από το πληκτρολόγιο (Input Area) Έξοδος byte/char στην οθόνη (Output Area)

Είσοδος και Έξοδος Παραδείγματα OUT και IN BIPUSH Ox41 // Load stack A OUT // Output A getch: reread: done: IN DUP IFEQ reread GOTO done POP GOTO getch... // Input char // Duplicate char for checking // If char = 0 read again // Valid char read // Discard 0 char // Read again // Done reading

Δομή Προγράμματος JAS // All constants declared within.constant and.end-constant.constant one 1 start 32 stop 126.end-constant // Main program starts here.main // All variables declared within.var and.end-var.var j i n.end-var // Main program goes here // Program execution is terminated with a HALT statement.end-main

Εκχώρηση Με BIPUSH βάζουμε μια τιμή στη στοίβα τελεστέων Με ISTORE τη μεταφέρουμε στη στοίβα τοπικών μεταβλητών BIPUSH 32 Δεκαδικό BIPUSH 032 Οκταδικό BIPUSH 0x32 Δεκαεξαδικό BIPUSH 'M Χαρακτήρας // i = 3 BIPUSH 3 ISTORE i Χρήση ΟΝΟΜΑΤΩΝ και δεκαδικών τιμών (σε JAS)

Πολύ Απλό Πρόγραμμα JAS // ****** main ( ) {.main // ****** int x;.var x.end-var // ****** x = 10; BIPUSH 10 ISTORE x HALT // ****** }.end-main

Μερικές Πράξεις // i = 3; j = 4; n = i + j; // i = 3; j = 4; n = j i; BIPUSH 3 ISTORE i BIPUSH 3 ISTORE i BIPUSH 4 ISTORE j BIPUSH 4 ISTORE j ILOAD i ILOAD j IADD ISTORE n ILOAD j ILOAD i ISUB ISTORE n

Απόφαση // if (i!= 3) k = 0; // if (i == 3) k =0 else k = 1; ILOAD i BIPUSH 3 IF_ICMPEQ L1 BIPUSH 0 ISTORE k L1:... ILOAD i BIPUSH 3 IF_ICMPEQ L1 BIPUSH 1 ISTORE k GOTO L2 L1:BIPUSH 0 ISTORE k L2:.. Χρήση LABELS για ονομασία σχετικών διευθύνσεων (σε JAS) Πιθανή αντιστροφή συνθήκης για απόδοση.

Επανάληψη x = 0; while (x < n) {... x = x+1; } x = 0; L1: if ((x-n) < 0) goto L2 else goto L3 L2:... x = x+1; goto L1; L3:... // x = 1; BIPUSH 0 ISTORE x // if ((x-n) < 0) L1:ILOAD x ILOAD n ISUB IFLT L2 GOTO L3 L2:... // x = x+1; IINC x 1 GOTO L1 L3:...

Άσκηση (1) Γράψτε τον κώδικα σε IJVM σε δεκαεξαδική μορφή αλλά και σε Java. Ποιά θα είναι η τιμή του x στο τέλος της εκτέλεσης; L1: BIPUSH 3 ISTORE i BIPUSH 1 ISTORE x ILOAD i IFLT L2 ILOAD x DUP IADD ISTORE x IINC i -1 GOTO L1 L2:...

Άσκηση (2) Έστω οτι αρχικά ο SP δείχνει στη τιμή 11111111111111111111111111111101 = -3 Η περιοχή των μεθόδων περιέχει τα παρακάτω και ο PC δείχνει στη πρώτη θέση. PC 01011001 10011011 Τι θα περιέχει η στοίβα στο τέλος; 00000000 00000110 10100111 00000000 00000111 00010000 00000000 01011111 01100100

Πρόγραμμα JAS (1) // Ένα for loop. Συγκρίνετε με το while loop σε προηγούμενη παρουσίαση // Πως αλλιώς θα μπορούσε να γίνει? Εκτύπωση των x, i?.main BIPUSH 0 // x = 0 ISTORE x BIPUSH 0 // for (i = 0; i < 20; i++) ISTORE i // i = 0 L1: BIPUSH 19 // if (19 i) < 0 goto L2 ILOAD i ISUB IFLT L2 ILOAD x // x = x + i ILOAD i IADD ISTORE x IINC i 1 // i++ GOTO L1 // endfor L2: HALT.end-main

Πρόγραμμα JAS (2) // Display all printable ASCII characters.constant one 1 start 32 stop 126.end-constant.main LDC_W start // Load on top of stack constant start next: DUP // Duplicate top of stack:keep this for counter OUT // Display top of stack DUP // Duplicate top of stack for subtraction LDC_W stop // Load on stack constant stop ISUB // Pop two values, subtract and push on top of stack IFEQ done // If stop is reached go to done LDC_W one // Load on top of stack one IADD // Pop two values, add and push on top of stack GOTO next // Loop again done: POP // Empty stack from counter HALT // End.end-main

Ασκήσεις Προγραμματισμού (1) Να παραχθεί το πρόγραμμα εμφάνισης των χαρακτήρων ASCII ξεκινώντας από πρόγραμμα Java και με τη βοήθεια templates. Τι παρατηρείτε; Να εκτελεστούν τα αρχικά προγράμματα IJVM στο προσομοιωτή. Να γραφούν και να εκτελεστούν μικρά προγράμματα ελέγχου templates από C/Java σε IJVM/JAS. Να γραφεί ένα απλό πρόγραμμα πολλαπλασιασμού δύο ακεραίων. Να μη ληφθούν υπ' όψη περιπτώσεις υπερχείλισης. Να γραφεί ένα απλό πρόγραμμα ακέραιας διαίρεσης. Δεδομένων δύο αριθμών a >= b υπολογίζουμε τα x, y ώστε a = b * x + y. x=0; c=a; while (c >= b) { x=x+1; c=c-b; } y=c;

Ασκήσεις Προγραμματισμού (2) Σε όλες τις παραπάνω ασκήσεις να δοθεί έμφαση όχι μόνο στην ορθότητα του προγράμματος αλλά επίσης: 1. Στην δεκαεξαδική μορφή του κώδικα (JAS σε IJVM). 2. Στις περιοχές μνήμης, την εξέλιξή τους, τις μεθόδους που χρησιμοποιεί η IJVM να 'μεταφράσει' τις διευθύνσεις από λογικές σε φυσικές. 3. Στην εκτέλεση του προγράμματος σε επίπεδο IJVM και σε επίπεδο κύκλου μηχανής. 4. Τη παρακολούθηση της Διαδρομής Δεδομένων, τις αλλαγές των τιμών των καταχωρητών, τη λειτουργία της ALU.

Κλήση Μεθόδου στη IJVM (1) INVOKEVIRTUAL methodname * Όνομα methodname = δείκτης στη (διεύθυνση στη) Περιοχή Μεθόδων, στην αρχή της μεθόδου (PC μετά τη κλήση). Έχει μέγεθος 2 bytes και προστίθεται στο CPP για να δώσει τη νέα τιμή του PC. * Φορτώνει τη σταθερά OBJREF στη στοίβα πριν από τη κλήση * Φορτώνει παραμέτρους που πρέπει να περάσουν στη μέθοδο * Εκτελεί την κλήση: - ρύθμιση νέων PC, SP, LV - αποθήκευση παλιών PC, SP, LV - μεταφορά ελέγχου OBJREF * Δείκτης σε Object (αντικείμενο): στη Java κάθε μέθοδος σχετίζεται με αντικείμενα. * Στη IJVM χρησιμοποιούμε ένα ψευδο-δείκτη 0x40

Κλήση Μεθόδου στη IJVM (2) Bytes 0,1 = no of params Bytes 2,3 = local var frame size Byte 4 = first instruction New Method methodname New PC Δεξαμενή Σταθερών Στοίβα Τοπικών Μεταβλητών Περιοχή Μεθόδων Στοίβα Τρεχόντων Τελεστέων Υπολογισμός PC κατά τη κλήση μεθόδου με όνομα methodname. Τα πρώτα 4 bytes έχουν ειδική σημασία.

Κλήση Μεθόδου στη IJVM (3) Εκτέλεση INVOKEVIRTUAL methodname * O PC της καλούσας μεθόδου αυξάνεται κατά ένα, ώστε να είναι έτοιμος για την επιστροφή. Αποθηκεύεται προσωρινά στο OPC. * Φορτώνεται ο νέος PC. * Φορτώνεται ο αριθμός των παραμέτρων και ο αριθμός των τοπικών μεταβλητών ώστε να καθοριστούν οι νέες τιμές των SP, LV. * Φορτώνεται ο νέος SP. * Οι PC, LV της καλούσας μεθόδου σώζονται στη κορυφή του νέου stack. * Στη θέση του OBJREF σώζεται η διεύθυνση του PC της καλούσας μεθόδου (link ptr) * O PC της νέας μεθόδου αυξάνεται κατά ένα, δείχνει στη πρώτη εντολή. * Φορτώνεται νέος LV. *...

Κλήση Μεθόδου στη IJVM (4) 2.Φόρτωση νέου PC μέσω CPP 3.Υπολογισμός και φόρτωση νέου SP 4. Σώσιμο παλιών PC,LV 1.Εισαγωγή OBJREF 5. Link προς παλιό PC 6. Φόρτωση νέου LV. (a) Η μνήμη πριν την εκτέλεση της INVOKEVIRTUAL. (b) Η μνήμη μετά την εκτέλεσή της.

Επιστροφή Μεθόδου στη IJVM (1) Εκτέλεση IRETURN * Ο τρέχων SP αποθηκεύεται προσωρινά στο TOS. * Φορτώνεται ως προηγούμενος SP ο τρέχων LV. * Φορτώνεται o προηγούμενος PC μέσω του LV. * Φορτώνεται ο προηγούμενος LV (πάνω από προηγούμενο PC). * Στη θέση του δείκτη θέσης (εκεί που δείχνει ο SP) αποθηκεύεται η επιστρεφόμενη τιμή (αυτή που δείχνει ο TOS). Όλες οι άλλες τιμές χάνονται, μόνο μια τιμή επιστρέφεται. *...

Επιστροφή Μεθόδου στη IJVM (2) 3. Πρώην LV πάνω από πρώην PC 2. Πρώην PC εκεί που δείχνει ο πρώην SP ή ο LV 4. Τιμή Επιστροφής 1. Πρώην SP εκεί που δείχνει ο o LV πρώην SP (a) Η μνήμη πριν την εκτέλεση της IRETURN. (b) Η μνήμη μετά την εκτέλεσή της.

Μέθοδοι σε JAS (1)... μετά το end-main // All methods declared within method declaration.method methodname1 (param-1, param-2..).var // Local variables.end-var // A method ends with IRETURN.end-method.method methodname2 (param-1, param-2..).var // Local variables.end-var // A method ends with IRETURN.end-method

Πολύ Απλή Μέθοδος JAS (1) // ***** OBJREF.constant objref 0xCAFE.end-constant // ****** main ( ) {.main // ****** int x, y, z;.var x y z.end-var // ****** x = 10; BIPUSH 10 ISTORE x // ****** y = 11; BIPUSH 11 STORE y // ****** z = cmp (x, y); ILOAD x ILOAD y NVOKEVIRTUAL cmp ISTORE z HALT // ****** }.end-main

Πολύ Απλή Μέθοδος JAS (2) // ***** int cmp (int p1, int p2) {.method cmp(p1,p2).var temp.end-var // ***** temp = p2 - p1 ILOAD p1 ILOAD p2 ISUB ISTORE temp // ***** if (temp < 0) go to lt ILOAD temp IFLT lt // ***** if (temp == 0) go to eq ILOAD temp IFEQ eq // ***** return 1 (temp > 0) gt: BIPUSH 1 GOTO done // ***** return -1 (temp < 0) lt: BIPUSH -1 GOTO done // ***** return0 (temp == 0) eq: BIPUSH 0 // ***** }; done: IRETURN.end-method

Ασκήσεις Προγραμματισμού - Μέθοδοι Να γραφούν απλές μέθοδοι για την εισαγωγή και εμφάνιση τοπικής μεταβλητής, του τύπου getchar(int x) και putchar(int x). Να γραφούν απλές μέθοδοι της μορφής max(int x, int y) min (int x, int y) Να γραφούν απλές μέθοδοι της μορφής mul(int x, int y) div(int x, int y) mod(int x, int y) abs(int x) Να γραφούν απλές μέθοδοι για την επαναληπτική άθροιση, εύρεση μεγίστου/ ελαχίστου 10 αριθμών αποθηκευμένων σε διαδοχικές θέσεις μνήμης. Ισχύουν οι παρατηρήσεις των προηγουμένων ασκήσεων προγραμματισμού.

Περιορισμοί * Δείκτες (Pointers = Διευθύνσεις). * Call by Reference (Παράμετρος τύπου Δείκτη) άρα και επιστροφή τιμών. * Πίνακες (Αύξηση Δείκτη). * Δυναμικοί Πίνακες.

Αρχιτεκτονική Υπολογιστών Mic-1 και IJVM Περιγραφή και στοιχεία υλοποίησης του Mic-1 Παράδειγμα Αρχιτεκτονικής Συνόλου Εντολών: IJVM Προσομοιωτής Mic-1 και Προγραμματισμός IJVM/JAS Υλοποίηση της IJVM στο Mic-1

Μικροαρχιτεκτονική Mic-1 * ΜικροROM μικροεντολών (MROM) μεγέθους 512x36 bits. * Ο Μετρητής Μικρο Προγράμματος (MPC) δείχνει τη προς εκτέλεση μικροεντολή. * Η μικροεντολή προσκομίζεται στο Καταχωρητή Μικρο Εντολών (MIR). * Κάθε μικροεντολή ορίζει την επόμενη, όχι απαραίτητα ακολουθιακή εκτέλεση.

Χρονισμός Mic-1 Διάγραμμα χρονισμού ενός πλήρους κύκλου ρολογιού.

Μικρο-εκτέλεση Mic-1 1. Φόρτωση MIR από μικροrom(mpc). Σήματα ελέγχου Δw. 2. Σήματα προς διαδρομή δεδομένων, λειτουργίες διαύλων Α, Β. Δx. 3. Λειτουργίες ALU, Ολισθητή και Μνήμης. Δy. 4. Λειτουργίες διαύλου C, φόρτωση Ν/Ζ, φόρτωση καταχωρητών και MDR, MBR από Μνήμη. Δz. 5. Προετοιμασία νέου MPC. Κάθε Μικροεντολή = 'Ενας κύκλος ρολογιού

Μικροεντολές Η μορφή μικροεντολής του Mic-1. Addr : Διεύθυνση πιθανής επόμενης μικροεντολής (9) JAM : Προσδιορίζει πώς επιλέγεται η επόμενη μικροεντολή (3) ALU : Πράξεις ALU και Ολισθητή (6 ALU και 2 Shit) C : Επιλογή καταχωρητών που θα διαβάσει δεδομένα από το δίαυλο C (9). Mem: Λειτουργίες Μνήμης (3) Β : Επιλογή καταχωρητή που θα γράψει δεδομένα στο δίαυλο Β (4).

Συμβολισμός Μικροεντολών Ετικέτα: Διεύθυνση ΜROM (NEXT_ADDRESS) πχ iadd1 Λειτουργίες: Σε μορφή Register Transfer Language (MAL) πχ MAR = SP = SP 1; rd Σχόλια: Εξήγηση των λειτουργιών Και οι δύο μορφές ορατές στο Προσομοιωτή.

Μικροεντολές και Λειτουργίες (1) Όλες οι επιτρεπόμενες λειτουργίες σε επίπεδο μικροεντολής. Ουσιαστικά εκτελούνται όλες μέσω της ALU και του Ολισθητή. Κάθε λειτουργία μπορεί να επεκταθεί προσθέτοντας << 8 στο τέλος ώστε το αποτέλεσμα ολισθαίνει αριστερά κατά 1 byte. Για παράδειγμα, μια συνηθισμένη λειτουργία είναι η παρακάτω: H = MBR << 8

Μικροεντολές και Λειτουργίες (2) Συνδυασμοί σημάτων ελέγχου της ALU και οι πράξεις που αντιστοιχούν σε αυτούς. Για τις λειτουργίες RTL/MAL, όπου A θέτουμε H και όπου B Source.

Βασικός Κύκλος Επαναλαμβάνεται στην αρχή διερμηνείας κάθε εντολής IJVM/JAS. Αποτελεί τη βάση της αποκωδικοποίησης της εντολής. Αυξάνεται ο PC και ανακαλείται η εντολή από τη μνήμη. Ο MPC λαμβάνει ως τιμή το opcode της εντολής. Main1 PC = PC+1; fetch; goto(mbr) Άρα ο opcode της εντολής δίνει τη διεύθυνση της MROM όπου βρίσκεται η πρώτη μικροεντολή διερμηνείας της υπο εκτέλεση IJVM εντολής. Παρατηρείστε την αρχική τιμή του PC καθώς και την αρχική ακολουθία μικροεντολών ('Ασκηση).

Παράδειγμα Μικροεντολών σε RTL/MAL Ετικέτα Λειτουργία Σχόλια op1 SP = MAR = SP + 1 O SP και ο MAR λαμβάνουν τη τρέχουσα τιμή του SP αυξημένη κατά ένα. op2 PC = PC + 1; fetch O PC αυξάνεται κατά ένα. Προσοκόμιση byte από μνήμη σε MBR. op3 MDR = TOS = MBR; wr; goto Main1 O MDR και ο TOS λαμβάνουν τη τρέχουσα τιμή του MBR. Εγγραφή στη θέση μνήμης που δείχνει o MAR. Επιστροφή στην αρχική θέση της MROM. Ποιά εντολή είναι; Ποια η σημασία της διπλής εκχώρησης;

Παράδειγμα Μικροεντολών σε mic1 16 0 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0100 17 0 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 1010 02 0 0 0 0 0 1 1 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0010 Εργαζόμαστε και με τη βοήθεια του προσομοιωτή. Προσοχή στην ομαδοποίηση των καταχωρητών στο C, το δεκαεξαδικό. Έχει τη μορφή 1 4 4-1 bits (επειδή τα 36 bits αποθηκεύονται συνολοκά από το LSbit).

Άσκηση: mic1 => MAL => IJVM/JAS 1C 1D 1E 1F 20 02 0 0 0 0 0 0 0 0 0 0 0 0 000 000 000 000 000 000 0 1 0 1 1 0 10 11 10 10 10 10 1 1 1 1 1 1 00 00 00 10 01 00 1000000000 0000000001 0000000010 0000001001 0000000100 0010000000 000 000 100 010 001 000 Με τη βοήθεια του προσομοιωτή να γράψετε τον αντίστοιχο κώδικα σε MAL και στη συνέχεια να βρείτε ποια εντολή ΙJVM/JAS είναι η παραπάνω. 0101 0011 0111 0100 0001 0000

RTL/MAL: Στοίβα (0) NOP καμμία ενέργεια IADD ISUB IAND IOR DUP POP SWAP pop a, pop b, c=a+b, push c pop a, pop b, c=b-a, push c pop a, pop b, c=a AND b, push c pop a, pop b, c=a OR b, push c pop a, push a, push a pop a pop a, pop b, push b, push a

RTL/MAL: Στοίβα (1)

RTL/MAL: Στοίβα (2) Με τη βοήθεια του παραπάνω πίνακα και του προσομοιωτή μελετήστε τα παρακάτω: * Τη κωδικοποίηση των μικροεντολών που παρουσιάζονται. * Τη λειτουργία των μικροεντολών σε επίπεδο κύκλου και υποκύκλων ρολογιού. * Τη μετατροπή των διευθύνσεων με χρήση offset (MAR=SP+/-1). * Την αυξομείωση του SP και τη χρήση του καταχωρητή TOS. * Ποιά είναι η αρχική ακολουθία μικροεντολών που εκτελείται; * Τι σημαίνει το goto(mbr);

Mic-1: Λειτουργία Μνήμης Απεικόνιση των bits του MAR στο δίαυλο διευθύνσεων ώστε η φυσική byte addressable μνήμη να αντιστοιχεί με λογική word addessable μνήμη για τα δεδομένα.

RTL/MAL: Στοίβα - Μνήμη (0) ILOAD varnum push x (x τοπική μεταβλητή) ISTORE varnum pop x (x τοπική μεταβλητή) BIPUSH byte push byte μετά από μετατροπή σε προσημασμένο 32 bit LDC_W index push x (x σταθερά) index: σχετική διεύθυνση 2 bytes (από CPP) WIDE πρόθεμα για χρήση varnum 2 bytes αντί 1 byte IINC varnum, const x = x+/-const (x τοπική μεταβλητή) varnum: σχετική διεύθυνση 1byte (από LV) const: ακέραιος 1 byte

RTL/MAL: Στοίβα - Μνήμη (1)

RTL/MAL: Στοίβα - Μνήμη (2)

RTL/MAL: Στοίβα - Μνήμη (3) Με τη βοήθεια του παραπάνω πίνακα και του προσομοιωτή μελετήστε τα παρακάτω: * Την υλοποίηση της εντολής BIPUSH. Χρήση operand (τελεστέου) ως τιμή (value) και όχι αναφορά (διεύθυνση, reference). * Την επικοινωνία Στοίβας Τελεστέων και Τοπικών Μεταβλητών μέσω των καταχωρητών SP και LV. * Τι σημαίνει το MBRU; Δείτε το μοντέλο μνήμης από τη πλευρά της IJVM και της JAS.

Το μοντέλο μνήμης της IJVM Δεξαμενή Σταθερών Στοίβα Τοπικών Μεταβλητών Περιοχή Μεθόδων Στοίβα Τρεχόντων Τελεστέων Τα διάφορα μέρη του μοντέλου μνήμης της IJVM.

RTL/MAL: Στοίβα - Μνήμη (4) * Την υλοποίηση των εντολών WIDE ILOAD και WIDE ISTORE σε σχέση με τις αντίστοιχες ILOAD και ISTORE (οχι το wide1) Μελετήστε την ακολουθία μικροεντολών Η = MBRU << 8 H = MBRU OR H MAR = H + LV ή MAR = H + CPP

RTL/MAL: Στοίβα - Μνήμη (5) Η αρχική ακολουθία μικροεντολών για τις εντολές ILOAD και WIDE ILOAD. Οι διευθύνσεις είναι ενδεικτικές.

RTL/MAL: Έλεγχος Ροής (0) GOTO offset IFEQ offset PC = PC +/- offset pop a if (a == 0) then PC = PC +/- offset IFLT offset pop a if (a < 0) then PC = PC +/- offset IF_ICMPEQ offset pop a, pop b, if (a == b) then PC = PC +/- offset offset: σχετική διεύθυνση 2bytes (PC)

RTL/MAL: Έλεγχος Ροής (1)

Ελεγχος Μικροεντολών (1) * Κάθε μικροεντολή ορίζει την επόμενη, όχι απαραίτητα ακολουθιακή εκτέλεση. * Το περιεχμενο του MPC καθορίζεται από συνδυασμό - MBR - Addr - JAMN/JAMZ/JMPC - N/Z

Έλεγχος Mικροεντολών (2) Μια μικροεντολή με το πεδίο JAMZ ίσο με 1 μπορεί να έχει δύο πιθανές επόμενες εντολές, ανάλογα με τη τιμή του Ζ. FZ = (JAMZ AND Z) OR NEXT_ADDRESS Παρόμοια μια μικροεντολή με το πεδίο JAMΝ ίσο με 1 μπορεί να έχει δύο πιθανές επόμενες εντολές, ανάλογα με τη τιμή του Ζ FN = (JAMN AND N) OR NEXT_ADRESS

Έλεγχος Mικροεντολών (3) Νέα τιμή του MPC: * Αν JAM = 000 τότε NEXT_ADDRESS * Aν JAM = 001 ή 010 τότε (JAMZ AND Z) OR (JAMN AND N) OR NEXT_ADDRES όπου OR: high_order bit OR * ΑΝ JAM = 100 τότε MBR OR NEXT_ADDRESS όπου OR: 8 low_order bit OR Για τη υλοποίηση δείτε λεπτομέρειες στο βιβλίο.

Έλεγχος Mικροεντολών (4) Η κατάσταση κατά την εκκίνηση διαφόρων μικροεντολών. a) Main1. b) goto1. c) goto2. d) goto3. e) goto4. Με τη βοήθεια του προσομοιωτή μελετήστε την μικρο-εκτέλεση της εντολής IJVM/JAS goto σε ένα πραγματικό απλό πρόγραμμα.

RTL/MAL: Κλήση/Επιστροφή Μεθόδου INVOKEVIRUAL disp κλήση μεθόδου disp: σχετική έμμεση διεύθυνση 2bytes (CPP, PC) IRETURN επιστροφή από μέθοδο Άσκηση: Με τη βοήθεια του προσομοιωτή μελετήστε τις μικροακολουθίες για την κλήση και επιστροφή μεθόδου. Αντικαταστήστε τα ονόματα στα διαγράμματα με πραγματικές δεκαεξαδικές τιμές από το παράδειγμά σας.

RTL/MAL: Κλήση Μεθόδου

Κλήση Μεθόδου στη IJVM (1) Bytes 0,1 = no of params Bytes 2,3 = local var frame size Byte 4 = first instruction New Method methodname New PC Δεξαμενή Σταθερών Στοίβα Τοπικών Μεταβλητών Περιοχή Μεθόδων Στοίβα Τρεχόντων Τελεστέων Υπολογισμός PC κατά τη κλήση μεθόδου με όνομα methodname. Τα πρώτα 4 bytes έχουν ειδική σημασία.

Κλήση Μεθόδου στη IJVM (2) Εκτέλεση INVOKEVIRTUAL methodname * O PC της καλούσας μεθόδου αυξάνεται κατά ένα, ώστε να είναι έτοιμος για την επιστροφή. Αποθηκεύεται προσωρινά στο OPC. * Φορτώνεται ο νέος PC. * Φορτώνεται ο αριθμός των παραμέτρων και ο αριθμός των τοπικών μεταβλητών ώστε να καθοριστούν οι νέες τιμές των SP, LV. * Φορτώνεται ο νέος SP. * Οι PC, LV της καλούσας μεθόδου σώζονται στη κορυφή του νέου stack. * Στη θέση του OBJREF σώζεται η διεύθυνση του PC της καλούσας μεθόδου (link ptr) * O PC της νέας μεθόδου αυξάνεται κατά ένα, δείχνει στη πρώτη εντολή. * Φορτώνεται νέος LV. *...

Κλήση Μεθόδου στη IJVM (3) (a) Η μνήμη πριν την εκτέλεση της INVOKEVIRTUAL. (b) Η μνήμη μετά την εκτέλεσή της.

RTL/MAL: Επιστροφή Μεθόδου

Επιστροφή Μεθόδου στη IJVM (1) Εκτέλεση IRETURN * Ο τρέχων SP αποθηκεύεται προσωρινά στο TOS. * Φορτώνεται ως προηγούμενος SP ο τρέχων LV. * Φορτώνεται o ποηγούμενος PC μέσω του LV. * Φορτώνεται ο προηγούμενος LV (πάνω από προηγούμενο PC). * Στη θέση του δείκτη θέσης (εκεί που δείχνει ο SP) αποθηκεύεται η επιστρεφόμενη τιμή (αυτή που δείχνει ο TOS). Όλες οι άλλες τιμές χάνονται, μόνο μια τιμή επιστρέφεται. *...

Επιστροφή Μεθόδου στη IJVM (2) (a) Η μνήμη πριν την εκτέλεση της IRETURN. (b) Η μνήμη μετά την εκτέλεσή της.

Τροποποίηση Mic-1 (1) 1. Τροποποίηση Μικροαρχιτεκτονικής: αλλαγή του τρόπου εκτέλεσης μιας εντολής από το Επίπεδο Συνόλου Εντολών, χωρίς αυτό να γίνει αντιληπτό στον προγραμματιστή ανωτέρου επιπέδου (τυπική περίπτωση backward compatibility). Θα αναλυθεί στη επόμενη ενότητα. 2. Τροποποίηση Συνόλου Εντολών: αλλαγή (προσθήκη συνήθως) νέας εντολής στο Επίπεδο Συνόλου Εντολών, και συνακόλουθη εισαγωγή του αντίστοιχου μικροπρογράμματος στην μικροrom. Η αλλαγή αυτή μπορεί να βασίζεται στην υπάρχουσα μικροαρχιτεκτονική ή να συνδυάζεται με αλλαγή της όπως στο 1. Θα εξετάσουμε τη περίπτωση που βασιζόμαστε στην υπάρχουσα μικροαρχιτεκτονική. Απαιτείται αλλαγή (δες Help του προσομοιωτή) : - στο κώδικα της μικροαρχιτεκτονικής (αρχείο mic1ijvm.mal) - στο αρχείο διαμόρφωσης του assemlbler (αρχείο ijvm.conf)

Τροποποίηση Mic-1 (2) Δημιουργία εντολής IJVM/JAS IFNEQ offset 1. Τροποποίηση αρχείου mic1ijvm.mal 1.1. Εισαγωγή label ifneq1 0x9A // opcode της εντολής 1.2. Εισαγωγή RTL/MAL κώδικα ifneq1 ifneq2 ifneq3 ifneq4 MAR = SP = SP -1; rd OPC = TOS TOS = MDR Z = OPC; if (Z) goto F; else goto T 2. Τροποίηση αρχείου διαμόρφωσης ijvm.conf Εισαγωγή γραμμής 0x9A IFNEQ label

Ασκήσεις (1) * Αριθμητικές λογικές εντολές INEG pop a, -a, push -a IINV pop a, NOTa, push a * Εντολές Ελέγχου Ροής. IFGT offset IFLE offset IFGE offset if ( >0 ) goto offset if ( <=0 ) goto offset if ( >=0 ) goto offset IF_ICMPGT offset if ( x > y ) goto offset IF_ICMPGE offset if ( x >= y ) goto offset IF_ICMPLT offset if ( x < y ) goto offset IF_ICMPGE offset if ( x <= y ) goto offset

Ασκήσεις (2) * Δείκτες (Pointers == Διευθύνσεις). IPLOAD a και IPSTORE a ώστε να μπορεί μια τοπική μεταβλητή a να χρησιμοποιείται ως δείκτης σε μεταβλητή. Υποτίθεται οτι προηγουμένως έχουμε λύσει το πρόβλημα της δυναμικής εκχώρησης μνήμης. * Call by Reference (Παράμετρος τύπου Δείκτη) άρα και επιστροφή τιμών από μέθοδο. Με τη βοήθεια των Δεικτών μπορούμε να περάσουμε ως παράμετρο Δείκτη. Τι αλλάζει στη κλήση μεθόδου; Τι αλλάζει στο κώδικα της μεθόδου; * Πίνακες (Αύξηση Δείκτη) a[0] == *a, a[1] == *(a+1),.., a[i] == *(a+i) IALOAD a, i και IASTORE a, i φόρτωση από και αποθήκευση σε θέση μνήμης i words μετά από τη θέση που αρχίζει ο πίνακας a. Υποτίθεται οτι δε μας απασχολεί το θέμα της δήλωσης του πίνακα.