Τετάρτη, 11 Μαΐου 2022 Τετάρτη, 11 Μαΐου 2022 Τμ. Πληροφορικής, Α.Π.Θ. Τμ. Πληροφορικής, Α.Π.Θ. 1 ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δομή μεταγλωττιστή: backend Παραγωγή κώδικα Λεξική ανάλυση Συντακτική ανάλυση Σημασιολογική ανάλυση Βελτιστοποίηση κώδικα Παραγωγή ενδιάμεσου κώδικα ενδιάμεσ ος κώδικας • Η κατασκευή του πρώτου στάδιου επεξεργασίας (front end) είναι σε μεγάλο βαθμό αυτοματοποιημένη • Για το τελικό στάδιο επεξεργασίας (back end) δε διαθέτουμε γενικά αυτοματοποιημένες τεχνικές κατασκευής, γιατί εξάλλου ο παραγόμενος κώδικας εξαρτάται από τα χαρακτηριστικά της μηχανής στην οποία θα εκτελείται και οι δυνατότητες βελτιστοποιήσεων ποικίλλουν • Η δημιουργία ενδιάμεσου κώδικα επηρεάζει καθοριστικά την απόδοση του back end
Δομή μεταγλωττιστή: backend. Λεξική ανάλυση. Συντακτική ανάλυση. Σημασιολογική ανάλυση. Παραγωγή ενδιάμεσου κώδικα. ενδιάμεσος κώδικας. Βελτιστοποίηση κώδικα. Παραγωγή κώδικα. Η κατασκευή του πρώτου στάδιου επεξεργασίας ( front end ) είναι σε μεγάλο βαθμό αυτοματοποιημένη - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 11
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Δομή μεταγλωττιστή: backend
Παραγωγή κώδικα
Λεξική ανάλυση
Συντακτική ανάλυση
Σημασιολογική ανάλυση
Βελτιστοποίηση κώδικα
Παραγωγή ενδιάμεσου
κώδικα
ενδιάμεσοςκώδικας
• Η κατασκευή του πρώτου στάδιου επεξεργασίας (front end) είναι σε μεγάλο βαθμό αυτοματοποιημένη
• Για το τελικό στάδιο επεξεργασίας (back end) δε διαθέτουμε γενικά αυτοματοποιημένες τεχνικές κατασκευής, γιατί εξάλλου ο παραγόμενος κώδικας εξαρτάται από τα χαρακτηριστικά της μηχανής στην οποία θα εκτελείται και οι δυνατότητες βελτιστοποιήσεων ποικίλλουν
• Η δημιουργία ενδιάμεσου κώδικα επηρεάζει καθοριστικά την απόδοση του back end
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 22
Υβριδικές προσεγγίσεις που χρησιμοποιούν τεχνικές από τις δύο προαναφερόμενες οικογένειες:
Κάποιοι μεταγλωττιστές χρησιμοποιούν κώδικα τριών διευθύνσεων και για επαναληπτικούς βρόχους, εντολές if και αναφορές σε array χρησιμοποιούν συντακτικά δένδρα
υψηλό επίπεδο
χαμηλό επίπεδο (πιο κοντά στη μηχανή)
γραφική ενδιάμεση
αναπαράσταση
γραμμικήενδιάμεση
αναπαράσταση
Παρασκευή, 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
Παρασκευή, 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
Παρασκευή, 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 τότε η εκτέλεση ολοκληρώνεται πάντα στην τελευταία εντολή
του
Παρασκευή, 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 μοναδικοί αριθμοί)
Παρασκευή, 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
αν η συνθήκη δεν είναι αληθής τότε συνεχίζεται η εκτέλεση με την επόμενη εντολή
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 88
οι προσωρινές μεταβλητές αντιστοιχούν σε εσωτερικούς κόμβους του συντακτικού δένδρου
Οι μεταβλητές αναπαριστώνται από τη θέση τους στον πίνακα συμβόλων
Οι εντολές του κώδικα τριών διευθύνσεων μπορούν να αναπαρασταθούν σε πίνακα από τετράδες: πράξη, παράμετρος 1, παράμετρος 2, αποτέλεσμα σε πίνακα από τριάδες: πράξη, παράμετρος 1, παράμετρος 2 (κάθε τριάδα θεωρείται ότι αντιστοιχεί σε μία προσωρινή μεταβλητή με πρόσβαση στην τιμή της μέσω αναφοράς στον αριθμό της εντολής)
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 99
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Παραγωγή κώδικα τριών διευθύνσεων
Παραγωγές Σημασιολογικοί κανόνεςS id := E id.place lookup(id.name);
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 στον πίνακα συμβόλων
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1010
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Παραγωγή κώδικα για μηχανή στοίβας
Παραγωγές Σημασιολογικοί κανόνεςS id := E id.place lookup(id.name);
(οι παράμετροι της εντολής 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 στον πίνακα συμβόλων
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1111
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Παραγωγή κώδικα για λογικές εκφράσεις
Δύο προσεγγίσεις: Αριθμητική αναπαράσταση Συνεπαγόμενη αναπαράσταση
Αριθμητική αναπαράσταση Χρησιμοποιούμε 1 για το true και 0 για το false Σε κώδικα τριών διευθύνσεων αποθηκεύεται το
αποτέλεσμα σε προσωρινή μεταβλητή Σε κώδικα μηχανής στοίβας το αποτέλεσμα αποθηκεύεται
στη στοίβα Συνεπαγόμενη αναπαράσταση
Για λογικές εκφράσεις που χρησιμοποιούνται σε έλεγχο ροής (π.χ. εντολές if, while κλπ.) και δε χρησιμοποιούνται για τον υπολογισμό ενός αποτελέσματος,
δημιουργούμε κώδικα που απλά διακλαδώνει στην κατάλληλη εντολή ανάλογα με το αποτέλεσμα
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1212
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Λογικές εκφράσεις: αριθμητική αναπαράσταση
Ιδιότητες : E.place: θέση όπου βρίσκεται η τιμή για την έκφραση EE.code: σειρά εντολών που παράγονται για την Eid.place: θέση του id
Καθ. μεταβλητή: nextstat: επιστρέφει τη θέση της νέας εντολής που θα δημιουργηθεί(κάθε κλήση στη gen() αυξάνει τη nextstat κατά 1)
Ιδιότητες : S.code: σειρά εντολών που παράγονται για την SS.next: ετικέτα για την εντολή που θα εκτελεστεί αμέσως μετά την S(η S.next είναι κληρονομήσιμη ιδιότητα)
Παρασκευή, 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: ...
Παρασκευή, 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 τότε συμπληρώνονται οι ετικέτες στις εντολές που αναφέρονται στις λίστες
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2020
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Παραγωγή κώδικα στο μεταγλωττιστή της YAPL
Στο μεταγλωττιστή του βιβλίου παράγεται κώδικας assembly απευθείας, με μεταδιατεταγμένη διάσχιση του
συντακτικού δένδρου από αριστερά προς τα δεξιά
Δε χρησιμοποιείται κώδικας τριών διευθύνσεων ή κάποια άλλη μορφή ενδιάμεσης αναπαράστασης εκτός του παραγόμενου συντακτικού δέντρου
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2121
Παρασκευή, 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); }}
Παρασκευή, 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);
}
Παρασκευή, 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
καταχωρητέςδεδομένων
καταχωρητέςδιευθύνσεων
δείκτης στοίβας (κορυφή)
βάση υπολογισμού διευθύνσεωνδείκτες
διευθύνσεων σε σχέση με μία βάση
βάσεις τμημάτων μνήμης
Παρασκευή, 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)
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2626
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Παραγωγή κώδικα: Αρχιτεκτονική Pentium ΙΙI
Επικάλυψη στην εκχώρηση τμημάτων μνήμης
050005000
14FFF
cs
SS
ES
1700
1888
1700
DS
18880
17000
26FFF
2887F
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2727
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Παραγωγή κώδικα: Αρχιτεκτονική Pentium ΙV
o EFLAGS είναι καταχωρητής σημαιών
Οι εντολές χρησιμοποιούν δεδομένα τα οποία βρίσκονται είτε
σε καταχωρητές δεδομένων είτε στην ίδια την εντολή είτε στη μνήμη
Ανάλογα με τον τύπο της εντολής τα δεδομένα μπορεί να είναι
ενός byte μιας λέξης (word) μιας διπλής λέξης (double)
Τουλάχιστο ένα από τα δεδομένα πρέπει να βρίσκεται σε καταχωρητή
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2828
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Παραγωγή κώδικα: Εντολές assembly I
MOV προορισμός, αφετηρίαΗ εντολή MOV καταχωρεί στον προορισμό αντίγραφο του δεύτερου τελεστέου. Αν ο προορισμός είναι ένας από τους καταχωρητές τμήματος (DS, ES, SS, FS, GS), τότε η αφετηρία πρέπει να είναι ένας από τους καταχωρητές δεδομένων.
ADD προορισμός,αφετηρίαΗ εντολή ADD προσθέτει δύο ακεραίους. Ο προορισμός δηλώνει τον προορισμό του αποτελέσματος της πράξης, δηλαδή ότι το άθροισμα καταχωρείται στον καταχωρητή ή στη διεύθυνση προορισμού.
SUB προορισμός,αφετηρίαΗ εντολή SUB αφαιρεί το δεύτερο τελεστέο από τον πρώτο. Η διαφορά καταχωρείται στον καταχωρητή ή στη μνήμη προορισμού.
IMULΠροσημασμένος πολλαπλασιασμός σε διάφορες μορφές με ένα ή δύο ορίσματα.
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2929
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Παραγωγή κώδικα: Εντολές assembly IΙΗ εντολή IMUL εκτελεί προσημασμένο πολλαπλασιασμό. Κάποιες μορφές της εντολής χρησιμοποιούν έμμεσα τελεστέους που βρίσκονται σε καταχωρητές.
IDIVΗ εντολή IDIV εκτελεί προσημασμένη διαίρεση. Ο διαιρετέος πρέπει να βρίσκεται σε έναν από τους καταχωρητές AL, AX και EAX ανάλογα με τον τύπο του, ενώ το πηλίκο και το υπόλοιπο καταχωρούνται έμμεσα σε συγκεκριμένους καταχωρητές. Ο διαιρέτης δίδεται ως r/m τελεστέος.
word registerword register*r/m worddword registerdword register*r/m dword
Παρασκευή, 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 τοποθετεί το όρισμα στην κορυφή της στοίβας, την οποία δείχνει ο δείκτης της στοίβας.
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3131
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Παραγωγή κώδικα: Εντολές assembly IV
POP όρισμαΗ εντολη POP διαγράφει από τη στοίβα το δεδομένο που δείχνει ο καταχωρητής SP ή ESP, και το αποθηκεύει στο όρισμα της εντολής, που μπορεί να είναι θέση μνήμης, καταχωρητής ή καταχωρητής τμήματος. Ο καταχωρητής SP αυξάνεται κατά 2 για 16 bit δεδομένο ή κατά 4 για 32 bit δεδομένο.
Παρασκευή, 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
Παρασκευή, 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
Παρασκευή, 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
κλήση υποπρογράμματος
πέρασμα παραμέτρου μέσω της στοίβας
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3535
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Απεικόνιση Τύπων & Δεδομένων στη Μνήμη
Τύπος Δεδομένων είναι ένα σύνολο τιμών με τις επιτρεπτές πράξεις επί των τιμών αυτών.
Περιγραφή Τύπου Υψηλού Επιπέδου: χαρακτηριστικά που διακρίνουν τις τιμές του τύπου, τιμές, πράξεις
Περιγραφή Τύπου Χαμηλού Επιπέδου: απεικόνιση (δήλωση) τύπου στην μνήμη, εντολές της γλώσσας του επεξεργαστή που υλοποιούν τις πράξεις του υψηλού επιπέδου
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3636
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Ακέραιοι Ι
Ακέραιοι προσημασμένοι ενός byte από -128 έως +127 και μη προσημασμένοι από 0 έως 255
arithmos sbyte ? ; χωρίς αρχική τιμή
apotelesma byte ? ; χωρίς αρχική τιμή
με byte δηλώνουμε μη προσημασμένες μεταβλητές και με sbyte δηλώνουμε προσημασμένες μεταβλητές
Παρασκευή, 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 ? ; χωρίς αρχική τιμή
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3838
NEG για την εύρεση του συμπληρωματικού ενός αριθμού
CMP για τη σύγκριση δύο ακεραίων
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3939
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Πραγματικοί Ι
Οι πραγματικοί αριθμοί απεικονίζονται με τη μορφή της κινητής υποδιαστολής. Ο συμβολισμός αυτός βασίζεται στο πρόσημο S, το κλάσμα F, τον εκθέτη E, και αναπαριστά μια τιμή V ως εξής:
V=(-1)S * F * 10E
Πραγματικός Αριθμός Απλής Ακρίβειας
Πραγματικός Αριθμός Διπλής Ακρίβειας
022233031
πρόσημο εκθέτης κλάσμα
051526263
πρόσημο εκθέτης κλάσμα
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4040
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Πραγματικοί ΙΙ
arithmos real4 1.5
apotelesma real8 1.0e-25
apotelesma real10 -1.2594e+10
Αριθμητικές πράξεις: FADD, FSUB, FMUL, FDIV
Παρασκευή, 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
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4242
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Λογικές Τιμές ΙΙ
Οι εντολές λογικών πράξεων είναι: AND, OR, XOR, NOT, TEST.
Οι εντολές αυτές επηρεάζουν τις σημαίες του καταχωρητή EFLAGS. Αυτό που μας ενδιαφέρει είναι ο τρόπος με τον οποίο οι σημαίες Zero, Carry και Sign παρουσιάζουν το αποτέλεσμα που παράγεται από λογικές πράξεις.
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4343
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Χαρακτήρες
kefalaio byte 'G' ; με αρχική τιμή
Παρασκευή, 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]
ΑΡΧΗ
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4545
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Μονοδιάστατοι Πίνακες ΙΙ
Για να δεσμευτεί χώρος στη μνήμη αρκετός για την αποθήκευση όλων των στοιχείων του πίνακα πρέπει να γίνει η εξής δήλωση:
Η διαφορά φαίνεται στον υπολογισμό της θέσης άλλου στοιχείου του ίδιου πίνακα, όπου ο μόνος υπολογισμός που θα γίνει θα είναι αυτός της θέσης του στοιχείου: