Δομή μεταγλωττιστή: backend

51
Τετάρτη, 11 Μαΐου 2022 Τετάρτη, 11 Μαΐου 2022 Τμ. Πληροφορικής, Α.Π.Θ. Τμ. Πληροφορικής, Α.Π.Θ. 1 ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δομή μεταγλωττιστή: backend Παραγωγή κώδικα Λεξική ανάλυση Συντακτική ανάλυση Σημασιολογική ανάλυση Βελτιστοποίηση κώδικα Παραγωγή ενδιάμεσου κώδικα ενδιάμεσ ος κώδικας Η κατασκευή του πρώτου στάδιου επεξεργασίας (front end) είναι σε μεγάλο βαθμό αυτοματοποιημένη Για το τελικό στάδιο επεξεργασίας (back end) δε διαθέτουμε γενικά αυτοματοποιημένες τεχνικές κατασκευής, γιατί εξάλλου ο παραγόμενος κώδικας εξαρτάται από τα χαρακτηριστικά της μηχανής στην οποία θα εκτελείται και οι δυνατότητες βελτιστοποιήσεων ποικίλλουν Η δημιουργία ενδιάμεσου κώδικα επηρεάζει καθοριστικά την απόδοση του back end

description

Δομή μεταγλωττιστή: backend. Λεξική ανάλυση. Συντακτική ανάλυση. Σημασιολογική ανάλυση. Παραγωγή ενδιάμεσου κώδικα. ενδιάμεσος κώδικας. Βελτιστοποίηση κώδικα. Παραγωγή κώδικα. Η κατασκευή του πρώτου στάδιου επεξεργασίας ( front end ) είναι σε μεγάλο βαθμό αυτοματοποιημένη - PowerPoint PPT Presentation

Transcript of Δομή μεταγλωττιστή: backend

Page 1: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 11

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

Δομή μεταγλωττιστή: backend

Παραγωγή κώδικα

Λεξική ανάλυση

Συντακτική ανάλυση

Σημασιολογική ανάλυση

Βελτιστοποίηση κώδικα

Παραγωγή ενδιάμεσου

κώδικα

ενδιάμεσοςκώδικας

• Η κατασκευή του πρώτου στάδιου επεξεργασίας (front end) είναι σε μεγάλο βαθμό αυτοματοποιημένη

• Για το τελικό στάδιο επεξεργασίας (back end) δε διαθέτουμε γενικά αυτοματοποιημένες τεχνικές κατασκευής, γιατί εξάλλου ο παραγόμενος κώδικας εξαρτάται από τα χαρακτηριστικά της μηχανής στην οποία θα εκτελείται και οι δυνατότητες βελτιστοποιήσεων ποικίλλουν

• Η δημιουργία ενδιάμεσου κώδικα επηρεάζει καθοριστικά την απόδοση του back end

Page 2: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 22

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

Μορφές ενδιάμεσης αναπαράστασης

Συντακτικά δένδρα Κατευθυνόμενοι άκυκλοι γράφοι Γράφοι ροής ελέγχου

Κώδικας μηχανής στοίβας Κώδικας τριών διευθύνσεων

Υβριδικές προσεγγίσεις που χρησιμοποιούν τεχνικές από τις δύο προαναφερόμενες οικογένειες:

Κάποιοι μεταγλωττιστές χρησιμοποιούν κώδικα τριών διευθύνσεων και για επαναληπτικούς βρόχους, εντολές if και αναφορές σε array χρησιμοποιούν συντακτικά δένδρα

υψηλό επίπεδο

χαμηλό επίπεδο (πιο κοντά στη μηχανή)

γραφική ενδιάμεση

αναπαράσταση

γραμμικήενδιάμεση

αναπαράσταση

Page 3: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 33

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

Συντακτικά δένδρα

if (x < y)

x = 5*y + 5*y/3;

else

y = 5;

x = x+y;

Statements

<

AssignStmt

+

*

x

IfStmt

AssignStmt AssignStmt

x x y+ yxy

/

5 y 3*

5 y

5

Page 4: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 44

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

Κατευθυνόμενοι άκυκλοι γράφοι Όταν γίνεται χρήση κατευθυνόμενων άκυκλων γράφων για

την αναπαράσταση εκφράσεων Για κάθε έκφραση χρησιμοποιείται ένας

μόνο κόμβος

if (x < y)

x = 5*y + 5*y/3;

else

y = 5;

x = x+y;

Statements

<

*

IfStmt

AssignStmt AssignStmt

x +y

/

5

3

Page 5: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 55

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

Γράφοι ροής ελέγχου Οι κόμβοι ενός γράφου ροής ελέγχου είναι βασικά block

Βασικό block είναι μία σειρά εντολών που πάντα η εκτέλεσή τους αρχίζει από την πρώτη και τελειώνει στην τελευταία απ΄ αυτές

Τα τόξα σε ένα γράφο ροής ελέγχου αναπαριστούν τη ροή ελέγχουif (x < y)

x = 5*y + 5*y/3;

else

y = 5;

x = x+y;

if (x < y) goto B1 else goto B2

x = 5*y + 5*y/3 y = 5

x = x+y

B1 B2

B0

B3• Κάθε βασικό block περιλαμβάνει μία σειρά εντολών• Δεν επιτρέπεται διαφυγή από το μέσο ενός block • Όταν γίνεται εκκίνηση της εκτέλεσης ενός block τότε η εκτέλεση ολοκληρώνεται πάντα στην τελευταία εντολή

του

Page 6: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 66

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

Μηχανή στοίβαςif (x < y)

x = 5*y + 5*y/3;

else

y = 5;

x = x+y;

load x load y iflt L1 goto L2L1: push 5 load y multiply push 5 load y multiply push 3 divide add store x goto L3L2: push 5 store yL3: load x load y add store x

αφαιρεί δύο στοιχεία από την κορυφή και τα συγκρίνει

αφαιρεί δύο στοιχεία από την κορυφή, τα πολλαπλασιάζει και τοποθετεί το αποτέλεσμα στην κορυφή

ωθεί την τιμή της θέσης x στην κορυφή της στοίβας

αποθηκεύει την τιμή της κορυφής της στοίβας στη θέση x

JVM: Μία μηχανή στοίβας•Δεξιά φαίνεται συμβολικός κώδικας για την JVM, που μετατρέπεται σε bytecode με τον κατάλληλο συμβο/στή•Ο JVM διερμηνευτής εκτελεί τον bytecode σε διαφορετικές μηχανές•Η JVM διαθέτει μία στοίβα που χρησιμοποιείται στην αποτίμηση εκφράσεων•Η JVM χρησιμοποιεί 65535 «τοπικές μεταβλητές» •Οι «τοπικές μεταβλητές» λειτουργούν ως καταχωρητές•Κάθε «τοπική μεταβλητή» στην JVM συμβολίζεται με έναν αριθμό μεταξύ 0 και 65535 (στο παράδειγμα αποδίδονται στις x και y μοναδικοί αριθμοί)

Page 7: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 77

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

Κώδικας τριών διευθύνσεων Ι Κάθε εντολή μπορεί να έχει το πολύ τρεις τελεστέους

Εκχώρηση τιμών x := y x := y op z op: δυαδικοί αριθμητικοί ή λογικοί τελεστές x := op y op: μοναδιαίοι τελεστές (-, ΝΟΤ κ.α.)

Διακλάδωση goto L εκτέλεση της εντολής με την ετικέτα L

Υπό συνθήκη διακλάδωση if x relop y goto L relop: <, =, <=, >=, ==, !=

αν η συνθήκη είναι αληθής τότε εκτελείται η εντολή με την ετικέτα L

αν η συνθήκη δεν είναι αληθής τότε συνεχίζεται η εκτέλεση με την επόμενη εντολή

Page 8: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 88

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

Κώδικας τριών διευθύνσεων ΙΙ

if (x < y)

x = 5*y + 5*y/3;

else

y = 5;

x = x+y;

if x < y goto L1goto L2

L1: t1 := 5 * yt2 := 5 * yt3 := t2 / 3x := t1 + t2goto L3

L2: y := 5L3: x := x + y

οι προσωρινές μεταβλητές αντιστοιχούν σε εσωτερικούς κόμβους του συντακτικού δένδρου

Οι μεταβλητές αναπαριστώνται από τη θέση τους στον πίνακα συμβόλων

Οι εντολές του κώδικα τριών διευθύνσεων μπορούν να αναπαρασταθούν σε πίνακα από τετράδες: πράξη, παράμετρος 1, παράμετρος 2, αποτέλεσμα σε πίνακα από τριάδες: πράξη, παράμετρος 1, παράμετρος 2 (κάθε τριάδα θεωρείται ότι αντιστοιχεί σε μία προσωρινή μεταβλητή με πρόσβαση στην τιμή της μέσω αναφοράς στον αριθμό της εντολής)

Page 9: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 99

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

Παραγωγή κώδικα τριών διευθύνσεων

Παραγωγές Σημασιολογικοί κανόνεςS id := E id.place lookup(id.name);

S.code E.code || gen(id.place ‘:=‘ E.place);E E1 + E2 E.place newtemp();

E.code E1.code || E2.code || gen(E.place ‘:=‘ E1.place ‘+’ E2.place);E E1 * E2 E.place newtemp();

E.code E1.code || E2.code || gen(E.place ‘:=‘ E1.place ‘*’ E2.place);E ( E1 ) E.code E1.code;

E.place E1.place;E E1 E.place newtemp();

E.code E1.code || gen(E.place ‘:=‘ ‘uminus’ E1.place);E id E.place lookup(id.name);

E.code ‘’ (κενή συμβολοσειρά)

Ιδιότητες: E.place: θέση όπου βρίσκεται η τιμή για την έκφραση EE.code: σειρά εντολών που παράγονται για την E

Διαδικασίες: newtemp(): επιστρέφει κάθε φορά μία νέα προσωρινή μεταβλητήgen(): δημιουργεί κώδικα (καλείται με τις κατάλληλες παραμέτρους)lookup(id.name): επιστρέφει τη θέση του id στον πίνακα συμβόλων

Page 10: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1010

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

Παραγωγή κώδικα για μηχανή στοίβας

Παραγωγές Σημασιολογικοί κανόνεςS id := E id.place lookup(id.name);

S.code E.code || gen(‘store’ id.place);E E1 + E2 E.code E1.code || E2.code || gen(‘add’);

(οι παράμετροι της εντολής add βρίσκονται στην κορυφή της στοίβας)E E1 * E2 E.code E1.code || E2.code || gen(‘multiply’);E ( E1 )E.code E1.code; E E1 E.code E1.code || gen( ‘negate‘);E id E.code gen(‘load’ id.place)

Ιδιότητες: E.code: σειρά εντολών που παράγονται για την E(δε χρειάζεται ιδιότητα θέσης για την έκφραση, αφού το αποτέλεσμα της έκφρασης αποθηκεύεται στη στοίβα)

Διαδικασίες: newtemp(): επιστρέφει κάθε φορά μία νέα προσωρινή μεταβλητήgen(): δημιουργεί κώδικα (καλείται με τις κατάλληλες παραμέτρους)lookup(id.name): επιστρέφει τη θέση του id στον πίνακα συμβόλων

Page 11: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1111

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

Παραγωγή κώδικα για λογικές εκφράσεις

Δύο προσεγγίσεις: Αριθμητική αναπαράσταση Συνεπαγόμενη αναπαράσταση

Αριθμητική αναπαράσταση Χρησιμοποιούμε 1 για το true και 0 για το false Σε κώδικα τριών διευθύνσεων αποθηκεύεται το

αποτέλεσμα σε προσωρινή μεταβλητή Σε κώδικα μηχανής στοίβας το αποτέλεσμα αποθηκεύεται

στη στοίβα Συνεπαγόμενη αναπαράσταση

Για λογικές εκφράσεις που χρησιμοποιούνται σε έλεγχο ροής (π.χ. εντολές if, while κλπ.) και δε χρησιμοποιούνται για τον υπολογισμό ενός αποτελέσματος,

δημιουργούμε κώδικα που απλά διακλαδώνει στην κατάλληλη εντολή ανάλογα με το αποτέλεσμα

Page 12: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1212

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

Λογικές εκφράσεις: αριθμητική αναπαράσταση

Ιδιότητες : E.place: θέση όπου βρίσκεται η τιμή για την έκφραση EE.code: σειρά εντολών που παράγονται για την Eid.place: θέση του id

Καθ. μεταβλητή: nextstat: επιστρέφει τη θέση της νέας εντολής που θα δημιουργηθεί(κάθε κλήση στη gen() αυξάνει τη nextstat κατά 1)

Παραγωγές Σημασιολογικοί κανόνες

E id1 relop id2 E.place newtemp();E.code gen(‘if’ id1.place relop.op id2.place ‘goto’ nextstat+3);

|| gen(E.place ‘:=‘ ‘0’) || gen(‘goto’ nextstat+2)|| gen(E.place ‘:=‘ ‘1’);

E E1 and E2 E.place newtemp();E.code E1.code || E2.code

|| gen(E.place ‘:=‘ E1.place ‘and’ E2.place);

Page 13: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1313

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

Λογικές εκφράσεις: συνεπαγόμενη αναπαράσταση

Παραγωγές Σημασιολογικοί κανόνες

E id1 relop id2 E.code gen(‘if’ id1.place relop.op id2.place ‘goto’ E.true)|| gen(‘goto’ E.false);

E E1 and E2 E1.true newlabel();E1.false E. false;E2.true E. true;E2.false E. false;E.code E1.code || gen(E1.true ‘:’) || E2.code ;

Ιδιότητες : E.code: σειρά εντολών που παράγονται για την EE.false: ετικέτα διακλάδωσης αν η E είναι falseE.true: ετικέτα διακλάδωσης αν η E είναι true

(E.code είναι συνθέσιμη ενώ οι E.true και E.false είναι κληρονομήσιμες)

id.place: θέση του id

οποιοσδήποτε τελεστής συσχέτισης:= =, <=, >= !=

Τα συγκεκριμένα σημεία του κώδικα συμπληρώνονται με τις κατάλληλες ετικέτες όταν αυτές γίνουν διαθέσιμεςΗ δημιουργηθείσα ετικέτα

τοποθετείται στη θέση της E1.true στον κώδικα της E1

Page 14: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1414

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

Παράδειγμα λογικών εκφράσεων

100 if x < y goto 103101 t1 := 0102 goto 104103 t1 := 1104 if a = b goto 107105 t2 := 0106 goto 108107 t2 := 1108 t3 := t1 and t2

Λογική έκφραση εισόδου:x < y and a == b

Αριθμητική αναπαράσταση:

if x < y goto L1goto LFalse

L1: if a = b goto LTruegoto LFalse...

LTrue:

LFalse:

Συνεπαγόμενη αναπαράσταση:

Θέσεις εντολών τριών διευθύνσεων και όχι ετικέτες

Οι ετικέτες αυτές παράγονται σε μεταγενέστερη φάση και τοποθετούνται στη σωστή θέση του κώδικα

Page 15: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1515

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

Εντολές ελέγχου ροής

If-then-else Διακλάδωση ανάλογα με το αποτέλεσμα

λογικής έκφρασης

Βρόχοι (loops) Αποτίμηση συνθηκών πριν από το loop

(αν χρειάζεται) Αποτίμηση συνθήκης μετά από το loop Διακλάδωση στην αρχή, αν ισχύει η συνθήκη

While, for, do και until υλοποιούνται όλα έτσι

έλεγχος

σώμα loop

έλεγχος

επόμενο block

Page 16: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1616

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

Εντολές ελέγχου ροής: δομή κώδικα

E.code

S1.code

goto S.next

S2.code

στο E.true

στο E.false

E.true:

E.false:

S.next:

S if E then S1 else S2

αν η E είναι true

αν η E είναι false

E.code

S1.code

goto S.begin

στο E.true

E.true:

E.false:

S.begin:

S while E do S1

στο E.false

Page 17: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1717

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

Εντολές ελέγχου ροής: παραγωγή κώδικα

Παραγωγές Σημασιολογικοί κανόνεςS if E then S1 else S2 E.true newlabel();

E.false newlabel(); S1.next S. next;S2.next S. next;S.code E.code || gen(E.true ‘:’) || S1.code

|| gen(‘goto’ S.next) || gen(E.false ‘:’) || S2.code ;

S while E do S1 S.begin newlabel();E.true newlabel(); E.false S. next;S1.next S. begin;S.code gen(S.begin ‘:’) || E.code || gen(E.true ‘:’) || S1.code

|| gen(‘goto’ S.begin);

S S1 ; S2 S1.next newlabel();S2.next S.next;S.code S1.code || gen(S1.next ‘:’) || S2.code

Ιδιότητες : S.code: σειρά εντολών που παράγονται για την SS.next: ετικέτα για την εντολή που θα εκτελεστεί αμέσως μετά την S(η S.next είναι κληρονομήσιμη ιδιότητα)

Page 18: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1818

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

Παράδειγμα εντολής ελέγχου ροής

Απόσπασμα πηγαίου κώδικα:

while (a < b) { if (c < d) x = y + z; else x = y – z}

L1: if a < b goto L2goto LNext

L2: if c < d goto L3goto L4

L3: t1 := y + zx := t1goto L1

L4: t2 := y – zx := t2goto L1

LNext: ...

Page 19: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1919

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

Backpatching Οι E.true, E.false, S.next μπορεί να μην είναι εφικτό να

υπολογισθούν με ένα πέρασμα (είναι κληρονομήσιμες ιδιότητες)

Το backpatching είναι μία τεχνική δημιουργίας ετικετών E.true, E.false, S.next και εισαγωγής τους στις κατάλληλες θέσεις κώδικα με ένα μόνο πέρασμα

Βασική ιδέα Διατηρούμε τις λίστες E.truelist, E.falselist, S.nextlist

E.truelist: η λίστα των εντολών όπου πρέπει να συμπληρωθεί η ετικέτα για το E.true όταν αυτή γίνει διαθέσιμη

S.nextlist: η λίστα των εντολών όπου πρέπει να συμπληρωθεί η ετικέτα για το S.next όταν αυτή γίνει διαθέσιμη

Όταν γίνουν διαθέσιμες οι τιμές των E.true, E.false, S.next τότε συμπληρώνονται οι ετικέτες στις εντολές που αναφέρονται στις λίστες

Page 20: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2020

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

Παραγωγή κώδικα στο μεταγλωττιστή της YAPL

Στο μεταγλωττιστή του βιβλίου παράγεται κώδικας assembly απευθείας, με μεταδιατεταγμένη διάσχιση του

συντακτικού δένδρου από αριστερά προς τα δεξιά

Δε χρησιμοποιείται κώδικας τριών διευθύνσεων ή κάποια άλλη μορφή ενδιάμεσης αναπαράστασης εκτός του παραγόμενου συντακτικού δέντρου

Page 21: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2121

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

Συνάρτηση δημιουργίας εντολήςvoid emit_code(char keno,char *optr,char *opd1,char *opd2,char *opd3){ char kodikas[81]; if(keno == 'y') { strcpy(kodikas," "); strcat(kodikas,optr); } else strcpy(kodikas,optr); if(strlen(opd1) > 0) { strcat(kodikas," "); strcat(kodikas,opd1); if(strlen(opd2) > 0) { strcat(kodikas,","); strcat(kodikas,opd2); if(strlen(opd3) > 0) { strcat(kodikas,","); strcat(kodikas,opd3); } } } strcat(kodikas,"\n"); fputs(kodikas,femitc);}

Page 22: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2222

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

Συνάρτηση διάσχισης δένδρουvoid CodeGeneration(AstNode *p, int lev, int lvalue, int leftChild){ switch (p->NodeType) { case astEmptyProgram: break; case astProgram: ProcessProgram(p,lev);break; case astEmptyDeclSeq: break; case astDeclSeq:ProcessDeclSeq(p,lev,lvalue);break; case astDecl:ProcessDecl(p,lev,lvalue);break; ..................................................... case astStmtSeq: ProcessStmtSeq(p,lev,lvalue);break; case astIfElseStmt:ProcessIfElseStmt(p,lev,lvalue);break; case astIfStmt:ProcessIfStmt(p,lev,lvalue);break; case astExprStmt: ProcessExprStmt(p,lev,lvalue);break; case astNullStmt:ProcessNullStmt();break; case astReadStmt: ProcessReadStmt(p,lev); break; case astPrintStmt: ProcessPrintStmt(p,lev);break; case astDecimConst: ProcessDecimConst(p); break; .....................................................

case astNotEq: ProcessComp(p,lev,lvalue,leftChild);break; case astAssign: ProcessAssign(p,lev,leftChild);break; default: printf("AGNOSTO=%d\n",p->NodeType); }}

Page 23: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2323

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

Συνάρτηση επεξεργασίας κόμβου PrintStmt

void ProcessPrintStmt(AstNode *p, int lev)

{ symbol *rhs;

CodeGeneration(p->pAstNode[0],lev+1,FALSE,FALSE);

rhs=pop_vs();

switch( rhs->sclass )

{

case MEMORY:

case CONSTANT:

emit_code('y',"mov","ax",rhs->name,"");

emit_code('y',"push","ax","","");

break;

case REGISTER:

emit_code('y',"push",rhs->name,"","");

break;

}

emit_code('y',"push","10","","");

emit_code('y',"call","_PrintInt","","");

emit_code('y',"add","sp","4","");

discard_symbol(rhs);

}

Page 24: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2424

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

Παραγωγή κώδικα: Αρχιτεκτονική Pentium Ι

07831

AH

BH

CH

DH

AL

BL

CL

DL

AX

BX

CX

DX

SP

BP

SI

DI

CS

SS

DS

FLAGS

15

EAX

EBX

ECX

EDX

ESP

EBP

ESI

EDI

ES

FS

GS

IPEIP

EFLAGS

καταχωρητέςδεδομένων

καταχωρητέςδιευθύνσεων

δείκτης στοίβας (κορυφή)

βάση υπολογισμού διευθύνσεωνδείκτες

διευθύνσεων σε σχέση με μία βάση

βάσεις τμημάτων μνήμης

Page 25: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2525

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

Παραγωγή κώδικα: Αρχιτεκτονική Pentium ΙΙ

0

0 0 0 0

15

015

offset

Βάση του Τμήματος Μνήμης

+

019

Διεύθυνση Μνήμης

ΥΠΟΛΟΓΙΣΜΟΣ ΔΙΕΥΘΥΝΣΗΣ ΜΝΗΜΗΣ (real mode): το περιεχόμενο του καταχωρητή τμήματος μετατοπίζεται τέσσερα bit προς

τα αριστερά (δηλ. πολλαπλασιάζεται επί 16) στην τιμή που προκύπτει προστίθεται η απόκλιση εντολές: από το τμήμα που υποδεικνύει ο CS (code segment) σε συνδυασμό

με τον IP (instruction pointer) διεύθυνση εντολής: CS:IP καταχώρηση ή ανάγνωση δεδομένων: από το τμήμα που υποδεικνύει ο DS

(data segment) πράξεις στοίβας: το τμήμα της στοίβας υποδεικνύεται από τον SS (stack

segment)

Page 26: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2626

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

Παραγωγή κώδικα: Αρχιτεκτονική Pentium ΙΙI

Επικάλυψη στην εκχώρηση τμημάτων μνήμης

050005000

14FFF

cs

SS

ES

1700

1888

1700

DS

18880

17000

26FFF

2887F

Page 27: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2727

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

Παραγωγή κώδικα: Αρχιτεκτονική Pentium ΙV

o EFLAGS είναι καταχωρητής σημαιών

Οι εντολές χρησιμοποιούν δεδομένα τα οποία βρίσκονται είτε

σε καταχωρητές δεδομένων είτε στην ίδια την εντολή είτε στη μνήμη

Ανάλογα με τον τύπο της εντολής τα δεδομένα μπορεί να είναι

ενός byte μιας λέξης (word) μιας διπλής λέξης (double)

Τουλάχιστο ένα από τα δεδομένα πρέπει να βρίσκεται σε καταχωρητή

Page 28: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2828

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

Παραγωγή κώδικα: Εντολές assembly I

MOV προορισμός, αφετηρίαΗ εντολή MOV καταχωρεί στον προορισμό αντίγραφο του δεύτερου τελεστέου. Αν ο προορισμός είναι ένας από τους καταχωρητές τμήματος (DS, ES, SS, FS, GS), τότε η αφετηρία πρέπει να είναι ένας από τους καταχωρητές δεδομένων.

ADD προορισμός,αφετηρίαΗ εντολή ADD προσθέτει δύο ακεραίους. Ο προορισμός δηλώνει τον προορισμό του αποτελέσματος της πράξης, δηλαδή ότι το άθροισμα καταχωρείται στον καταχωρητή ή στη διεύθυνση προορισμού.

SUB προορισμός,αφετηρίαΗ εντολή SUB αφαιρεί το δεύτερο τελεστέο από τον πρώτο. Η διαφορά καταχωρείται στον καταχωρητή ή στη μνήμη προορισμού.

IMULΠροσημασμένος πολλαπλασιασμός σε διάφορες μορφές με ένα ή δύο ορίσματα.

Page 29: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2929

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

Παραγωγή κώδικα: Εντολές assembly IΙΗ εντολή IMUL εκτελεί προσημασμένο πολλαπλασιασμό. Κάποιες μορφές της εντολής χρησιμοποιούν έμμεσα τελεστέους που βρίσκονται σε καταχωρητές.

IDIVΗ εντολή IDIV εκτελεί προσημασμένη διαίρεση. Ο διαιρετέος πρέπει να βρίσκεται σε έναν από τους καταχωρητές AL, AX και EAX ανάλογα με τον τύπο του, ενώ το πηλίκο και το υπόλοιπο καταχωρούνται έμμεσα σε συγκεκριμένους καταχωρητές. Ο διαιρέτης δίδεται ως r/m τελεστέος.

IMUL r/m8IMUL r/m16IMUL r/m32

AXAL*r/m byteDX: AXAX*r/m wordEDX: EAXEAX*r/m dword

IMUL r16, r/m16IMUL r32, r/m32

word registerword register*r/m worddword registerdword register*r/m dword

Page 30: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3030

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

Παραγωγή κώδικα: Εντολές assembly IΙI

IDIV AL, r/m8 

IDIV AX, r/m16

IDIV EAX, r/m32

Signed divide AX (where AH must contain sign-extension of AL) by r/m byte. (Results: AL=Quo, AH=Rem)

Signed divide DX:AX (where DX must contain sign-extension of AX) by r/m word. (Results: AX=Quo, DX=Rem)

Signed divide EDX:EAX (where EDX must contain sign-extension of EAX) by r/m dword. (Results: EAX=Quo, EDX=Rem)

PUSH όρισμαΗ εντολή PUSH μειώνει το δείκτη της στοίβας κατά 2 όταν το όρισμα είναι 16 bit ή κατά 4 όταν το όρισμα είναι 32 bit. Η εντολή PUSH τοποθετεί το όρισμα στην κορυφή της στοίβας, την οποία δείχνει ο δείκτης της στοίβας.

Page 31: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3131

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

Παραγωγή κώδικα: Εντολές assembly IV

POP όρισμαΗ εντολη POP διαγράφει από τη στοίβα το δεδομένο που δείχνει ο καταχωρητής SP ή ESP, και το αποθηκεύει στο όρισμα της εντολής, που μπορεί να είναι θέση μνήμης, καταχωρητής ή καταχωρητής τμήματος. Ο καταχωρητής SP αυξάνεται κατά 2 για 16 bit δεδομένο ή κατά 4 για 32 bit δεδομένο.

Page 32: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3232

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

Παραγωγή κώδικα: ΠαράδειγμαΠαραγωγή κώδικα για έκφραση εκχώρησης τιμής

x=a*b+c*d-e*f

astAdd

astId (e)

astAssign

astId (a) astId (c)

astId (f)

astId (x) astSub

astMult

astId (d)astId (b)

astMultastMult

Page 33: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3333

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

Παραγωγή κώδικα: Παράδειγμα (συνέχεια)

mov ax,_a

imul _b

push ax

mov ax,_c

imul _d

pop dx

add dx,ax

push dx

mov ax,_e

imul _f

pop dx

sub dx,ax

mov _x,dx

Page 34: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3434

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

Παραγωγή κώδικα: Παράδειγμα ΙΙ{ int i,j;

i=2;

j=-6;

print(i*j);

}

.model small .stack 100h .586; The Data Segment .data_i sword ? _j sword ? ; The Code Segment .code extrn _print_int:proc extrn _read_int:procmain proc mov ax,@data mov ds,ax mov _i,2 mov _j,-6 mov ax,_i imul _j push ax call _print_int pop cx; Return to the Operating System mov ax,4c00h int 21hmain endp end main

κλήση υποπρογράμματος

πέρασμα παραμέτρου μέσω της στοίβας

Page 35: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3535

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

Απεικόνιση Τύπων & Δεδομένων στη Μνήμη

Τύπος Δεδομένων είναι ένα σύνολο τιμών με τις επιτρεπτές πράξεις επί των τιμών αυτών.

Βασικοί τύποι: ακέραιοι, πραγματικοί, λογικός, χαρακτήρες

Δομημένοι τύποι: πίνακες, εγγραφές, συμβολοσειρές Τύπος προσπέλασης (δείκτες)

Περιγραφή Τύπου Υψηλού Επιπέδου: χαρακτηριστικά που διακρίνουν τις τιμές του τύπου, τιμές, πράξεις

Περιγραφή Τύπου Χαμηλού Επιπέδου: απεικόνιση (δήλωση) τύπου στην μνήμη, εντολές της γλώσσας του επεξεργαστή που υλοποιούν τις πράξεις του υψηλού επιπέδου

Page 36: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3636

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

Ακέραιοι Ι

Ακέραιοι προσημασμένοι ενός byte από -128 έως +127 και μη προσημασμένοι από 0 έως 255

arithmos sbyte ? ; χωρίς αρχική τιμή

apotelesma byte ? ; χωρίς αρχική τιμή

με byte δηλώνουμε μη προσημασμένες μεταβλητές και με sbyte δηλώνουμε προσημασμένες μεταβλητές

Page 37: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3737

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

Ακέραιοι ΙΙ

Ακέραιοι δύο byte από -32768 έως +32767 και μη προσημασμένοι από 0 έως 65535

akeraios sword -3456 ; με αρχική τιμήetos word 1998 ; επίσης με αρχική τιμή

Ακέραιοι τεσσάρων byte από -2147483648 έως + 2147483647 και μη προσημασμένοι από 0 έως 4294967295

lakeraios sdword -543890 ; με αρχική τιμήposo dword ? ; χωρίς αρχική τιμή

Page 38: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3838

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

Ακέραιοι ΙΙΙ

Αριθμητικές πράξεις: ADD, ADC, INC, SUB, SBB, DEC, MUL, IMUL, DIV, IDIV

NEG για την εύρεση του συμπληρωματικού ενός αριθμού

CMP για τη σύγκριση δύο ακεραίων

Page 39: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3939

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

Πραγματικοί Ι

Οι πραγματικοί αριθμοί απεικονίζονται με τη μορφή της κινητής υποδιαστολής. Ο συμβολισμός αυτός βασίζεται στο πρόσημο S, το κλάσμα F, τον εκθέτη E, και αναπαριστά μια τιμή V ως εξής:

V=(-1)S * F * 10E

Πραγματικός Αριθμός Απλής Ακρίβειας

Πραγματικός Αριθμός Διπλής Ακρίβειας

022233031

πρόσημο εκθέτης κλάσμα

051526263

πρόσημο εκθέτης κλάσμα

Page 40: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4040

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

Πραγματικοί ΙΙ

arithmos real4 1.5

apotelesma real8 1.0e-25

apotelesma real10 -1.2594e+10

Αριθμητικές πράξεις: FADD, FSUB, FMUL, FDIV

Page 41: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4141

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

Λογικές Τιμές Ι

Μια λογική μεταβλητή μπορεί να δηλωθεί χρησιμοποιώντας: ένα bit από ένα byte το οποίο χρησιμοποιείται για την

δήλωση περισσότερων λογικών μεταβλητών. το bit του πρόσημου, αγνοώντας το υπόλοιπο byte. ένα byte. Όταν περιέχει το 0 τότε παριστάνει την τιμή

FALSE, ενώ οποιοσδήποτε άλλος αριθμός παριστάνει τη τιμή TRUE.

x y NOT x x OR y x AND y

0 0 1 0 0

0 1 1 1 0

1 0 0 1 0

1 1 0 1 1

Page 42: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4242

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

Λογικές Τιμές ΙΙ

Οι εντολές λογικών πράξεων είναι: AND, OR, XOR, NOT, TEST.

Οι εντολές αυτές επηρεάζουν τις σημαίες του καταχωρητή EFLAGS. Αυτό που μας ενδιαφέρει είναι ο τρόπος με τον οποίο οι σημαίες Zero, Carry και Sign παρουσιάζουν το αποτέλεσμα που παράγεται από λογικές πράξεις.

Page 43: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4343

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

Χαρακτήρες

kefalaio byte 'G' ; με αρχική τιμή

Page 44: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4444

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

Μονοδιάστατοι Πίνακες Ι

Pascal: Pinax: array[minindex..maxindex] of element_type;

C: element_type Pinax[n];

P[1] P[2] P[3] P[4] P[5] P[6]

ΑΡΧΗ

Page 45: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4545

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

Μονοδιάστατοι Πίνακες ΙΙ

Για να δεσμευτεί χώρος στη μνήμη αρκετός για την αποθήκευση όλων των στοιχείων του πίνακα πρέπει να γίνει η εξής δήλωση:

όνομα-πίνακα βασικός-τύπος n dup (?)

xaraktires byte 128 dup (?) ;Πίνακας 128 ;χαρακτήρων χωρίς;αρχική τιμή.

longakeraioi sdword 24 dup (?) ;Πίνακας 24 μεγάλων ;ακεραίων χωρίς

αρχική ;τιμή.pragmatikoi real4 8 dup (1.0) ;Πίνακας 8 πραγματικών

;αριθμών με αρχική ;τιμή ίση με 1.0.

Page 46: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4646

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

Μονοδιάστατοι Πίνακες ΙΙΙ

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

όνομα-πίνακα βασικός-τύπος τιμή1,τιμή2,...,τιμήk

sqrindex sword 1,4,9,16,25,36,49,64,81,100

Προσπέλαση μονοδιάστατου πίνακα:

διεύθυνση iου στοιχείου = διευθ(P1) + ( i-minindex)*μέγεθος_στοιχείου

Page 47: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4747

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

Μονοδιάστατοι Πίνακες ΙV

Άρα η διεύθυνση του 4ου στοιχείου του πίνακα P, που συμβολίζεται ως P[4], βρίσκεται με τον τύπο:

διεύθυνση 4ου στοιχείου = P + ( 4-1)*2 = P + 6

mov bx,i ; bx:=isub bx,1 ; bx:=i-1add bx,bx ; bx:=(i-1)*2mov ax,P[bx] ; ax:=περιεχόμενο(P+(i-1)*2)

ήmov bx,i ; bx:=isub bx,1 ; bx:=i-1shl bx,1 ; bx:=(i-1)*2mov ax,P[bx] ; ax:=περιεχόμενο(P+(i-1)*2)

Page 48: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4848

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

Μονοδιάστατοι Πίνακες V

Η αρχή του πίνακα αποθηκεύεται στον καταχωρητή βάσης bx και ο δείκτης του στοιχείου στον καταχωρητή si. Ο υπολογισμός της διεύθυνσης γίνεται ως εξής:

lea bx,P ; bx:=address of Pmov si,i ; si:=isub si,1 ; si:=i-1shl si,1 ; si:=(i-1)*2mov ax,[bx][si] ; ax:=περιεχόμενο(P+(i-1)*2)

Η διαφορά φαίνεται στον υπολογισμό της θέσης άλλου στοιχείου του ίδιου πίνακα, όπου ο μόνος υπολογισμός που θα γίνει θα είναι αυτός της θέσης του στοιχείου:

mov si,i2 ; si:=i2sub si,1 ; si:=i2-1shl si,1 ; si:=(i2-1)*2mov ax,[bx][si] ; ax:=περιεχόμενο(P+(i2-1)*2)

Page 49: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4949

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

Πίνακες Πολλών Διαστάσεων Ι

Pascal: Pinaxk:array[minindex1..maxindex1,...,minindexκ..maxind

exκ] of element_type;

C: element_type Pinaxk[n1][n2]...[nk];

Page 50: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 5050

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

Πίνακες Πολλών Διαστάσεων ΙΙ Κατάταξη με πρώτη τη γραμμή

θέση = διεύθυνση_πρώτου_στοιχειου + ((δείκτης_γραμμής – 1) *πλήθος_στοιχείων_γραμμής + (δείκτης_στήλης – 1)) *

μέγεθος_στοιχείου

A 11 A 12 A 13 A 14 A 15

A 21 A 22 A 23 A 24 A 25

A 31 A 32 A 33 A 34 A 35

A 41 A 42 A 43 A 44 A 45

A 11

A 12

A 13

A 14

A 15

A 21

A 22

A 23

A 24

A 25

A 31

A 32

A 33

A 34

A 35

A 41

A 42

A 43

A 44

A 45

Page 51: Δομή μεταγλωττιστή:  backend

Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 5151

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

Πίνακες Πολλών Διαστάσεων ΙΙΙ Κατάταξη με πρώτη τη στήλη

θέση = διεύθυνση_πρώτου_στοιχειου + ((δείκτης_γραμμής – 1) + (δείκτης_στήλης – 1) * πλήθος_στοιχείων_γραμμής) *

μέγεθος_στοιχείου

A 11 A 12 A 13 A 14 A 15

A 21 A 22 A 23 A 24 A 25

A 31 A 32 A 33 A 34 A 35

A 41 A 42 A 43 A 44 A 45

A 11

A 21

A 31

A 41

A 12

A 22

A 32

A 42

A 13

A 23

A 33

A 43

A 14

A 24

A 34

A 44

A 15

A 25

A 35

A 45