ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Μεταφραστές Παραγωγή τελικού κώδικα Διδάσκων: Επικ. Καθ. Γεώργιος Μανής
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.
Παραγωγή Τελικού Κώδικα Γιώργος Μανής
Τειηθόξ Κώδηθαξ Ενδιάμεζος Κώδικας Παραγωγή Τελικού Κώδικα Τελικός Κώδικας
Η Γιώζζα Μεπακήξ Καηαπςνεηέξ R[0], R[1], R[2],, R[255] Ο θαηαπςνεηήξ R[0] πνεζημμπμείηαη ζακ δείθηεξ ζημίβαξ Ο program counter ζομβμιίδεηαη με $ Πνόζβαζε ζηε μκήμε Μ[address] M[R[ ]] M[R[0]+offset]
Η Γιώζζα Μεπακήξ ini tr outi so1 tr register so1 register addi tr,so1,so2 subi tr,so1,so2 muli tr,so1,so2 divi tr,so1,so2 tr=so1 + so2 tr=so1 - so2 tr=so1 * so2 tr=so1 / so2
Η Γιώζζα Μεπακήξ movi tr,so1 tr := so1 tr μκήμε register register register register so1 register μκήμε ανηζμόξ R[0] (o SP) PC
Η Γιώζζα Μεπακήξ jmp addr cmpi so1,so2 jb addr jbe addr ja addr jae addr je addr jne addr addr label, M[..], R[..], δ/ζε(ανηζμόξ) so1,so2 registers addr label, M[..], R[..], δ/ζε(ανηζμόξ) addr label, M[..], R[..], δ/ζε(ανηζμόξ) addr label, M[..], R[..], δ/ζε(ανηζμόξ) αddr label, M[..], R[..], δ/ζε(ανηζμόξ) αddr label, M[..], R[..], δ/ζε(ανηζμόξ) addr label, M[..], R[..], δ/ζε(ανηζμόξ)
Η Γιώζζα Μεπακήξ Ο θαηαπςνεηήξ SR είκαη έκαξ πίκαθαξ 8 ζέζεςκ θαη ημκ επενεάδμοκ ε cmpi θαη μ έιεγπμξ γηα overflow. Η cmpi επενεάδεη ημ SR[0] θαη ημ SR[1]. Ακ μη δομ ανηζμμί είκαη ίζμη ημ SR[0] γίκεηαη 1 θαη ακ μ πνώημξ ανηζμόξ είκαη μεγαιύηενμξ από ημκ δεύηενμ ηόηε ημ SR[1] γίκεηαη 1. Ο έιεγπμξ οπενπείιηζεξ επενεάδεη ημ SR[7] θαη ακ οπάνπεη οπενπείιηζε ηόηε γίκεηαη 1. Όηακ ε εκημιή είκαη jb, jbe, ja, jae, je, jne, jo ειέγπεη ηα SR[0] θαη SR[1] θαη ακ ηζπύμοκ μη θαηάιιειεξ ζοκζήθεξ πεγαίκεη ημκ PC ζημ ζςζηό ζεμείμ.
Η Σοκάνηεζε gnlvcode Μεηαθένεη ζημκ R[255] ηε δηεύζοκζε μίαξ με ημπηθήξ μεηαβιήηήξ movi R[255], M[4+R[0]] όζεξ θμνέξ πνεηαζηεί: R[255]=M[4+R[0]] movi R[255], M[4+R[255]] R[255]=M[4+R[255]] movi R[254], offset addi R[255], R[254], R[255] R[254]=offset R[255]=R[254]+R[255]
Η Σοκάνηεζε loadvr(v,r) ακ v είκαη ανηζμόξ: movi R[r], v R[r]= v ακ v είκαη global μεηαβιεηή - δειαδή ημο θονίςξ πνμγνάμμαημξ movi R[r], M[600+offset] R[r]= M[600+offset] ακ v ημπηθή μεηαβιεηή ή ηοπηθή πανάμεηνμξ πμο πενκάεη με ηημή θαη βάζμξ θςιηάζμαημξ ίζμ με ημ ηνέπμκ ή πνμζςνηκή μεηαβιεηή: movi R[r], M[offset+R[0]] R[r]= M[offset+R[0]]
Η Σοκάνηεζε loadvr(v,r) ακ v ηοπηθή πανάμεηνμξ πμο πενκάεη με ακαθμνά θαη βάζμξ θςιηάζμαημξ ίζμ με ημ ηνέπμκ: movi R[255], M[offset+R[0]] movi R[r], M[R[255]] R[255]=M[offset+R[0]] R[r]=M[R[255]] ακ v ημπηθή μεηαβιεηή ή ηοπηθή πανάμεηνμξ πμο πενκάεη με ηημή θαη βάζμξ θςιηάζμαημξ μηθνόηενμ από ημ ηνέπμκ: gnlvcode( ) ώζηε μ R[255] κα έπεη ηεκ ζςζηή δ/ζε movi R[r], M[R[255]] R[r]=M[R[255]]
Η Σοκάνηεζε loadvr(v,r) ακ v ηοπηθή πανάμεηνμξ πμο πενκάεη με ακαθμνά θαη βάζμξ θςιηάζμαημξ μηθνόηενμ από ημ ηνέπμκ: gnlvcode( ) ώζηε μ R[255] κα έπεη ηεκ ζςζηή δ/κζε movi R[255], M[R[255]] movi R[r], M[R[255]] R[255]=M[R[255]] R[r]=M[R[255]]
Η Σοκάνηεζε storerv(r,v) ακ v είκαη global μεηαβιεηή - δειαδή ημο θονίςξ πνμγνάμμαημξ movi M[600+offset], R[r] M[600+offset] = R[r] ακ v ημπηθή μεηαβιεηή ή ηοπηθή πανάμεηνμξ πμο πενκάεη με ηημή θαη βάζμξ θςιηάζμαημξ ίζμ με ημ ηνέπμκ ή πνμζςνηκή μεηαβιεηή : : movi M[offset+R[0]], R[r] M[offset+R[0]] = R[r]
Η Σοκάνηεζε storerv(r,v) ακ v ηοπηθή πανάμεηνμξ πμο πενκάεη με ακαθμνά θαη βάζμξ θςιηάζμαημξ ίζμ με ημ ηνέπμκ: movi R[255], M[offset+R[0]] movi M[R[255]], R[r] R[255]=M[offset+R[0]] M[R[255]] = R[r] ακ v ημπηθή μεηαβιεηή ή ηοπηθή πανάμεηνμξ πμο πενκάεη με ηημή θαη βάζμξ θςιηάζμαημξ μηθνόηενμ από ημ ηνέπμκ gnlvcode( ) ώζηε μ R[255] κα έπεη ηεκ ζςζηή δ/ζε movi M[R[255]], R[r] M[R[255]] = R[r]
Η Σοκάνηεζε storerv(r,v) ακ v ηοπηθή πανάμεηνμξ πμο πενκάεη με ακαθμνά θαη βάζμξ θςιηάζμαημξ μηθνόηενμ από ημ ηνέπμκ: gnlvcode( ) ώζηε μ R[255] κα έπεη ηεκ ζςζηή δ/κζε movi R[255], M[R[255]] movi M[R[255]],R[r] R[255]=M[R[255]] M[R[255]]=R[r]
Εκημιέξ Αιμάηςκ jump,_,_,w jmp Lw relop,x,y,w loadvr(x,1) loadvr(y,2) cmpi R[1], R[2] condjmp Lw relop={=,<>,>,>=,<,<=} R[1]=x R[2]=y comdjmp={je,jne,jb,jbe,ja,jae} H cmp επενεάδεη ημκ θαηαπςνεηή SR θαη μη je,jne,jb,jbe,ja,jae ημκ ειέγπμοκ θαη θάκμοκ ή όπη ημ άιμα οπό ζοκζήθε
Εθπώνεζε :=,x,_,z loadvr(x,1) storerv(1,z) R[1]=x z=r[1]
Εκημιέξ Ανηζμεηηθώκ Πνάλεςκ op,x,y,z loadvr(x,1) loadvr(y,2) op={+,-,*,/} op R[3], R[1], R[2] storerv(3,z) R[1]=x R[2]=y z=r[3] op={addi,subi,muli,divi} μπμνεί γηα ημ απμηέιεζμα ηεξ op va πνεζημμπμηεζεί θαη έκαξ από ημοξ R[1] θαη R[2]
Εκημιέξ Εηζόδμο-Ελόδμο out,x,_,_ loadvr(x,1) outi R[1] in,x,_,_ ini R[1] storerv(1,x) R[1]=x x =R[1]
Επηζηνμθή Τημήξ Σοκάνηεζεξ :=,x,_,return_value loadvr(x,1) movi R[255],M[8+R[0]] movi M[R[255]],R[1] R[1]=x απμζεθεύεηαη μ x ζηεκ δηεύζοκζε πμο είκαη απμζεθεομέκε ζηεκ 3ε ζέζε ημο εγγναθήμαημξ δναζηενημπμίεζεξ.
Πανάμεηνμη Σοκάνηεζεξ par,x,cv,_ (πανάμεηνμξ με ηημή) loadvr(x,255) R[255]=x movi M[d+R[0]], R[255] d=framelength+12+4*i i=αύλoκηαξ ανηζμόξ παναμέηνμο
Πανάμεηνμη Σοκάνηεζεξ par,x,ref,_ (πανάμεηνμξ με ακαθμνά) Ακ ε θαιμύζα θαη ε μεηαβιεηή x έπμοκ ημ ίδημ βάζμξ θςιηάζμαημξ: Ακ ε πανάμεηνμξ x είκαη ζηεκ θαιμύζα ζοκάνηεζε ημπηθή μεηαβιεηή ή πανάμεηνμξ πμο έπεη πεναζηεί με ηημή: movi R[255],R[0] movi R[254],offset addi R[255], R[254],R[255] movi M[d+R[0]], R[255]
Πανάμεηνμη Σοκάνηεζεξ par,x,ref,_ (πανάμεηνμξ με ακαθμνά) Ακ ε θαιμύζα θαη ε μεηαβιεηή x έπμοκ ημ ίδημ βάζμξ θςιηάζμαημξ: Ακ ε πανάμεηνμξ x έπεη πεναζηεί ζηεκ θαιμύζα ζοκάνηεζε με ακαθμνά: movi R[255],R[0] movi R[254],offset addi R[255], R[254],R[255] movi R[1], Μ[R[255]] movi M[d+R[0]], R[1]
Πανάμεηνμη Σοκάνηεζεξ par,x,ref,_ (πανάμεηνμξ με ακαθμνά) Ακ ε θαιμύζα θαη ε μεηαβιεηή x έπμοκ δηαθμνεηηθό βάζμξ θςιηάζμαημξ: Ακ ε πανάμεηνμξ x είκαη ζηεκ θαιμύζα ζοκάνηεζε ημπηθή μεηαβιεηή ή πανάμεηνμξ πμο έπεη πεναζηεί με ηημή: gnlvcode( ) movi M[d+R[0]], R[255] Ακ ε πανάμεηνμξ x έπεη πεναζηεί ζηεκ θαιμύζα ζοκάνηεζε με ακαθμνά: gnlvcode( ) movi R[1], Μ[R[255]] movi M[d+R[0]], R[1]
Πανάμεηνμη Σοκάνηεζεξ par,x,ret,_ γεμίδμομε ημ 3μ πεδίμ ηεξ θιεζείζαξ ζοκάνηεζεξ με ηεκ δ/κζε ηεξ πνμζςνηκήξ μεηαβιεηήξ όπμο ζα επηζηναθεί ε ηημή movi R[255], R[0] movi R[254], offset ηεξ πνμζςνηκήξ μεηαβιεηήξ addi R[255],R[254], R[255] movi M[framelength+8+R[0]], R[255]
Κιήζε Σοκάνηεζεξ Ανπηθά γεμίδμομε ημ 2μ πεδίμ ηεξ ζημίβαξ ηεξ θαιμύμεκεξ ζοκάνηεζεξ με ηεκ δ/κζε ηεξ ανπήξ ηεξ παηνηθήξ ζοκάνηεζεξ ηεξ θιεζείζαξ, ώζηε ε θαιμύμεκε κα λένεη πμο κα θμηηάλεη γηα ηηξ μεηαβιεηέξ ζηηξ μπμίεξ έπεη πνόζβαζε. Ακ ε θαιμύζα θαη ε θιεζείζα έπμοκ ημ ίδημ βάζμξ θςιηάζμαημξ (θαιμύζα θαη θιεζείζα έπμοκ ημκ ίδημ παηένα): movi R[255], M[4+R[0]] movi M[framelenth+4+R[0]], R[255] Ακ θαιείηαη ζοκάνηεζε με μεγαιύηενμ βάζμξ θςιηάζμαημξ από ηεκ θαιμύζα (ε θαιμύζα είκαη μ παηέναξ ηεξ θιεζείζαξ): movi M[framelength+4+R[0]],R[0]
Κιήζε Σοκάνηεζεξ Ο έιεγπμξ πενκάεη ζηεκ θιεζείζα ζοκάνηεζε θαη γίκεηαη ημ γέμηζμα ημο 1μο πεδίμο ηεξ ζημίβαξ ώζηε κα λένμομε πμο ζα επηζηνέρμομε όηακ μιμθιενςζεί ε εθηέιεζε ηεξ ζοκάνηεζεξ movi R[255], framelength addi R[0], R[255], R[0] (Ο SP ζηεκ ανπή ηεξ κέαξ ζημίβαξ) movi R[255], $ movi R[254], 15 addi R[255], R[255], R[254] movi M[R[0]], R[255] (1μ πεδίμ) jmp Lstart_quad (πέναζμα ειέγπμο) 4 bytes 4 bytes 4 bytes 3 bytes --------- 15 bytes ζύκμιμ
Κιήζε Σοκάνηεζεξ επηζηνμθή ζηεκ θαιμύζα: movi R[255],framelength subi R[0], R[0], R[255] (δείθηεξ ζημίβαξ) end_block,x,_,_ jmp M[R[0]]
Ανπή θαη Τενμαηηζμόξ Πνμγνάμμαημξ Ανπή πνμγνάμμαημξ Άιμα ζηεκ πνώηε εθηειέζημε εκημιή Τενμαηηζμόξ πνμγνάμμαημξ halt,_,_,_ halt
Τέλος Ενότητας
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Ιωαννίνων» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
Σημειώματα
Σημείωμα Ιστορικού Εκδόσεων Έργου Το παρόν έργο αποτελεί την έκδοση 1.0. Έχουν προηγηθεί οι κάτωθι εκδόσεις: Έκδοση 1.0 διαθέσιμη εδώ. http://ecourse.uoi.gr/course/view.php?id=1125.
Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Ιωαννίνων, Διδάσκων: Επικ. Καθ. Γεώργιος Μανής. «Μεταφραστές. Παραγωγή τελικού κώδικα». Έκδοση: 1.0. Ιωάννινα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: http://ecourse.uoi.gr/course/view.php?id=1125.
Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού - Παρόμοια Διανομή, Διεθνής Έκδοση 4.0 [1] ή μεταγενέστερη. [1] https://creativecommons.org/licenses/by-sa/4.0/