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

Σχετικά έγγραφα
Ãëþóóá ôåôñüäùí. ÌïñöÞ ôåôñüäáò: n: op, x, y, z üðïõ:

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

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

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

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

(i) morf (relocatable, linkable)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ ΙΙ Εργαστήριο 2 ο ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ- ΨΕΥΔΟΕΝΤΟΛΕΣ ΜΑΚΡΟΕΝΤΟΛΕΣ- ΔΙΑΔΙΚΑΣΙΕΣ (ΕΙΣΑΓΩΓΗ)

Υποπρογράμματα (Subroutines)

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

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

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

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

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

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

MIPS functions and procedures

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

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

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

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

Συστήματα Μικροϋπολογιστών

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

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

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

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

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

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

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

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

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

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

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

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

Συστήματα Μικροϋπολογιστών

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

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

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

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

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

{ int a = 5; { int b = 7; a = b + 3;

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

Ðñïêýðôïõí ôá ðáñáêüôù äéáãñüììáôá.

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

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

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

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

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

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

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

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

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

Estimation Theory Exercises*

ÌÅÑÏÓ 3 ΥΠΗΡΕΣΙΕΣ ΥΠΟΣΤΗΡΙΞΗΣ ΤΗΣ ΚΛΙΝΙΚΗΣ ΠΡΑΞΗΣ ÁÐÁÉÔÇÓÅÙÍ ÕÐÇÑÅÓÉÙÍ. Υπηρεσίες Ιατρικής Πληροφορικής και Τηλεϊατρικής 9 ÂÁÓÉÊÅÓ ÊÁÔÅÕÈÕÍÓÅÉÓ

Ç íýá Ýííïéá ôïõ ýðíïõ!

* ΣΧΕΔΙΟ ΕΚΘΕΣΗΣ. EL Eνωμένη στην πολυμορφία EL 2014/0321(NLE)

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

ΒΟΗΘΗΤΙΚΕΣ ΣΗΜΕΙΩΣΕΙΣ

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

ÅÍÏÔÇÔÁ 5ç ÔÁ Ó ÇÌÁÔÁ

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

Εργαστήριο Αρ. 1. Εισαγωγή στην Αρχιτεκτονική MIPS. Πέτρος Παναγή Σελ. 1

Θεωρία Πιθανοτήτων & Στατιστική

Προχωρημένες έννοιες προγραμματισμού σε C

Προέλευση της Pazcal ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

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

245/Á/1977). 2469/1997 (ÖÅÊ 36/Á/1997). 1484/Â/ ).

Chi-Square Goodness-of-Fit Test*

ÕÄÑÏËÇØÉÅÓ ÔÕÐÏÕ Á2 - Á4 ÌÅ ÁÍÔÉÐÁÃÅÔÉÊÇ ÐÑÏÓÔÁÓÉÁ

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

µµ Setup : µ 2005

ÅÍÏÔÇÔÁ 6ç ÑÏÍÏÓ-ÄÉÁÄÏ Ç

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

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

ÐïëëÝò åôáéñßåò ðñïóöýñïõí õðçñåóßåò

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

Transcript:

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

Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια χρήσης άλλου τύπου, αυτή πρέπει να αναφέρεται ρητώς.

Ôåëéêüò êþäéêáò (i) Áðü èåùñçôéêþò Üðïøçò, ôï ðñüâëçìá ôçò êáôáóêåõþò âýëôéóôïõ ôåëéêïý êþäéêá äåí Ý åé ëýóç (undecidable) 3

Ôåëéêüò êþäéêáò (i) Áðü èåùñçôéêþò Üðïøçò, ôï ðñüâëçìá ôçò êáôáóêåõþò âýëôéóôïõ ôåëéêïý êþäéêá äåí Ý åé ëýóç (undecidable) ÌïñöÝò ôåëéêïý êþäéêá: Ãëþóóá ìç áíþò óå áðüëõôç ìïñöþ (absolute) Ãëþóóá ìç áíþò óå åðáíáôïðïèåôþóéìç êáé äéáóõíäýóéìç ìïñöþ (relocatable, linkable) ÓõìâïëéêÞ ãëþóóá (assembly) ëëç ãëþóóá áìçëïý åðéðýäïõ 4

Ôåëéêüò êþäéêáò (ii) ÅðéìÝñïõò ðñïâëþìáôá: ÅðéëïãÞ åíôïëþí Ðþò ìåôáöñüæåôáé êüèå åíôïëþ ôïõ åíäéüìåóïõ êþäéêá Ðþò ìåôáöñüæïíôáé áêïëïõèßåò ôýôïéùí åíôïëþí Äéá åßñéóç ôçò ìíþìçò óôï ñüíï åêôýëåóçò Ðïý áðïèçêåýïíôáé ôá äåäïìýíá Ðþò ãßíåôáé ç åðéêïéíùíßá áíüìåóá óôéò äïìéêýò ìïíüäåò 5

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

Ôåëéêüò õðïëïãéóôþò (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) 7

Ôåëéêüò õðïëïãéóôþò (iii) Äéåõèýíóåéò: address = segment 16 + offset ÌïñöÞ åíôïëþò: [ label ] opname [ operand 1 [, operand 2 ] ] 8

Ôåëéêüò õðïëïãéóôþò (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) 9

ÅíôïëÝò ìåôáöïñüò 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) 10

ÁñéèìçôéêÝò ðñüîåéò add op 1, op 2 op 1 := op 1 + op 2 sub op 1, op 2 op 1 := op 1 op 2 neg op op := op imul op idiv op cwd (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 åíçìýñùóå ôéò óçìáßåò 11

ËïãéêÝò ðñüîåéò 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 åíçìýñùóå ôéò óçìáßåò 12

ÅíôïëÝò Üëìáôïò jmp address jz address Þ je address jnz address Þ jne address jl address jle address jg address jge address ùñßò óõíèþêç ìçäýí / ßóï ü é ìçäýí / äéüöïñï ìéêñüôåñï ìéêñüôåñï Þ ßóï ìåãáëýôåñï ìåãáëýôåñï Þ ßóï 13

ÅíôïëÝò óôïßâáò push op pop op ðñüóèåóç óôç óôïßâá sp := sp 2, [sp] := op áöáßñåóç áðü ôç óôïßâá op := [sp], sp := sp + 2 Ç óôïßâá áõîüíåé ðñïò ôá êüôù, äçëáäþ ðñïò ìéêñüôåñåò äéåõèýíóåéò 14

ÅíôïëÝò õðïðñïãñáììüôùí call address êëþóç sp := sp 2, [sp] := ip, ip := address ret åðéóôñïöþ ip := [sp], sp := sp + 2 Ç ôéìþ ôïõ ip ðïõ ôïðïèåôåßôáé óôç óôïßâá áðü ôçí call åßíáé ç äéåýèõíóç ôçò åíôïëþò ðïõ áêïëïõèåß ôçí call 15

ÅíôïëÝò 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) 16

ÅíôïëÝò 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) 17

Äéá åßñéóç ìíþìçò (i) ÄïìÞ åíïôþôùí (block structure) Ìç ôïðéêü äåäïìýíá 18

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

Äéá åßñéóç ìíþìçò (ii)... bp+8 Παράµετρος 1 Παράµετρος 2... Παράµετρος n Παράµετρος 1 Παράµετρος 2... Παράµετρος n Παράµετροι αρχή bp+6 ιεύθυνση αποτελέσµατος ιεύθυνση αποτελέσµατος bp+4 bp+2 bp bp-2 Σύνδεσµος προσπέλασης ιεύθυνση επιστροφής Προηγούµενο bp Τοπική µεταβλητή 1 ιεύθυνση επιστροφής Προηγούµενο display Προηγούµενο bp Τοπική µεταβλητή 1 Σταθερό Τµήµα βάση bp-4... Τοπική µεταβλητή 2... Τοπική µεταβλητή m Τοπική µεταβλητή 2... Τοπική µεταβλητή m Τοπικές µεταβλητές Προσωρινή µεταβλητή 1 Προσωρινή µεταβλητή 2... Προσωρινή µεταβλητή k Προσωρινή µεταβλητή 1 Προσωρινή µεταβλητή 2... Προσωρινή µεταβλητή k Προσωρινές µεταβλητές τέλος α) Σύνδεσµοι προσπέλασης β) Πίνακας δεικτών 20

Äéá åßñéóç ìíþìçò (iii) Ε κύριου προγράµµατος Ε υποπρογράµµατος 1... Ε υποπρογράµµατος m δυναµικό δεδοµένο k µεταφρασµένος κώδικας στοίβα εκτέλεσης ελεύθερη µνήµη... σωρός δυναµικό δεδοµένο 1 µνήµη για αποθήκευση δεδοµένων µνήµη για αποθήκευση του κώδικα του προγράµµατος συνολική διαθέσιµη µνήµη 64Κ 0Κ 21

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

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

Óýíäåóìïé ðñïóðýëáóçò (ii) Ôñüðïò ñþóçò óôù üôé æçôåßôáé ôï äåäïìýío a ðïõ åßíáé ôïðéêü óå ìéá äïìéêþ ìïíüäá ìå âüèïò öùëéüóìáôïò n a óôù üôé âñéóêüìáóôå óå ìéá äïìéêþ ìïíüäá p ìå âüèïò öùëéüóìáôïò n p n a Áêïëïõèïýìå n p n a óõíäýóìïõò ðñïóðýëáóçò ÊáôÜ ôçí ðñïóðýëáóç ïíïìüôùí, áðáéôåßôáé ôåëéêüò êþäéêáò ãéá ôçí õëïðïßçóç ôùí ðáñáðüíù 24

ÐÝñáóìá ðáñáìýôñùí ÊëÞóç êáô' áîßá ÊëÞóç êáô' áíáöïñü ÊëÞóç êáô' üíïìá ÊëÞóç êáô' áíüãêç ÊëÞóç êáô' áîßá êáé áðïôýëåóìá (call by value) (call by reference) (call by name) (call by need) (call by value-result) Ôñüðïò õëïðïßçóçò êáèåíüò 25

ÄÝóìåõóç êáôá ùñçôþí (i) Ðñüâëçìá 1: åðéëïãþ ôåëïõìýíùí ðïõ èá áðïèçêåõôïýí óå êáôá ùñçôýò Ðñüâëçìá 2: åðéëïãþ êáôá ùñçôþí üðïõ èá áðïèçêåõôïýí ôá ôåëïýìåíá Ôï ðñüâëçìá ôçò âýëôéóôçò ñþóçò êáôá ùñçôþí åßíáé NP-complete, áêüìá êáé ùñßò åéäéêïýò ðåñéïñéóìïýò Ç ëýóç ôïõ áíüãåôáé óôçí êáôáóêåõþ ôïõ ãñüöïõ áëëçëåðéäñüóåùí ìåôáîý ôùí ìåôáâëçôþí êáé óôï ñùìáôéóìü áõôïý ìå ôüóá ñþìáôá üóïé ïé êáôá ùñçôýò 26

ÄÝóìåõóç êáôá ùñçôþí (ii) ÐáñÜäåéãìá: 1:, b, b, $1 2:, 4, a, $2 3:, $2, c, $3 4:, $1, $3, $4 5: :=, $4,, d d := b*b-4*a*c $1 $2 ax $3 $4 bx 27

ÅðéëïãÞ åíôïëþí (i) ÁðëÞ áëëü êáêþ ðñïóýããéóç: åíéáßï ó Þìá ðáñáãùãþò ôåëéêïý êþäéêá ãéá êüèå äïìþ ôïõ åíäéüìåóïõ êþäéêá Êáëýôåñç ðñïóýããéóç: ðëáêüóôñùóç (tiling) ôåìá éóìüò ôïõ åíäéüìåóïõ êþäéêá óå ôìþìáôá êüèå ôìþìá áíôéóôïé åß óå ìéá åíôïëþ ÂÝëôéóôç áëëü ñïíïâüñá ðñïóýããéóç: äõíáìéêüò ðñïãñáììáôéóìüò (dynamic programming) 28

ÅðéëïãÞ åíôïëþí (ii) ÐáñÜäåéãìá: d := b*b-4*a*c := mem := + * * d bp offset d mem * mem * * + 4 mem + b b * c bp offset b + bp offset c 4 a bp offset a 29

ÅðéëïãÞ åíôïëþí (iii) ÐáñÜäåéãìá: tiling ìå åíôïëýò ôïõ 8086 R 1 mem + CONST R bi mov R 1,[R bi +CONST] ax * mem + bp offset d := ax ax ax bx * * ax ax mem * ax bx + 4 mem mem + bx bp offset b + bp offset c ax R 1 bp offset a imul R 1 30

ÅðéëïãÞ åíôïëþí (iv) ÐáñÜäåéãìá: tiling ìå åíôïëýò ôïõ 80386 := ax mem ax bx * R 1 + * ax ax * mem CONST 2 bp offset d mem * mem + + 4 mem + R bi CONST 1 bp offset b + bp offset c imul R 1,[R bi +CONST 1 ],CONST 2 bp offset a 31

Ôï ôåëéêü ðñüãñáììá (i) Óêåëåôüò: xseg segment public code assume cs : xseg, ds : xseg, ss : xseg org 100h main proc near call near ptr program mov ax, 4C00h int 21h main endp... ôåëéêüò êþäéêáò ðïõ ðáñüãåôáé... xseg ends end main 32

Ôï ôåëéêü ðñüãñáììá (ii) ÂéâëéïèÞêç ñüíïõ åêôýëåóçò (run-time library) extrn function : proc ÓôáèåñÝò óõìâïëïóåéñýò êáé êéíçôþò õðïäéáóôïëþò @str1 db this is db 10 db an example db 0 @real1 dt 1e 10 @real2 dt 2.0 33

ÂïçèçôéêÝò ñïõôßíåò (i) getar(a) mov si, word ptr [bp + 4] mov si, word ptr [si + 4]... mov si, word ptr [si + 4] (öüñôùóç äéåýèõíóçò ÅÄ) (n cur n a 1 öïñýò) 34

ÂïçèçôéêÝò ñïõôßíåò (i) getar(a) mov si, word ptr [bp + 4] mov si, word ptr [si + 4]... mov si, word ptr [si + 4] (öüñôùóç äéåýèõíóçò ÅÄ) (n cur n a 1 öïñýò) updateal() (åíçìýñùóç óõíäýóìùí ðñïóðýëáóçò) (á) push bp áí n p < n x (â) push word ptr [bp + 4] áí n p = n x (ã) mov si, word ptr [bp + 4] mov si, word ptr [si + 4] áí n p > n x... mov si, word ptr [si + 4] (n p n x 1 öïñýò) push word ptr [si + 4] 35

ÂïçèçôéêÝò ñïõôßíåò (ii) load(r, a) Åßäïò ôïõ a (öüñôùóç ôåëïõìýíïõ) Êþäéêáò ðïõ ðáñüãåôáé (á1) áñéèìçôéêþ óôáèåñü mov R, a (á2) ëïãéêþ óôáèåñü true mov R, 1 (á3) ëïãéêþ óôáèåñü false mov R, 0 (á4) óôáèåñü áñáêôþñá mov R, ASCII(a) (á6) óôáèåñü nil mov R, 0 (â1) ôïðéêþ ïíôüôçôá: mov R, size ptr [bp + offset] (â2) ìåôáâëçôþ, ðáñüìåôñïò êáô' áîßá, Þ ðñïóùñéíþ ìåôáâëçôþ ôïðéêþ ïíôüôçôá: ðáñüìåôñïò êáô' áíáöïñü mov si, word ptr [bp + offset] mov R, size ptr [si] 36

ÂïçèçôéêÝò ñïõôßíåò (iii) load(r, a) (ã1) Åßäïò ôïõ a ìç ôïðéêþ ïíôüôçôá: ìåôáâëçôþ, ðáñüìåôñïò êáô' áîßá, Þ ðñïóùñéíþ ìåôáâëçôþ (öüñôùóç ôåëïõìýíïõ) Êþäéêáò ðïõ ðáñüãåôáé getar(a) mov R, size ptr [si + offset] (ã2) ìç ôïðéêþ ïíôüôçôá: ðáñüìåôñïò êáô' áíáöïñü getar(a) mov si, word ptr [si + offset] mov R, size ptr [si] (ä) [x] load(di, x) mov R, size ptr [di] (å) {x} loadaddr(r, x) 37

ÂïçèçôéêÝò ñïõôßíåò (iv) loadaddr(r, a) Åßäïò ôïõ a (öüñôùóç äéåýèõíóçò ôåëïõìýíïõ) Êþäéêáò ðïõ ðáñüãåôáé (á5) óôáèåñþ óõìâïëïóåéñü lea R, byte ptr a (â1) ôïðéêþ ïíôüôçôá: lea R, size ptr [bp + offset] (â2) (ã1) (ã2) ðáñüìåôñïò êáô' áîßá, Þ ðñïóùñéíþ ìåôáâëçôþ ôïðéêþ ïíôüôçôá: ðáñüìåôñïò êáô' áíáöïñü ìç ôïðéêþ ïíôüôçôá: ðáñüìåôñïò êáô' áîßá, Þ ðñïóùñéíþ ìåôáâëçôþ mov R, word ptr [bp + offset] getar(a) lea R, size ptr [si + offset] ìç ôïðéêþ ïíôüôçôá: getar(a) ðáñüìåôñïò êáô' áíáöïñü mov R, word ptr [si + offset] (ä) [x] load(r, x) 38

ÂïçèçôéêÝò ñïõôßíåò (v) Ðáñüìïéá õëïðïßçóç ãéá ôéò: loadreal(a) store(r, a) storereal(a) 39

ÂïçèçôéêÝò ñïõôßíåò (v) Ðáñüìïéá õëïðïßçóç ãéá ôéò: loadreal(a) store(r, a) storereal(a) Ñïõôßíåò ãéá åôéêýôåò ôåëéêïý êþäéêá: name(p) p num endof(p) @p num label(n) @n label(l) @p num l 40

ÐáñáãùãÞ êþäéêá (i) ÔåôñÜäá load(r, x) store(r, z) :=, x,, z loadreal(x) storereal(z) 41

ÐáñáãùãÞ êþäéêá (i) ÔåôñÜäá load(r, x) store(r, z) :=, x,, z loadreal(x) storereal(z) ÔåôñÜäá array, x, y, z load(ax, y) mov cx, size imul cx loadaddr(cx, x) add ax, cx store(ax, z) 42

ÐáñáãùãÞ êþäéêá (ii) ÔåôñÜäåò +, x, y, z, x, y, z load(ax, x) load(dx, y) instr ax, dx store(ax, z) instr = add Þ sub loadreal(x) loadreal(y) finstr ST(1), ST(0) storereal(z) finstr = faddp ê.ëð. 43

ÐáñáãùãÞ êþäéêá (ii) ÔåôñÜäåò +, x, y, z, x, y, z load(ax, x) load(dx, y) instr ax, dx store(ax, z) instr = add Þ sub loadreal(x) loadreal(y) finstr ST(1), ST(0) storereal(z) finstr = faddp ê.ëð. ÔåôñÜäåò, x, y, z /, x, y, z %, x, y, z load(ax, x) load(cx, y) imul cx store(ax, z) load(ax, x) cwd load(cx, y) idiv cx store(ax, z) 44 load(ax, x) cwd load(cx, y) idiv cx store(dx, z)

ÐáñáãùãÞ êþäéêá (iii) ÔåôñÜäåò =, x, y, z <>, x, y, z <, x, y, z >, x, y, z <=, x, y, z >=, x, y, z load(ax, x) load(dx, y) cmp ax, dx instr label(z) instr = je, jne, ê.ëð. loadreal(x) loadreal(y) fcompp fstsw ax test ax, value instr label(z) value êáé instr áðü Ðßíáêá 9.1 óåë. 249 45

ÐáñáãùãÞ êþäéêá (iv) ÔåôñÜäá ifb, x,, z load(al, x) or al, al jnz label(z) 46

ÐáñáãùãÞ êþäéêá (iv) ÔåôñÜäá ifb, x,, z load(al, x) or al, al jnz label(z) ÔåôñÜäá jmp label(z) jump,,, z 47

ÐáñáãùãÞ êþäéêá (iv) ÔåôñÜäá ifb, x,, z load(al, x) or al, al jnz label(z) ÔåôñÜäá jmp label(z) jump,,, z ÔåôñÜäá jmp label(z) jumpl,,, z 48

ÐáñáãùãÞ êþäéêá (iv) ÔåôñÜäá ifb, x,, z load(al, x) or al, al jnz label(z) ÔåôñÜäá jmp label(z) jump,,, z ÔåôñÜäá jmp label(z) jumpl,,, z ÔåôñÜäá label(z) : label,,, z 49

ÐáñáãùãÞ êþäéêá (v) ÔåôñÜäá unit, x,, name(x) proc near push bp mov bp, sp sub sp, size 50

ÐáñáãùãÞ êþäéêá (v) ÔåôñÜäá unit, x,, name(x) proc near push bp mov bp, sp sub sp, size ÔåôñÜäá endu, x,, endof(x) : mov sp, bp pop bp ret name(x) endp 51

ÐáñáãùãÞ êþäéêá (vi) ÔåôñÜäá call,,, z sub sp, 2 áí z åßíáé äéáäéêáóßá updateal() call near ptr name(z) add sp, size + 4 52

ÐáñáãùãÞ êþäéêá (vi) ÔåôñÜäá call,,, z sub sp, 2 áí z åßíáé äéáäéêáóßá updateal() call near ptr name(z) add sp, size + 4 ÔåôñÜäá ret,,, jmp endof(current) 53

ÐáñáãùãÞ êþäéêá (vii) ÔåôñÜäá par, x, y, áí y = V êáé x åßíáé 16 bit load(ax, x) push ax áí y = V êáé x åßíáé 8 bit load(al, x) sub sp, 1 mov si, sp mov byte ptr [si], al 54

ÐáñáãùãÞ êþäéêá (vii) ÔåôñÜäá par, x, y, (óõíý åéá) áí y = V êáé x åßíáé 80 bit loadreal(x) sub sp, 10 mov si, sp fstp tbyte ptr [si] áí y = R Þ RET loadaddr(si, x) push si 55

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα» του ΕΜΠ έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.