Ãëþóóá ôåôñüäùí. ÌïñöÞ ôåôñüäáò: n: op, x, y, z üðïõ:

Σχετικά έγγραφα
Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Μεταγλωττιστές Ενδιάμεσος Κώδικας Νίκος Παπασπύου, Κωστής Σαγώνας

Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Τελικός Κώδικας. Μεταγλωττιστές. Νίκος Παπασπύου, Κωστής Σαγώνας

Στοιχεία από Assembly Γιώργος Μανής

Τυπικές Γλώσσες. Μεταγλωττιστές. (μέρος 1ο) Νίκος Παπασπύου, Κωστής Σαγώνας

ÓÕÍÄÕÁÓÔÉÊÇ É, ÓÅÐÔÅÌÂÑÉÏÓ ÏÌÁÄÁ ÈÅÌÁÔÙÍ B

ÓÕÍÄÕÁÓÔÉÊÇ É, ÓÅÐÔÅÌÂÑÉÏÓ ÏÌÁÄÁ ÈÅÌÁÔÙÍ Á

ÌåôáãëùôôéóôÝò. ÅéóáãùãÞ. ÅéóáãùãÞ (ii) Íßêïò Ðáðáóðýñïõ ÊùóôÞò Óáãþíáò. Áñ éêþ ãëþóóá L A A T ÔåëéêÞ ãëþóóá L T Y

ÊåöÜëáéï 3 ÏÑÉÆÏÕÓÅÓ. 3.1 ÅéóáãùãÞ

ÄéáêñéôÝò êáé óõíå åßò ôõ áßåò ìåôáâëçôýò ÁóêÞóåéò

ÊåöÜëáéï 4 ÄÉÁÍÕÓÌÁÔÁ. 4.1 ÅéóáãùãÞ (ÃåùìåôñéêÞ)

ÏñãÜíùóç ÐñïãñÜììáôïò

ÊåöÜëáéï 5 ÄÉÁÍÕÓÌÁÔÉÊÏÉ ÙÑÏÉ. 5.1 ÅéóáãùãÞ. 56 ÊåöÜëáéï 5. ÄÉÁÍÕÓÌÁÔÉÊÏÉ ÙÑÏÉ

16. ÌåëÝôç ôùí óõíáñôþóåùí y=çìx, y=óõíx êáé ôùí ìåôáó çìáôéóìþí ôïõò.

ÁðáñéèìçôÝò- ÓõãêñéôÝò

ÓÕÍÈÇÊÇ ÁÌÅÔÁÈÅÔÏÔÇÔÁÓ ÓÕÓÔÇÌÁÔÏÓ ÔÏÉ ÙÌÁÔÙÍ ÐÁÑÁÑÔÇÌÁ Â

Συντακτική ανάλυση. Μεταγλωττιστές. (μέρος 3ον) Νίκος Παπασπύου, Κωστής Σαγώνας

Ç ãëþóóá Alan. ÌåôáãëùôôéóôÝò 2011 ÈÝìá åñãáóßáò

3.1 Íá âñåèåß ôï ðåäßï ïñéóìïý ôçò óõíüñôçóçò f: 4 x. (iv) f(x, y, z) = sin x 2 + y 2 + 3z Íá âñåèïýí ôá üñéá (áí õðüñ ïõí): lim

( ) ξî τέτοιο, + Ý åé ìßá ôïõëü éóôïí ñßæá óôï äéüóôçìá ( ) h x =,να δείξετε ότι υπάρχει ( α,β) x ΕΦΑΡΜΟΓΕΣ ΣΤΙΣ ΠΑΡΑΓΩΓΟΥΣ

Παραγωγή Ενδιάµεσου Κώδικα. Γιώργος Μανής

Ç ãëþóóá Grace. ÌåôáãëùôôéóôÝò 2009 ÈÝìá åñãáóßáò

Παραγωγή Ενδιάµεσου Κώδικα

2.4 ñçóéìïðïéþíôáò ôïí êáíüíá áëõóßäáò íá âñåèåß ç dr

Ç ãëþóóá Tony. ÌåôáãëùôôéóôÝò 2010 ÈÝìá åñãáóßáò

: Ï ïäçãüò áõôüò åîçãåß ôïí ôñüðï áíôéêáôüóôáóçò êáé áíáâüèìéóçò ôçò ìíþìçò óôïí õðïëïãéóôþ.

Ó ÅÄÉÁÓÌÏÓ - ÊÁÔÁÓÊÅÕÇ ÓÔÏÌÉÙÍ & ÅÉÄÉÊÙÍ ÅÎÁÑÔÇÌÁÔÙÍ ÊËÉÌÁÔÉÓÌÏÕ V X

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

1. Íá ëõèåß ç äéáöïñéêþ åîßóùóç (15 ìïí.) 2. Íá âñåèåß ç ãåíéêþ ëýóç ôçò äéáöïñéêþò åîßóùóçò (15 ìïí.)

ιαδικασία åãêáôüóôáóçò MS SQL Server, SingularLogic Accountant, SingularLogic Accountant Ìéóèïäïóßá

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

Προτεινόμενα θέματα Πανελλαδικών εξετάσεων. Χημεία Θετικής Κατεύθυνσης ΕΛΛΗΝΟΕΚΔΟΤΙΚΗ

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

Θ. Ζαχαριάδης Αν. Καθηγητής. Λ. Σαράκης Καθ. Εφαρμογών

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

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

: Ï ïäçãüò áõôüò åîçãåß ôïí ôñüðï áíôéêáôüóôáóçò êáé áíáâüèìéóçò ôçò ìíþìçò óôïí õðïëïãéóôþ.

¼ñãáíá Èåñìïêñáóßáò - ÓõóêåõÝò Øõêôéêþí Ìç áíçìüôùí

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

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

Ç ãëþóóá Dana. ÌåôáãëùôôéóôÝò 2008 ÈÝìá åñãáóßáò

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

DOS Microsoft Windows... 65

: Ï ïäçãüò áõôüò åîçãåß ôïí ôñüðï áíôéêáôüóôáóçò êáé áíáâüèìéóçò ôçò ìíþìçò óôïí õðïëïãéóôþ.

: Ï ïäçãüò áõôüò åîçãåß ôïí ôñüðï áíôéêáôüóôáóçò êáé áíáâüèìéóçò ôçò ìíþìçò óôïí õðïëïãéóôþ.

ÖÅÊ 816 ÅÖÇÌÅÑÉÓ ÔÇÓ ÊÕÂÅÑÍÇÓÅÙÓ (ÔÅÕ ÏÓ ÄÅÕÔÅÑÏ) ÏÄÇÃÉÅÓ ÐÁ ÔÇ ÓÕÌÐËÇÑÙÓÇ ÔÇÓ ÁÉÔÇÓÇÓ ÅÃÊÅÊÑÉÌÅÍÏÕ ÁÐÏÈÇÊÅÕÔÇ Ï ÇÌÁÔÙÍ 1. ÇÌÅÑÏÌÇÍÉÁ: ÁíáãñÜöåô

Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Εισαγωγή. Μεταγλωττιστές. Νίκος Παπασπύου, Κωστής Σαγώνας

Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Λεκτική Ανάλυση. Μεταγλωττιστές. Νίκος Παπασπύου, Κωστής Σαγώνας

Óõíå Þ êëüóìáôá & Áöáéñåôéêüò Åõêëåßäåéïò áëãüñéèìïò

Ìáèáßíïõìå ôéò áðïäåßîåéò

3.1 H Ýííïéá ôçò óõíüñôçóçò ÐÁÑÁÄÅÉÃÌÁÔÁ - ÅÖÁÑÌÏÃÅÓ

ΕΛΕΝΗ ΓΕΡΟΥΛΑΝΟΥ. Εικονογράφηση ΔΡΑΣΤΗΡΙΟΤΗΤΕΣ ΓΙΑ ΠΑΙΔΙΑ ΝΗΠΙΑΓΩΓΕΙΟΥ ΛΗΔΑ ΒΑΡΒΑΡΟΥΣΗ ΕΚΔΟΣΕΙΣ ΠΑΠΑΔΟΠΟΥΛΟΣ

: Ï ïäçãüò áõôüò åîçãåß ôïí ôñüðï áíôéêáôüóôáóçò êáé áíáâüèìéóçò ôçò ìíþìçò óôïí õðïëïãéóôþ.

Estimation Theory Exercises*

Äéá åßñéóç äåäïìýíùí

Ανώτερα Μαθηματικά Ι. Ανοικτά Ακαδημαϊκά Μαθήματα. Ενότητα 7: Οριακή Τιμή Συνάρτησης. Αθανάσιος Μπράτσος. Τμήμα Ναυπηγών Μηχανικών ΤΕ

ÁíÜðôõîç åöáñìïãþí óå ðñïãñáììáôéóôéêü ðåñéâüëëïí

Τυπικές Γλώσσες. Μεταγλωττιστές. (μέρος 2ο) Νίκος Παπασπύου, Κωστής Σαγώνας

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

Cel animation. ÅöáñìïãÝò ðïëõìýóùí

å) Íá âñåßôå ôï äéüóôçìá ðïõ äéáíýåé ôï êéíçôü êáôü ôï ñïíéêü äéüóôçìá áðü ôï ðñþôï Ýùò ôï Ýâäïìï äåõôåñüëåðôï ôçò êßíçóþò ôïõ.

ÌÁÈÇÌÁÔÉÊÇ ËÏÃÉÊÇ Ë1 5ï ðáêýôï áóêþóåùí

11. ΜΕΝΤΕΣΕΔΕΣ ΕΠΙΠΛΩΝ

Καταχωρητές & τμήματα μνήμης του Ματθές Δημήτριος Καθηγητής Πληροφορικής

11. ΜΕΝΤΕΣΕΔΕΣ ΕΠΙΠΛΩΝ

Οδηγός Εκμάθησης στην Assembly

3524 ÅÖÇÌÅÑÉÓ ÔÇÓ ÊÕÂÅÑÍÇÓÅÙÓ (ÔÅÕ ÏÓ ÄÅÕÔÅÑÏ)

Chi-Square Goodness-of-Fit Test*

Σημειώσεις για τον 80x86

8. ÅðéëïãÞ êáé åðáíüëçøç

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

ÏÑÉÁÊÇ ÔÉÌÇ ÓÕÍÁÑÔÇÓÇÓ

ÐÉÍÁÊÅÓ ÔÉÌÙÍ ÁÍÔÉÊÅÉÌÅÍÉÊÙÍ ÁÎÉÙÍ

Ενότητα 7: Διαδικασιακός Προγραμματισμός

4.5 ÁóêÞóåéò çìéêþò éóïññïðßáò ìå åðßäñáóç óôç èýóç éóïññïðßáò

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

Áóõìðôùôéêïß Óõìâïëéóìïß êáé Éåñáñ ßá ÓõíáñôÞóåùí

Μαθηματικά ΙΙΙ. Ανοικτά Ακαδημαϊκά Μαθήματα. Ενότητα 16: Προσέγγιση συνήθων διαφορικών εξισώσεων Μέρος ΙΙ. Αθανάσιος Μπράτσος

J-Y(St)Y Ôçëåöùíéêü êáëþäéï åóùôåñéêïý þñïõ ìå èùñüêéóç êáôü VDE 0815

1. i) ÊÜèå üñïò ðñïêýðôåé áðü ôçí ðñüóèåóç ôïõ óôáèåñïý áñéèìïý 3 óôïí ðñïçãïýìåíï, ïðüôå Ý ïõìå áñéèìçôéêþ ðñüïäï á í ìå ðñþôï üñï

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

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

Ανώτερα Μαθηματικά Ι. Ανοικτά Ακαδημαϊκά Μαθήματα. Ενότητα 11: Διανυσματική Συνάρτηση. Αθανάσιος Μπράτσος. Τμήμα Ναυπηγών Μηχανικών ΤΕ

9. ÁíÜðôõîç ðñïãñáììüôùí ìå ñïíéêýò ëåéôïõñãßåò.

ÅñãáóôÞñéï 1. ÄïìÝò ÄåäïìÝíùí. 1.1 Óôü ïé. 1.2 Áðáñáßôçôï Õëéêü

Êáëþò Þëèáôå. Ïäçãüò ãñþãïñçò Ýíáñîçò. ÓõíäÝóôå. ÅãêáôáóôÞóôå. Áðïëáýóôå

Union of Pure and Applied Chemistry).

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Intel x86 ISA. Νίκος Μπέλλας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών ΗΥ

e-school EëëçíéêÞ Åôáéñåßá ÌåëÝôçò Ìåôáâïëéóìïý ôùí Ïóôþí Εκπαιδευτικά μαθήματα μýóù δéáäéêôýïõ της Ε.Ε.Μ.Μ.Ο.

Επιμέλεια: ρ. Ν. Σγούρος ρ. Ι. Κονταξάκης

µµ Setup : µ 2005

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

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

Üóêçóç 15. ÕëéêÜ - åîáñôþìáôá äéêôýïõ ðåðéåóìýíïõ áýñá êáé ðíåõìáôéêýò óõóêåõýò

ÁñéèìçôéêÞ ÁíÜëõóç É - ÓÅÌÖÅ Åñãáóßá 2 ìåóåò êáé åðáíáëçðôéêýò ìýèïäïé

: Ï ïäçãüò áõôüò ðåñéãñüöåé ôïí ôñüðï ñþóçò êáñôþí åîùôåñéêþí ìýóùí ìå ôïí õðïëïãéóôþ.

Åîéóþóåéò 1ïõ âáèìïý

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

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

Transcript:

Ãëþóóá ôåôñüäùí ÌïñöÞ ôåôñüäáò: n: op, x, y, z üðïõ: n: åôéêýôá ôåôñüäáò (öõóéêüò áñéèìüò) op: ôåëåóôþò x, y, z: ôåëïýìåíá ÁíÜëïãá ìå ôï åßäïò ôïõ ôåëåóôþ, êüðïéá ôåëïýìåíá åíäå ïìýíùò ðáñáëåßðïíôáé Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 132 / 216

Ôåëïýìåíá (i) ÓôáèåñÜ ¼íïìá áêýñáéá, ðñáãìáôéêþ, ëïãéêþ áñáêôþñáò, óõìâïëïóåéñü, nil ìåôáâëçôþ, ðáñáìýôñïò, õðïðñüãñáììá ÐñïóùñéíÞ ìåôáâëçôþ: $n ÁðïôÝëåóìá óõíüñôçóçò: $$ Áðïäåéêôïäüôçóç: [x] x áðëü ôåëïýìåíï Äéåýèõíóç: {x} x áðëü ôåëïýìåíï Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 133 / 216

Ôåëïýìåíá (ii) ÅôéêÝôá åíôïëþò óôï áñ éêü ðñüãñáììá ôåôñüäáò Ôñüðïò ðåñüóìáôïò V : êáô' áîßá R : êáô' áíáöïñü RET : èýóç áðïôåëýóìáôïò óõíüñôçóçò Êåíü : ÐñïóùñéíÜ êåíü : * (ãéá backpatching) Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 134 / 216

ÔåëåóôÝò (i) unit, I,, endu, I,, áñ Þ êáé ôýëïò äïìéêþò ìïíüäáò op, x, y, z op {+, -, *, /, %} z := x op y :=, x,, z z := x array, x, y, z z := ç äéåýèõíóç ôïõ óôïé åßïõ x[y] Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 135 / 216

ÔåëåóôÝò (ii) op, x, y, z op {=, <>, >, <, >=, <=} áí x op y ôüôå ðþãáéíå óôçí ôåôñüäá z ifb, x,, z áí ç ëïãéêþ ôéìþ x åßíáé áëçèþò ôüôå ðþãáéíå óôçí ôåôñüäá z jump,,, z ðþãáéíå óôçí ôåôñüäá z label, I,, jumpl,,, I ïñéóìüò åôéêýôáò êáé Üëìá ðñïò áõôþí Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 136 / 216

ÔåëåóôÝò (iii) call,,, I êüëåóå ôç äïìéêþ ìïíüäá I par, x, m, ðýñáóå ôçí ðñáãìáôéêþ ðáñüìåôñï x ìå ôñüðï ðåñüóìáôïò m ret,,, åðéóôñïöþ áðü ôçí ôñý ïõóá äïìéêþ ìïíüäá Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 137 / 216

ÌåôáâëçôÝò éäéïôþôùí PLACE: èýóç üðïõ âñßóêåôáé áðïèçêåõìýíç ç ôéìþ ìéáò l-value Þ ìéáò r-value TYPE: ôýðïò ìéáò l-value Þ ìéáò r-value NEXT : ëßóôá áðü åôéêýôåò ôåôñüäùí ðïõ ðåñéý ïõí Üëìáôá óôçí åðüìåíç åíôïëþ TRUE, FALSE: ëßóôåò áðü åôéêýôåò ôåôñüäùí ðïõ ðåñéý ïõí Üëìáôá óôïí êþäéêá ðïõ ðñýðåé íá åêôåëåóôåß áí ìéá óõíèþêç åßíáé áëçèþò Þ øåõäþò Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 138 / 216

ÂïçèçôéêÝò õðïñïõôßíåò (i) NEXTQUAD() ÅðéóôñÝöåé ôïí áñéèìü ôçò åðüìåíçò ôåôñüäáò GENQUAD(op, x, y, z) ÃåííÜ ôçí åðüìåíç ôåôñüäá op, x, y, z NEWTEMP(t) Äçìéïõñãåß ìéá íýá ðñïóùñéíþ ìåôáâëçôþ ôýðïõ t EMPTYLIST() Äçìéïõñãåß ìéá êåíþ ëßóôá åôéêåôþí ôåôñüäùí Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 139 / 216

ÂïçèçôéêÝò õðïñïõôßíåò (ii) MAKELIST(x) Äçìéïõñãåß ìéá ëßóôá åôéêåôþí ôåôñüäùí ðïõ ðåñéý åé ìüíï ôï óôïé åßï x MERGE(l 1,..., l n ) ÓõíÝíùóç ôùí ëéóôþí åôéêåôþí ôåôñüäùí l 1... l n BACKPATCH(l, z) ÁíôéêáèéóôÜ óå üëåò ôéò ôåôñüäåò ðïõ ðåñéý ïíôáé óôçí l ôçí Üãíùóôç åôéêýôá ôåôñüäáò ìå ôç z (backpatching) Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 140 / 216

ÁñéèìçôéêÝò åêöñüóåéò ÁêÝñáéåò óôáèåñýò r-value ::= integer-const { P 1 } P 1 : { r-value.place = integer-const ; } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 141 / 216

ÁñéèìçôéêÝò åêöñüóåéò ÁêÝñáéåò óôáèåñýò r-value ::= integer-const { P 1 } P 1 : { r-value.place = integer-const ; } ÔåëåóôÝò ìå äýï ôåëïýìåíá r-value ::= expr binop expr { P 14 } P 14 : { W = NEWTEMP( r-value.type); GENQUAD( binop.name, expr 1.PLACE, expr 2.PLACE, W ); r-value.place = W ; } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 141 / 216

ËïãéêÝò åêöñüóåéò (i) <cond>... jump,,, 31... jump,,, 42... jump,,, 31... jump,,, 31... jump,,, 42... <cond>.false <cond>.true Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 142 / 216

ËïãéêÝò åêöñüóåéò (ii) ËïãéêÝò åêöñüóåéò óå óõìâïëéóìü 0/1 cond ::= expr <cond> <expr> ifb, <expr>.place,, * jump,,, * FALSE TRUE Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 143 / 216

ËïãéêÝò åêöñüóåéò (iii) ËïãéêÝò åêöñüóåéò óå óõìâïëéóìü 0/1 cond ::= expr { P 21 } P 21 : { cond.true = MAKELIST(NEXTQUAD()); GENQUAD(ifb, expr.place,, ); cond.false = MAKELIST(NEXTQUAD()); GENQUAD(jump,,, ); } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 144 / 216

ËïãéêÝò åêöñüóåéò (iv) ÔåëåóôÝò óýãêñéóçò cond ::= expr 1 relop expr 2 <cond> <expr> 1 <expr> 2 relop, <expr> 1.PLACE, <expr> 2.PLACE, * jump,,, * FALSE TRUE Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 145 / 216

ËïãéêÝò åêöñüóåéò (v) ÔåëåóôÝò óýãêñéóçò cond ::= expr 1 relop expr 2 { P 23 } P 23 : { cond.true = MAKELIST(NEXTQUAD()); GENQUAD( relop.name, expr 1.PLACE, expr 2.PLACE, ); cond.false = MAKELIST(NEXTQUAD()); GENQUAD(jump,,, ); } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 146 / 216

ËïãéêÝò åêöñüóåéò (vi) ñíçóç cond ::= \not" cond <cond> TRUE <cond> FALSE FALSE TRUE Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 147 / 216

ËïãéêÝò åêöñüóåéò (vii) Óýæåõîç cond ::= cond 1 \and" cond 2 <cond> FALSE <cond> 1 TRUE FALSE <cond> 2 TRUE FALSE TRUE Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 148 / 216

ËïãéêÝò åêöñüóåéò (viii) Óýæåõîç cond ::= cond 1 \and" { P 25 } cond 2 { P 26 } P 25 : { BACKPATCH( cond 1.TRUE, NEXTQUAD()); } P 26 : { cond.false = MERGE( cond 1.FALSE, cond 2.FALSE); cond.true = cond 2.TRUE; } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 149 / 216

ÁðëÝò åíôïëýò ÊåíÞ åíôïëþ stmt ::= ɛ { P 29 } P 29 : { stmt.next = EMPTYLIST(); } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 150 / 216

ÁðëÝò åíôïëýò ÊåíÞ åíôïëþ stmt ::= ɛ { P 29 } P 29 : { stmt.next = EMPTYLIST(); } ÅíôïëÞ áíüèåóçò stmt ::= l-value \:=" expr { P 30 } P 30 : { GENQUAD(\:=", expr.place,, l-value.place); stmt.next = EMPTYLIST(); } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 150 / 216

Óýíèåôç åíôïëþ (i) stmt ::= block block ::= \begin" stmt ( \;" stmt ) \end" <block> <stmt> 1 NEXT <stmt> 2 NEXT NEXT Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 151 / 216

Óýíèåôç åíôïëþ (ii) stmt ::= block { P 34 } P 34 : { stmt.next = block.next ; } block ::= \begin" stmt 1 { P 35 } ( \;" { P 36 } stmt 2 { P 37 } ) \end" { P 38 } P 35 : { L = stmt 1.NEXT ; } P 36 : { BACKPATCH(L, NEXTQUAD()); } P 37 : { L = stmt 2.NEXT ; } P 38 : { block.next = L; } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 152 / 216

ÅíôïëÞ if (i) stmt ::= \if " cond \then" stmt [ \else" stmt ] <stmt> FALSE <cond> TRUE <stmt> TRUE <cond> FALSE <stmt> 1 jump,,, * NEXT <stmt> 1 NEXT <stmt> 2 NEXT NEXT NEXT Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 153 / 216

ÅíôïëÞ if (ii) stmt ::= \if " cond { P 39 } \then" stmt 1 [ \else" { P 40 } stmt 2 { P 41 } ] { P 42 } P 39 : { BACKPATCH( cond.true, NEXTQUAD()); L 1 = cond.false; L 2 = EMPTYLIST(); } P 40 : { L 1 = MAKELIST(NEXTQUAD()); GENQUAD(jump,,, ); BACKPATCH( cond.false, NEXTQUAD()); } P 41 : { L 2 = stmt 2.NEXT ; } P 42 : { stmt.next = MERGE(L 1, stmt 1.NEXT, L 2 ); } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 154 / 216

ÅíôïëÞ while (i) stmt ::= \while" cond \do" stmt <stmt> FALSE <cond> TRUE <stmt> 1 jump,,, * NEXT NEXT Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 155 / 216

ÅíôïëÞ while (ii) stmt ::= \while" { P 43 } cond \do" { P 44 } stmt 1 { P 45 } P 43 : { Q = NEXTQUAD(); } P 44 : { BACKPATCH( cond.true, NEXTQUAD()); } P 45 : { BACKPATCH( stmt 1.NEXT, Q); GENQUAD(jump,,, Q); stmt.next = cond.false; } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 156 / 216

ÊëÞóç õðïðñïãñáììüôùí (i) call ::= id \(" [ expr ( \," expr ) ] \)" r-value ::= call stmt ::= call ÐÝñáóìá ðáñáìýôñùí ìå ôåôñüäåò par ÐÝñáóìá èýóçò áðïôåëýóìáôïò ìå ôåôñüäá par áí ðñüêåéôáé ãéá óõíüñôçóç ÊëÞóç ìå ôåôñüäá call Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 157 / 216

ÊëÞóç õðïðñïãñáììüôùí (ii) call ::= id \(" { P 46 } [ expr 1 { P 47 } ( \," expr 2 { P 48 } ) ] \)" { P 49 } P 46 : { N = 1; } P 47 : { GENQUAD(\par", expr 1.PLACE, PARAMMODE( id, N ), ); N = N + 1; } P 48 : { GENQUAD(\par", expr 2.PLACE, PARAMMODE( id, N ), ); N = N + 1; } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 158 / 216

ÊëÞóç õðïðñïãñáììüôùí (iii) call ::= id \(" { P 46 } [ expr 1 { P 47 } ( \," expr 2 { P 48 } ) ] \)" { P 49 } (óõíý åéá) P 49 : { if (ISFUNCTION( id )) { W = NEWTEMP(FUNCRESULT( id )); GENQUAD(par, RET, W, ); call.place = W ; } GENQUAD(call,,, id ); } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 159 / 216

ÊëÞóç õðïðñïãñáììüôùí (iv) ÊëÞóç óõíüñôçóçò r-value ::= call { P 50 } P 50 : { r-value.place = call.place; } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 160 / 216

ÊëÞóç õðïðñïãñáììüôùí (iv) ÊëÞóç óõíüñôçóçò r-value ::= call { P 50 } P 50 : { r-value.place = call.place; } ÊëÞóç äéáäéêáóßáò stmt ::= call { P 51 } P 51 : { stmt.next = EMPTYLIST(); } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 160 / 216

ÊëÞóç õðïðñïãñáììüôùí (v) ÅðéóôñïöÞ áðü õðïðñüãñáììá stmt ::= \return" [ expr { P 52 } ] { P 53 } P 52 : { GENQUAD(retv, expr.place,, ); } P 53 : { GENQUAD(ret,,, ); } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 161 / 216

ÊëÞóç õðïðñïãñáììüôùí (v) ÅðéóôñïöÞ áðü õðïðñüãñáììá stmt ::= \return" [ expr { P 52 } ] { P 53 } P 52 : { GENQUAD(retv, expr.place,, ); } P 53 : { GENQUAD(ret,,, ); } ÄÞëùóç õðïðñïãñüììáôïò body ::= ( local ) { P 56 } block \;" { P 57 } P 56 : { GENQUAD(unit, I,, ); } P 57 : { BACKPATCH( block.next, NEXTQUAD()); GENQUAD(endu, I,, ); } Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 161 / 216

(i) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end end; quicksort(a, m, j); quicksort(a, i, n) end; Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 162 / 216

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 163 / 216

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 163 / 216

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, 2: <=, n, m, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 163 / 216

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, 2: <=, n, m, 3: jump,,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 163 / 216

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, 2: <=, n, m, 3: jump,,, 4: ret,,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 163 / 216

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, 2: <=, n, m, 4 3: jump,,, 4: ret,,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 163 / 216

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, 2: <=, n, m, 4 3: jump,,, 5 4: ret,,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 163 / 216

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, 2: <=, n, m, 4 3: jump,,, 5 4: ret,,, 5: :=, m,, i Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 163 / 216

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, 2: <=, n, m, 4 3: jump,,, 5 4: ret,,, 5: :=, m,, i 6: :=, n,, j Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 163 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 8: jump,,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 14: jump,,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 15: +, i, 1, $5 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 15: +, i, 1, $5 16: :=, $5,, i Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 22: >, [$6], [$9], Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 22: >, [$6], [$9], 23: jump,,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 22: >, [$6], [$9], 24 23: jump,,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 22: >, [$6], [$9], 24 23: jump,,, 24:, j, 1, $10 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 22: >, [$6], [$9], 24 23: jump,,, 24:, j, 1, $10 25: :=, $10,, j Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 22: >, [$6], [$9], 24 23: jump,,, 24:, j, 1, $10 25: :=, $10,, j 26: jump,,, 18 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 22: >, [$6], [$9], 24 23: jump,,, 27 24:, j, 1, $10 25: :=, $10,, j 26: jump,,, 18 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 164 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 28: jump,,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 33: :=, [$13],, [$12] Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 33: :=, [$13],, [$12] 34: array, a, j, $14 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 33: :=, [$13],, [$12] 34: array, a, j, $14 35: :=, temp,, [$14] Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 33: :=, [$13],, [$12] 34: array, a, j, $14 35: :=, temp,, [$14] 36: +, i, 1, $15 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 33: :=, [$13],, [$12] 34: array, a, j, $14 35: :=, temp,, [$14] 36: +, i, 1, $15 37: :=, $15,, i Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 33: :=, [$13],, [$12] 34: array, a, j, $14 35: :=, temp,, [$14] 36: +, i, 1, $15 37: :=, $15,, i 38:, j, 1, $16 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 33: :=, [$13],, [$12] 34: array, a, j, $14 35: :=, temp,, [$14] 36: +, i, 1, $15 37: :=, $15,, i 38:, j, 1, $16 39: :=, $16,, j Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 165 / 216

(v) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end end; Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 166 / 216

(v) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; if i <= j then begin end end; temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 7: <=, i, j, 9 8: jump,,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 166 / 216

(v) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; if i <= j then begin end end; temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 7: <=, i, j, 9 8: jump,,,... 27: <=, i, j, 29 28: jump,,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 166 / 216

(v) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; if i <= j then begin end end; temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 7: <=, i, j, 9 8: jump,,,... 27: <=, i, j, 29 28: jump,,,... 40: jump,,, 7 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 166 / 216

(v) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; if i <= j then begin end end; temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 7: <=, i, j, 9 8: jump,,,... 27: <=, i, j, 29 28: jump,,, 7... 40: jump,,, 7 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 166 / 216

(v) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; if i <= j then begin end end; temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 7: <=, i, j, 9 8: jump,,, 41... 27: <=, i, j, 29 28: jump,,, 7... 40: jump,,, 7 Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 166 / 216

(vi) end; quicksort(a, m, j); quicksort(a, i, n) Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 167 / 216

(vi) end; quicksort(a, m, j); quicksort(a, i, n) 41: par, a, R, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 167 / 216

(vi) end; quicksort(a, m, j); quicksort(a, i, n) 41: par, a, R, 42: par, m, V, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 167 / 216

(vi) end; quicksort(a, m, j); quicksort(a, i, n) 41: par, a, R, 42: par, m, V, 43: par, j, V, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 167 / 216

(vi) end; quicksort(a, m, j); quicksort(a, i, n) 41: par, a, R, 42: par, m, V, 43: par, j, V, 44: call,,, quicksort Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 167 / 216

(vi) end; quicksort(a, m, j); quicksort(a, i, n) 41: par, a, R, 42: par, m, V, 43: par, j, V, 44: call,,, quicksort 45: par, a, R, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 167 / 216

(vi) end; quicksort(a, m, j); quicksort(a, i, n) 41: par, a, R, 42: par, m, V, 43: par, j, V, 44: call,,, quicksort 45: par, a, R, 46: par, i, V, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 167 / 216

(vi) end; quicksort(a, m, j); quicksort(a, i, n) 41: par, a, R, 42: par, m, V, 43: par, j, V, 44: call,,, quicksort 45: par, a, R, 46: par, i, V, 47: par, n, V, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 167 / 216

(vi) end; quicksort(a, m, j); quicksort(a, i, n) 41: par, a, R, 42: par, m, V, 43: par, j, V, 44: call,,, quicksort 45: par, a, R, 46: par, i, V, 47: par, n, V, 48: call,,, quicksort Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 167 / 216

(vi) end; quicksort(a, m, j); quicksort(a, i, n) 41: par, a, R, 42: par, m, V, 43: par, j, V, 44: call,,, quicksort 45: par, a, R, 46: par, i, V, 47: par, n, V, 48: call,,, quicksort 49: endu, quicksort,, Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 167 / 216

Ôåëéêüò õðïëïãéóôþò (i) áñáêôçñéóôéêü: ÅðåîåñãáóôÞò: Intel 8086 Ëåéôïõñãéêü óýóôçìá: MS-DOS ÌïíôÝëï ìíþìçò: COM / tiny ÓõíïëéêÞ ìíþìç 64 K ÏñãÜíùóç óå Ýíá segment Áñ éêþ äéåýèõíóç ôïõ ðñïãñüììáôïò ç 100h ÓõìâïëéêÞ ãëþóóá: óõìâáôþ ìå ôï óõìâïëïìåôáöñáóôþ MASM (Microsoft macro assembler) Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 171 / 216

Ôåëéêüò õðïëïãéóôþò (ii) Êáôá ùñçôýò, ìåãýèïõò 16 bit ÃåíéêÞò öýóçò: ax, bx, cx, dx óå æåýãç ôùí 8 bit: ah, al, ê.ëð. Êáôá ùñçôýò äåßêôåò: sp (äåßêôçò óôïßâáò) êáé bp (äåßêôçò âüóçò) Êáôá ùñçôýò áíáöïñüò: si êáé di Êáôá ùñçôýò ôìçìüôùí: cs (code), ds (data), ss (stack) êáé es (extra) Åéäéêïß êáôá ùñçôýò: ip (instruction pointer) êáé êáôá ùñçôþò óçìáéþí (ags) Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 172 / 216

Ôåëéêüò õðïëïãéóôþò (iii) Äéåõèýíóåéò: address = segment 16 + offset ÌïñöÞ åíôïëþò: [ label ] opname [ operand 1 [, operand 2 ] ] Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 173 / 216

Ôåëéêüò õðïëïãéóôþò (iv) ÅíôïëÝò: ÌåôáöïñÜò: mov, lea Áñéèìçôéêþí ðñüîåùí: add, sub, neg, imul, idiv, cmp, cwd Ëïãéêþí ðñüîåùí: and, or, xor, not, test ëìáôïò: jmp, jz, jnz, jl, jle, jg, jge Äéá åßñéóçò óôïßâáò: push, pop ÕðïðñïãñáììÜôùí: call, ret ÐñÜîåùí êéíçôþò õðïäéáóôïëþò (x87 FPU) Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 174 / 216

ÅíôïëÝò ìåôáöïñüò mov destination, source mov ax, 42 mov ax, bx mov ax, [1000h] mov ax, [si] mov ax, [si + 6] mov ax, [bp + 6] mov ax, [si + bp + 6] lea destination, source Êáèïñéóìüò ìåãýèïõò äåäïìýíùí mov ax, word ptr [bp + 6] mov al, byte ptr [bp + 6] (move) (load eective address) Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 175 / 216

ÁñéèìçôéêÝò ðñüîåéò add op 1, op 2 op 1 := op 1 + op 2 sub op 1, op 2 op 1 := op 1 op 2 neg op imul op idiv op cwd op := op (dx, ax) := ax op ax := (dx, ax) div op dx := (dx, ax) mod op åðýêôáóç ðñïóþìïõ ôïõ ax óôïí dx cmp op 1, op 2 óýãêñéíå ôá op 1 êáé op 2 åíçìýñùóå ôéò óçìáßåò Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 176 / 216

ËïãéêÝò ðñüîåéò and op 1, op 2 op 1 := op 1 and op 2 or op 1, op 2 op 1 := op 1 or op 2 not op op := not op xor op 1, op 2 op 1 := op 1 xor op 2 test op 1, op 2 op 1 and op 2 åíçìýñùóå ôéò óçìáßåò Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 177 / 216

ÅíôïëÝò Üëìáôïò jmp address jz address Þ je address jnz address Þ jne address jl address jle address jg address jge address ùñßò óõíèþêç ìçäýí / ßóï ü é ìçäýí / äéüöïñï ìéêñüôåñï ìéêñüôåñï Þ ßóï ìåãáëýôåñï ìåãáëýôåñï Þ ßóï Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 178 / 216

ÅíôïëÝò óôïßâáò push op pop op ðñüóèåóç óôç óôïßâá sp := sp 2, [sp] := op áöáßñåóç áðü ôç óôïßâá op := [sp], sp := sp + 2 Ç óôïßâá áõîüíåé ðñïò ôá êüôù, äçëáäþ ðñïò ìéêñüôåñåò äéåõèýíóåéò Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 179 / 216

ÅíôïëÝò õðïðñïãñáììüôùí call address ret êëþóç sp := sp 2, [sp] := ip, ip := address åðéóôñïöþ ip := [sp], sp := sp + 2 Ç ôéìþ ôïõ ip ðïõ ôïðïèåôåßôáé óôç óôïßâá áðü ôçí call åßíáé ç äéåýèõíóç ôçò åíôïëþò ðïõ áêïëïõèåß ôçí call Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 180 / 216

ÅíôïëÝò x87 FPU (i) ÅéäéêÞ óôïßâá 8 êáôá ùñçôþí: ST(0),... ST(7) fld source fld tbyte ptr @real1 fild source fild word ptr [bp 2] fstp destination fld tbyte ptr [bp 10] fistp destination fild word ptr [bp 2] (load real & push) (load integer & push) (pop & store real) (pop & store integer) Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 181 / 216

ÅíôïëÝò x87 FPU (ii) faddp ST(1), ST(0) fsubp ST(1), ST(0) fmulp ST(1), ST(0) fdivp ST(1), ST(0) fchs fcompp fstsw destination fstsw ax fstsw word ptr [bp 2] ST(1) := ST(1) + ST(0) & pop ST(1) := ST(1) ST(0) & pop ST(1) := ST(1) ST(0) & pop ST(1) := ST(1)/ST(0) & pop ST(0) := ST(0) ST(1) ST(0) & pop both (store x87 FPU ags) Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 182 / 216

Äéá åßñéóç ìíþìçò (i) ÄïìÞ åíïôþôùí (block structure) Ìç ôïðéêü äåäïìýíá Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 183 / 216

Äéá åßñéóç ìíþìçò (i) ÄïìÞ åíïôþôùí (block structure) Ìç ôïðéêü äåäïìýíá ÅããñÜöçìá äñáóôçñéïðïßçóçò (activation record / frame) ÐáñÜìåôñïé ÁðïôÝëåóìá Ðëçñïöïñßåò êáôüóôáóçò ìç áíþò ÔïðéêÝò ìåôáâëçôýò ÐñïóùñéíÝò ìåôáâëçôýò Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 183 / 216

Äéá åßñéóç ìíþìçò (ii)... bp+8 Παράµετρος 1 Παράµετρος 2... Παράµετρος n Παράµετρος 1 Παράµετρος 2... Παράµετρος n Παράµετροι αρχή bp+6 ιεύθυνση αποτελέσµατος ιεύθυνση αποτελέσµατος bp+4 bp+2 bp bp-2 bp-4... Σύνδεσµος προσπέλασης ιεύθυνση επιστροφής Προηγούµενο bp Τοπική µεταβλητή 1 Τοπική µεταβλητή 2... Τοπική µεταβλητή m ιεύθυνση επιστροφής Προηγούµενο display Προηγούµενο bp Τοπική µεταβλητή 1 Τοπική µεταβλητή 2... Τοπική µεταβλητή m Σταθερό Τµήµα Τοπικές µεταβλητές βάση Προσωρινή µεταβλητή 1 Προσωρινή µεταβλητή 2... Προσωρινή µεταβλητή k Προσωρινή µεταβλητή 1 Προσωρινή µεταβλητή 2... Προσωρινή µεταβλητή k Προσωρινές µεταβλητές τέλος α) Σύνδεσµοι προσπέλασης β) Πίνακας δεικτών Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 184 / 216

Äéá åßñéóç ìíþìçò (iii) Ε κύριου προγράµµατος Ε υποπρογράµµατος 1... Ε υποπρογράµµατος m στοίβα εκτέλεσης ελεύθερη µνήµη µνήµη για αποθήκευση δεδοµένων 64Κ δυναµικό δεδοµένο k... σωρός δυναµικό δεδοµένο 1 µεταφρασµένος κώδικας µνήµη για αποθήκευση του κώδικα του προγράµµατος συνολική διαθέσιµη µνήµη 0Κ Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 185 / 216

ÐñïóðÝëáóç ïíïìüôùí ÔïðéêÜ: [bp + offset] Ìç ôïðéêü: [si + offset] ï si ðñýðåé íá äåß íåé óôç âüóç ôïõ åããñáöþìáôïò äñáóôçñéïðïßçóçò üðïõ ôá äåäïìýíá åßíáé ôïðéêü Ôï ðñüâëçìá áíüãåôáé óôïí åíôïðéóìü ôïõ áíôßóôïé ïõ åããñáöþìáôïò äñáóôçñéïðïßçóçò Ëýóåéò ðïõ âáóßæïíôáé óôï âüèïò öùëéüóìáôïò: Óýíäåóìïé ðñïóðýëáóçò (access links) Ðßíáêåò äåéêôþí (link tables / displays) Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 186 / 216

Óýíäåóìïé ðñïóðýëáóçò (i) Áñ Þ ëåéôïõñãßáò óôù üôé ç äïìéêþ ìïíüäá p âñßóêåôáé öùëéáóìýíç ìýóá óôç äïìéêþ ìïíüäá q Óôï ÅÄ ôçò p ôïðïèåôåßôáé Ýíá óýíäåóìïò ðñïò ôç âüóç ôïõ ÅÄ ôçò ðéï ðñüóöáôçò êëþóçò ôçò q ÊáôÜ ôçí êëþóç õðïðñïãñáììüôùí, áðáéôåßôáé ôåëéêüò êþäéêáò ãéá ôçí åíçìýñùóç ôùí óõíäýóìùí ðñïóðýëáóçò Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 187 / 216

Óýíäåóìïé ðñïóðýëáóçò (ii) Ôñüðïò ñþóçò óôù üôé æçôåßôáé ôï äåäïìýío a ðïõ åßíáé ôïðéêü óå ìéá äïìéêþ ìïíüäá ìå âüèïò öùëéüóìáôïò n a óôù üôé âñéóêüìáóôå óå ìéá äïìéêþ ìïíüäá p ìå âüèïò öùëéüóìáôïò n p n a Áêïëïõèïýìå n p n a óõíäýóìïõò ðñïóðýëáóçò ÊáôÜ ôçí ðñïóðýëáóç ïíïìüôùí, áðáéôåßôáé ôåëéêüò êþäéêáò ãéá ôçí õëïðïßçóç ôùí ðáñáðüíù Íßêïò Ðáðáóðýñïõ, ÊùóôÞò Óáãþíáò ÌåôáãëùôôéóôÝò Áðñßëéïò 2011 188 / 216