Post on 17-Jan-2016
description
Παρασκευή, 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
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Κώδικας τριών διευθύνσεων ΙΙ
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 (κάθε τριάδα θεωρείται ότι αντιστοιχεί σε μία προσωρινή μεταβλητή με πρόσβαση στην τιμή της μέσω αναφοράς στον αριθμό της εντολής)
Παρασκευή, 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 στον πίνακα συμβόλων
Παρασκευή, 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 στον πίνακα συμβόλων
Παρασκευή, 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)
Παραγωγές Σημασιολογικοί κανόνες
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);
Παρασκευή, 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
Παρασκευή, 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:
Συνεπαγόμενη αναπαράσταση:
Θέσεις εντολών τριών διευθύνσεων και όχι ετικέτες
Οι ετικέτες αυτές παράγονται σε μεταγενέστερη φάση και τοποθετούνται στη σωστή θέση του κώδικα
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1515
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Εντολές ελέγχου ροής
If-then-else Διακλάδωση ανάλογα με το αποτέλεσμα
λογικής έκφρασης
Βρόχοι (loops) Αποτίμηση συνθηκών πριν από το loop
(αν χρειάζεται) Αποτίμηση συνθήκης μετά από το loop Διακλάδωση στην αρχή, αν ισχύει η συνθήκη
While, for, do και until υλοποιούνται όλα έτσι
έλεγχος
σώμα loop
έλεγχος
επόμενο block
Παρασκευή, 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
Παρασκευή, 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 είναι κληρονομήσιμη ιδιότητα)
Παρασκευή, 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
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Συνάρτηση δημιουργίας εντολής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);}
Παρασκευή, 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 τελεστέος.
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
Παρασκευή, 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
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Ακέραιοι ΙΙΙ
Αριθμητικές πράξεις: ADD, ADC, INC, SUB, SBB, DEC, MUL, IMUL, DIV, IDIV
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
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Μονοδιάστατοι Πίνακες ΙΙ
Για να δεσμευτεί χώρος στη μνήμη αρκετός για την αποθήκευση όλων των στοιχείων του πίνακα πρέπει να γίνει η εξής δήλωση:
όνομα-πίνακα βασικός-τύπος n dup (?)
xaraktires byte 128 dup (?) ;Πίνακας 128 ;χαρακτήρων χωρίς;αρχική τιμή.
longakeraioi sdword 24 dup (?) ;Πίνακας 24 μεγάλων ;ακεραίων χωρίς
αρχική ;τιμή.pragmatikoi real4 8 dup (1.0) ;Πίνακας 8 πραγματικών
;αριθμών με αρχική ;τιμή ίση με 1.0.
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4646
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Μονοδιάστατοι Πίνακες ΙΙΙ
Η δήλωση πινάκων των οποίων τα στοιχεία έχουν διαφορετικές αρχικές τιμές γίνεται ως εξής:
όνομα-πίνακα βασικός-τύπος τιμή1,τιμή2,...,τιμήk
sqrindex sword 1,4,9,16,25,36,49,64,81,100
Προσπέλαση μονοδιάστατου πίνακα:
διεύθυνση iου στοιχείου = διευθ(P1) + ( i-minindex)*μέγεθος_στοιχείου
Παρασκευή, 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)
Παρασκευή, 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)
Παρασκευή, 21 Απριλίου 2023Παρασκευή, 21 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4949
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ
Πίνακες Πολλών Διαστάσεων Ι
Pascal: Pinaxk:array[minindex1..maxindex1,...,minindexκ..maxind
exκ] of element_type;
C: element_type Pinaxk[n1][n2]...[nk];
Παρασκευή, 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
Παρασκευή, 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