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

Σχετικά έγγραφα
HY340, 2009 Α. Σαββίδης. Slide 3 / 39. Slide 4 / 39

Φροντιστήριο 5 ο Τελικός κώδικας και εικονική μηχανή. Μέρος 1 ο Περιβάλλον εκτέλεσης HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

Runtime Checking (1/3) Runtime Checking (2/3) Runtime Checking (3/3) ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο

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

a = false; else a = 3.33; b = (a and c); //?

Δομές Δεδομένων (Data Structures)

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Εισαγωγή στον Προγραμματισμό

MIPS functions and procedures

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

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

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

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

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

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

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

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

Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών H/Y Department of Electrical and Computer Engineering. Εργαστήριο 1. Χειμερινό Εξάμηνο

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

Μεταγλωττιστές Βελτιστοποίηση

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

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

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

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

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

Η γλώσσα προγραμματισμού Strange

Αρχιτεκτονική Μικροεπεξεργαστών MIPS-32. Αρχείο καταχωρητών και Χάρτης Μνήµης

Εργαστήριο 2. Εαρινό Εξάμηνο Εντολές για είσοδο ακεραίων αριθμών από την κονσόλα:

Μεταγλωττιστές Βελτιστοποίηση

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

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

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

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

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

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

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

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

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επιλογής. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

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

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

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

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

Γλώσσες Προγραμματισμού Μεταγλωττιστές

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ MHXANIKO MHXANIK I O I Η/ Η Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ Γ. Τσιατούχας ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ

Στοίβες με Δυναμική Δέσμευση Μνήμης

Αυτοματισμοί και Συστήματα Αυτομάτου Ελέγχου. Ενότητα 5 Ανάπτυξη Προγράμματος σε Γλώσσα Λίστας Εντολών

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

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

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

Εισαγωγή στη Matlab 2 Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής

Φροντιστήριο 3 ο Παραγωγή Ενδιάμεσου Κώδικα. Σημασιολογία της γλώσσας alpha (1/7) Type Checking

Διαδικασιακός Προγραμματισμός

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΥ

Pascal. 15 Νοεμβρίου 2011

1o Φροντιστήριο ΗΥ240

Διάλεξη 6: Δείκτες και Πίνακες

(Ιούνιος 2001 ΤΕΕ Ηµερήσιο) Σε κάθε µία από τις παρακάτω περιπτώσεις, να

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΗΥ-150. Προγραμματισμός

Pascal. 26 Οκτωβρίου 2011

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

ΗΥ-150. Προγραμματισμός

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

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Προγραμματισμός Ι (HY120)

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

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

Περιεχόμενα ΜΤ Τυχαίας Προσπέλασης Θεωρία Υπολογισμού Ενότητα 23: Μηχανές Turing Τυχαίας Προσπέλασης Επ. Καθ. Π. Κατσαρός Τμήμα Πληροφορικής Επ. Καθ.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

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

Transcript:

ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Παραγωγή τελικού κώδικα Από τον ενδιάμεσο κώδικα στον τελικό (1/2) Τα ορίσματα των εντολών ενδιάμεσου κώδικα είναι του τύπου expr*. Αυτές οι εκφράσεις θα πρέπει να μετατραπούν στα κατάλληλα ορίσματα για τις εντολές τελικού κώδικα. Αυτό σημαίνει ότι θα πρέπει να υπάρχει κάποι «μηχανισμός» όπου με βάση κάποιο expr* να κατασκευάζει κατάλληλα ένα vmarg*. 2 Από τον ενδιάμεσο κώδικα στον τελικό (2/2) Παραγωγή τελικού κώδικα Η παραγωγή τελικού κώδικα γίνεται μέσω της συνάρτησης emit όπως και στον ενδιάμεσο κώδικα (με την διαφορά ότι έχει ένα όρισμα τύπου instruction*) 3 4

Incomplete jumps (1/2) Τα target labels των jump εντολών του ενδιάμεσου κώδικα θα πρέπει να τροποποιηθούν στις αντίστοιχες jump εντολές τελικού κώδικα. Ο λόγ είναι ότι δεν αντιστοιχεί μία εντολή ενδιάμεσου κώδικα σε μία εντολή τελικού κώδικα. Συνήθως, οι εντολές τελικού κώδικα είναι περισσότερες από τις εντολές ενδιάμεσου. Η λύση είναι να εισάγουμε το πεδίο taddress στις εντολές ενδιάμεσου κώδικα και αυτό να συμπληρώνεται κατά την παραγωγή τελικού κώδικα με τον αριθμό της πρώτης εντολής τελικού κώδικα που αντιστοιχεί σε αυτή. Incomplete jumps (2/2) patch_incomplete_jumps() { for each incomplete jump x do { if x.iaddress = intermediate code size then instructions[x.instrno].result = target code size; else instructions[x.instrno].result ti [ i t ] = quads[x.iaddress].taddress; [ dd ] dd } } 5 6 Τελικός κώδικας για Λογικές Εκφράσεις (1/2) Τελικός κώδικας για Λογικές Εκφράσεις (2/2) ενδιάμεσ κώδικας NOT arg1 result taddress jeq arg1 false _ assign false result jump +2 assign true result _ +3 ενδιάμεσ κώδικας AND arg1 arg2 result taddress jeq arg1 false _ jeq arg2 false assign true result jump _ +4 +3 ενδιάμεσ κώδικας ΛΟΓΙΚΕΣ ΕΚΦΡΑΣΕΙΣ +2 assign false result OR arg1 arg2 result taddress jeq arg1 true _ +4 jeq arg2 true +3 assign false result ΛΟΓΙΚΕΣ ΕΚΦΡΑΣΕΙΣ +2 jump assign true result _ 7 8

Τελικός κώδικας για Συναρτήσεις (1/2) Τελικός κώδικας για Συναρτήσεις (2/2) ενδιάμεσ κώδικας FUNCSTART result taddress enterfunc RETURN result taddress assign retval result jump _ FUNCEND result taddress exitfunc ΚΩΔΙΚΑΣ ΣΥΝΑΡΤΗΣΕΩΝ Επειδή όμως υποστηρίζεται ο ορισμός συνάρτησης μέσα σε μία άλλη χρησιμοποιείται μία λίστα (funcstack): Στο funcstart γίνεται push η συνάρτηση στην στοίβα Στο funcend γίνεται pop και γίνονται patch τα target labels των εντολών jump που βρίσκονται στην returnlist. Στο return εισάγουμε τον αριθμό εντολής τελικού κώδικα του jump στην returnlist της συνάρτησης που βρίσκεται στην κορυφή της στοίβας. Επειδή το target label του jump δεν είναι γνωστό πριν παραχθεί κώδικας για το funcend, διατηρείται μία λίστα (returnlist) για κάθε τέτοιο jump και θα συμπληρώνονται τα target labels αυτών των jump αφού παραχθεί κώδικας για το funcend. 9 10 Τεχνική παραγωγής ενδιάμεσου κώδικα ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Virtual Machine 11

Τελικός κώδικας για το calculator (1/2) Τελικός κώδικας για το calculator (2/2) Μπορούμε να παράγουμε από την εφαρμογή calculator τελικό κώδικα μετατρέποντας τον ενδιάμεσο κώδικα (quads) σε τελικό σε αυτήν την περίπτωση η μετατροπή είναι τετριμμένη ρμμ οι εντολές τελικού κώδικα έχουν ακριβώς την ίδια σημασιολογία με τις εντολές ενδιάμεσου κώδικα η αντιστοίχηση των εντολών ενδιάμεσου με τελικού κώδικα είναι μία πρ μία Binary αρχείο που μπορεί να εκτελεστεί από την εικονική μηχανή 13 14 Σχεδίαση ενός binary αρχείου (1/2) Σχεδίαση ενός binary αρχείου (2/2) μαγικός αριθμός (κατά προτίμηση μοναδικός) αριθμός μεταβλητών που περιέχει το πρόγραμμα αριθμός εντολών (τελικού κώδικα) που περιέχει το πρόγραμμα εντολές το format μιας εντολής opcode (1 byte) result (5 bytes) arg1 (5 bytes) arg2 (5 bytes) το format ενός argument είναι το εξής argument type (1 byte) σταθερά ή μεταβλητή value (4 bytes) offset στον πίνακα των μεταβλητών του προγράμματ αν ο τύπ είναι μεταβλητή η πραγματική τιμή αν ο τύπ είναι σταθερά 15 16

Εικονική Μηχανή η μοναδική λειτουργία της εικονικής μηχανής είναι να εκτελεί ένα αρχείο τελικού κώδικα φορτώνει το αρχείο στην μνήμη αριθμός μεταβλητών αντιστοιχίζει τις μεταβλητές σε θέσεις μνήμης αρχίζει να εκτελεί τις εντολές σειριακά η μηχανή του calculator δεν έχει συνθήκες, βρόχους ή συναρτήσεις Φόρτωμα binary αρχείου (1/2) Ανάγνωση χαρακτηριστικών Δέσμευση μνήμης για τις εντολές Φόρτωμα των εντολών 17 18 Φόρτωμα binary αρχείου (2/2) Προδιαγραφές Εικονικής Μηχανής (1/2) Τα δεδομένα που αποθηκεύονται στη μνήμη της εικονικής μηχανής για οποιουδήποτε τύπου VMArg Μνήμη της εικονικής μηχανής η οποία χρησιμοποιείται για την αποθήκευση των μεταβλητών του προγράμματ που εκτελείται λί Βοηθητικοί καταχωρητές Program Counter, πλήθ εντολών προγράμματ και μνήμη εντολών 19 20

Προδιαγραφές Εικονικής Μηχανής (2/2) Εκτέλεση Προγράμματ (1/5) Μόλις φορτωθεί το πρόγραμμα στην εικονική μηχανή αυτή αρχίζει να εκτελεί τον σειριακά τις εντολές Εκτέλεση της κατάλληλης συνάρτησης 21 22 Εκτέλεση Προγράμματ (2/5) Επειδή το πακετάρισμα των εντολών είναι πανομοιότυπο για εντολές που παίρνουν 1, 2 ή 3 παραμέτρους... Εκτέλεση Προγράμματ (3/5) Μετά τις κλήσεις της συνάρτησης translate_operand, έχουμε στη διάθεσή μας pointers στις τιμές των παραμέτρων της εκάστοτε εντολής 23 24

Εκτέλεση Προγράμματ (4/5) Εκτέλεση Προγράμματ (5/5) simple.clc Binary (simple.exe) Έτσι,, οποιουδήποτε τύπου κι αν είναι η παράμετρ VMArg, είμαστε σίγουροι σε αυτό το σημείο ότι ο pointer VMMemCell, δείχνει πάντα στη σωστή τιμή της παραμέτρου, είτε αυτή είναι σταθερά είτε μεταβλητή Calc VM 25 26