Τελικός Κώδικας. Παραγωγή. ΗΓλώσσαΜηχανής. ΗΓλώσσαΜηχανής. ΗΓλώσσαΜηχανής. ΗΓλώσσαΜηχανής. Παραγωγή. Τελικού Κώδικα. Ενδιάµεσος.



Σχετικά έγγραφα
Παραγωγή Τελικού Κώδικα. Γιώργος Μανής

Παραγωγή Τελικού Κώδικα. Γιώργος Μανής

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 2 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

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

Παραδείγματα Assembly Μέρος Γ

Προγραμματισμός Ι (ΗΥ120)

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

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

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

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

Αρχιτεκτονική Μικροεπεξεργαστών MIPS-32. Αρχείο καταχωρητών και Χάρτης Μνήµης

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

6. Επιστροφή ελέγχου στο σημείο εκκίνησης

Οργάνωση Η/Υ. Ο Επεξεργαστής TRN. Τμήμα Εφαρμοσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Α. Χατζηγεωργίου-Η. Σακελλαρίου

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

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

Ορισµός της Στοίβας Περίληψη H λειτουργία της Στοίβας (γενικά, αλλά και στο QtSpim pim) Η χρησιµότητα της Στοίβας στους Μικροεπεξεργαστές Κλήση συνάρτ

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

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

procedure P ( < pars > ) < type> f( < pars > ) begin { < local vars > < local vars > < procedure body> < procedure body> end; }

Αναδρομή. ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 6. Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΛΑΜΙΑΣ. A. Μετατροπή αριθμών 1. Μετατροπή αριθμών από δεκαδικό σε δυαδικό σύστημα αρίθμησης

ΗΜΥ Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

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

Υποστήριξη διαδικασιών στο υλικό των υπολογιστών

ΗΜΥ 213 Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 11 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

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

Οργάνωση Υπολογιστών

MIPS functions and procedures

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

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΠΕΡΙΕΧΟΜΕΝΑ 1. Υπορουτίνες Μαθηµατικών Πράξεων 1.1. Προσηµασµένοι και απροσήµαστοι αριθµοί 1.2. Μετατροπές προσηµασµένων και απροσήµαστων αριθµών

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

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

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

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

Καταχωρητές γενικής χρήσης και δεδοµένων (Data Registers)

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

Πίνακας Περιεχοµένων Πρόλογος Κεφάλαιο Βασικές εισαγωγικές έννοιες

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

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

Ερωτήσεις θεωρίας MY. Μέρος Α. Υλικό.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΠΡΩΤΗ ΠΡΟΟΔΟΣ ΣΤΗΝ «ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Y»

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

ΗΜΥ 213. Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών. Διδάσκων: Δρ. Γιώργος Ζάγγουλος

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

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

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 12 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Οργάνωση Υπολογιστών (Ι)

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

Οργάνωση και Σχεδίαση Υπολογιστών Η ιασύνδεση Υλικού και Λογισµικού, 4 η έκδοση. Κεφάλαιο 2. Εντολές: η γλώσσα του υπολογιστή

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

Κεφάλαιο 10 ο Υποπρογράµµατα

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 3: Εντολές λογικών πράξεων και εντολές κλήσης ρουτινών

; Γιατί είναι ταχύτερη η λήψη και αποκωδικοποίηση των εντολών σταθερού μήκους;

; Τι περιέχεται στη συσκευασία ενός μικροεπεξεργαστή σήμερα;

1 η Ενδιάμεση Εξέταση Απαντήσεις/Λύσεις

Είναι το «μυαλό» του υπολογιστή μας. Αυτός κάνει όλους τους υπολογισμούς και τις πράξεις. Έχει δική του ενσωματωμένη μνήμη, τη λεγόμενη κρυφή

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

Οργάνωση Η/Υ. Γιώργος ηµητρίου. Μάθηµα 9 ο. Πανεπιστήµιο Θεσσαλίας - Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ικτύων

(Ιούνιος 2001 ΤΕΕ Ηµερήσιο) Σε κάθε µία από τις παρακάτω περιπτώσεις, να

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

Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

Ανάπτυξη και Σχεδίαση Λογισμικού

Προτεινόμενες Λύσεις 1 ης Ενδιάμεσης Εξέτασης στο ΗΜΥ213 & Αποτελέσματα

ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT

2 η Ενδιάμεση Εξέταση Λύσεις/Απαντήσεις

Αρχιτεκτονική x86(-64) 32-bit και 64-bit λειτουργία. Αρχιτεκτονική x86(-64) Αρχιτεκτονική επεξεργαστών x86(-64) Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

Εισαγωγή στην πληροφορική -4

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

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

Οργάνωση Η/Υ. Γιώργος ηµητρίου. Μάθηµα 4 ο. Πανεπιστήµιο Θεσσαλίας - Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ικτύων

Αρχιτεκτονικές Συνόλου Εντολών

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

Παραδείγματα Προγραμματισμού σε Assembly του TRN

Κεντρική Μονάδα Επεξεργασίας (ΚΜΕ) Τμήματα ΚΜΕ (CPU) Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (Ι)

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

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

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

Εργαστήριο ΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ

Στοιχεία από την αρχιτεκτονική των μικροϋπολογιστών

Εντολές του MIPS (2)

Δείγμα Τελικής Εξέτασης στο ΗΜΥ213. Διδάσκοντας: Γιώργος Ζάγγουλος

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

7. Ροή ελέγχου 8. Μηχανισμοί εισόδου/εξόδου

3 η ΑΣΚΗΣΗ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ ΥΠΟΛΟΓΙΣΤΩΝ

Αρχιτεκτονικη υπολογιστων

Λύσεις 1 ης Ενδιάμεσης Εξέτασης στο ΗΜΥ213

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

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

Transcript:

Τελικός Κώδικας Παραγωγή Τελικού Κώδικα Γιώργος Μανής Ενδιάµεσος Κώδικας Παραγωγή Τελικού Κώδικα Τελικός Κώδικας Καταχωρητές R[0], R[1], R[2],, R[255] Ο καταχωρητής R[0] χρησιµοποείται σαν δείκτης στοίβας Ο program counter συµβολίζεται µε $ Πρόσβαση στη µνήµη Μ[address] M[R[ ]] M[R[0]+offset] ini tr outi so1 addi tr,so1,so2 subi tr,so1,so2 muli tr,so1,so2 divi tr,so1,so2 tr so1 tr=so1 + so2 tr=so1 - so2 tr=so1 * so2 tr=so1 / so2 movi tr,so1 tr := so1 jmp addr cmpi so1,so2 so1,so2 s tr so1 jb addr µνήµη jbe addr µνήµη ja addr αριθµός jae addr αddr label, M[..], R[..], δ/ση(αριθµός) R[0] (o SP) je addr αddr label, M[..], R[..], δ/ση(αριθµός) PC jne addr 1

Η Συνάρτηση gnlvcode Ο καταχωρητής 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 στο σωστό σηµείο. Μεταφέρει στον 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 R[254]=offset addi R[255], R[254], R[255] R[255]=R[254]+R[255] αν v είναι αριθµός: movi R[r], v R[r]= v αν v είναι global µεταβλητή - δηλαδή του κυρίως προγράµµατος movi R[r], M[600+offset] R[r]= M[600+offset] τιµή και βάθος φωλιάσµατος ίσο µε το τρέχον ή προσωρινή µεταβλητή: movi R[r], M[offset+R[0]] R[r]= M[offset+R[0]] φωλιάσµατος ίσο µε τοτρέχον: movi R[255], M[offset+R[0]] R[255]=M[offset+R[0]] τιµή και βάθος φωλιάσµατος µικρότερο από το τρέχον: gnlvcode( ) ώστε ο R[255] να έχει την σωστή δ/ση Η Συνάρτηση storerv(r,v) φωλιάσµατος µικρότεροαπότοτρέχον: gnlvcode( ) ώστε ο R[255] να έχει την σωστή δ/νση movi R[255], M[R[255]] R[255]=M[R[255]] αν v είναι global µεταβλητή - δηλαδή του κυρίως προγράµµατος movi M[600+offset], R[r] M[600+offset] = R[r] τιµή και βάθος φωλιάσµατος ίσο µε τοτρέχον: movi M[offset+R[0]], R[r] M[offset+R[0]] = R[r] 2

Η Συνάρτηση storerv(r,v) Η Συνάρτηση storerv(r,v) φωλιάσµατος ίσο µε τοτρέχον: movi R[255], M[offset+R[0]] R[255]=M[offset+R[0]] movi M[R[255]], R[r] M[R[255]] = R[r] τιµή και βάθος φωλιάσµατος µικρότερο από το τρέχον ή προσωρινή µεταβλητή : gnlvcode( ) ώστε ο R[255] να έχει την σωστή δ/ση movi M[R[255]], R[r] M[R[255]] = R[r] φωλιάσµατος µικρότερο από το τρέχον: gnlvcode( ) ώστε ο R[255] να έχει την σωστή δ/νση movi R[255], M[R[255]] R[255]=M[R[255]] movi M[R[255]],R[r] M[R[255]]=R[r] Εντολές Αλµάτων Εκχώρηση jump,_,_,w jmp Lw relop,x,y,w relop={=,<>,>,>=,<,<=} loadvr(y,2) R[2]=y cmpi R[1], R[2] condjmp Lw comdjmp={je,jne,jb,jbe,ja,jae} H cmp επηρεάζει τον καταχωρητή SR και οι je,jne,jb,jbe,ja,jae τονελέγχουνκαικάνουνήόχιτοάλµα υπόσυνθήκη :=,x,_,z storerv(1,z) z=r[1] Εντολές Αριθµητικών Πράξεων Εντολές Εισόδου-Εξόδου op,x,y,z op={+,-,*,/} loadvr(y,2) R[2]=y op R[3], R[1], R[2] op={addi,subi,muli,divi} storerv(3,z) z=r[3] µπορεί για το αποτέλεσµα τηςop va χρησιµοποιηθεί και ένας από τους R[1] και R[2] out,x,_,_ outi R[1] in,x,_,_ ini R[1] storerv(1,x) x =R[1] 3

Επιστροφή Τιµής Συνάρτησης :=,x,_,return_value movi R[255],M[8+R[0]] movi M[R[255]],R[1] αποθηκεύεται ο x στην διεύθυνση που είναι αποθηκευµένη στην 3η θέση του εγγραφήµατος δραστηριοποίησης. par,x,cv,_ (παράµετρος µετιµή) loadvr(x,255) R[255]=x 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] 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( ) Αν η παράµετρος 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] 4

Κλήση Συνάρτησης Αρχικά γεµίζουµε το 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 4 bytes addi R[255], R[255], R[254] 4 bytes movi M[R[0]], R[255] (1ο πεδίο) 4 bytes jmp Lstart_quad (πέρασµα ελέγχου) 3 bytes --------- 15 bytes σύνολο Κλήση Συνάρτησης Αρχή και Τερµατισµός Προγράµµατος επιστροφή στην καλούσα: subi R[0], R[0], R[255] (δείκτης στοίβας) end_block,x,_,_ jmp M[R[0]] Αρχή προγράµµατος Άλµα στην πρώτη εκτελέσιµηεντολή Αρχικοποίηση του δείκτη στοίβας Τερµατισµός προγράµµατος halt,_,_,_ halt 5