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

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

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

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

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

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

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

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

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

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

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

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

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

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

MIPS functions and procedures

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

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

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

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

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

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

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

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

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

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

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

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

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

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

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

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

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

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

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

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

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

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

Εργαστήριο 3 ΟΡΓΑΝΩΣΗ ΤΗΣ ΚΜΕ. Εισαγωγή

Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 4 Real Mode Interrupts

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

Εντολές γλώσσας μηχανής

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

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

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

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

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Μεταγλώτιση, σύνδεση

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

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

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

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 6 C & Assembly

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

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών ARM και x86

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

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

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

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

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

EPL475:Εργαστήριο 5, GDB

Παράλληλη Επεξεργασία

Eternal War in Memory. Dimitris Mitropoulos

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

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

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

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

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 3 Task Switching in PM

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

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

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

Προηγμένοι Μικροεπεξεργαστές. Paging & Segmentation

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΜΑΘΗΜΑ: ΜΙΚΡΟΫΠΟΛΟΓΙΣΤΕΣ ΘΕΜΑΤΑ ΙΟΥΝΙΟΥ 2014

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

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

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

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

Σύγχρονες Αρχιτεκτονικές Υπολογιστών

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

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

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

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

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

Προγραμματισμός Αναδρομή

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον (Εργαστήριο 2)

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

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

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Τεχνικός Εφαρμογών Πληροφορικής

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

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

Μικροεπεξεργαστές. Σημειώσεις Μαθήματος Υπεύθυνος: Δρ Άρης Παπακώστας,

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

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

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

Εγγραφές Δραστηριοποίησης. Jackson Pollock, The Key, 1946 (action painting)

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

Εισαγωγή Βασικές εντολές Εκτέλεση βήµα-βήµα Εξέταση/Ανάθεση GDB-101. Νίκος Ντάρµος Τµήµα Πληροφορικής Πανεπιστήµιο Ιωαννίνων

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

Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 2 Addressing

Προγραμματισμός Αναδρομή

Transcript:

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

Control Flow εντολές Jump related JMP Jcc (JZ, JNZ, JB, JNB etc) JCXZ, JECXZ LOOP LOOPE, LOOPNE Procedure related CALL RET INT IRET INTO ENTER LEAVE

Επισκόπηση CALL και RET Far και near συναρτήσεις Πέρασμα παραμέτρων μέσω της στοίβας Stack frames Enter και Leave Άλλες εντολές

Συναρτήσεις Ελάχιστες απαιτήσεις: Σε παλιούς επεξεργαστές είσοδος και έξοδος από συναρτήσεις μόνο με jmp Είσοδος: mov [store_pc], ret_address jmp my_function ret_address: Έξοδος: my_function: jmp [store_pc]

Συνάρτησεις Οι σύγχρονοι επεξεργαστές παρέχουν πιο ευέλικτες και έτοιμες λογικές Στους x86 το βασικό ζευγάρι εντολών είναι η CALL και η RET call address = push eip jmp address ret = pop eip

Call και Ret Η call παρέχει διαφορετικές μορφές, ανάλογες με αυτές της jmp call immediate call [mem] call reg Η ret έχει δύο μορφές: ret ret imm (ret και αύξηση του SP κατά imm)

Near και Far συναρτήσεις Σε segmented συστήματα όπως οι x86 οι συναρτήσεις διακρίνονται σε near και far. Near: βρίσκεται στο ίδιο code segment με τον κώδικα που την καλεί Αλλάζει μόνο ο EIP Far: μπορεί να βρίσκεται οπουδήποτε Αλλάζει ο CS και ο EIP Πιο αργή η είσοδος στην συνάρτηση

Πέρασμα παραμέτρων Μέχρι τώρα σχεδόν όλες οι συναρτήσεις μας εκτελούσαν την ίδια λειτουργία πάνω στις ίδιες θέσεις μνήμης Όχι ιδιαίτερα βολικό για μία συνάρτηση Χρειαζόμαστε τρόπο να δώσουμε δυναμικά στην συνάρτηση τα ορίσματα πάνω στα οποία ενεργεί Πέρασμα παραμέτρων μέσω καταχωρητών Πέρασμα παραμέτρων μέσω στοίβας

Πέρασμα παραμέτρων μέσω καταχωρητών Ο πιο εύκολος τρόπος και γρήγορος τρόπος για πέρασμα παραμέτρων Η συνάρτηση περιμένει να βρει τα ορίσματά της σε κάποιους καταχωρητές Συνηθισμένο σε RISC αρχιτεκτονικές (πχ ARM) με πολλούς καταχωρητές Ασύμφορο σε CISC επεξεργαστές Οι x86 έχουν μόνο 6 general purpose καταχωρητές, εκ των οποίων κάποιοι είναι απαραίτητοι για συγκεκριμένες εντολές

Πέρασμα παραμέτρων μέσω στοίβας Πιο αργός τρόπος αλλά πιο ευέλικτος Standard στους x86 Πριν την κλήση βάζουμε τα ορίσματα στην στοίβα Και η συνάρτηση τα βρίσκει σε συγκεκριμένες θέσεις σχετικά ως προς τον πάτο της στοίβας, δηλαδή τον sp

Πέρασμα παραμέτρων μέσω στοίβας Το πρόβλημα είναι ότι ο sp αλλάζει συχνά τιμές (push και pop). Αν αναφερόμαστε σχετικά με τον esp πρέπει να θυμόμαστε διαρκώς το που δείχνει Για το ίδιο όρισμα, διαφορετικά offsets ως προν τον sp Μπορούμε να χρησιμοποιήσουμε τον bp! Δείχνει στο stack segment Δεν έχει συγκεκριμένο ρόλο

Πως γίνεται στην C; Ο κώδικας κάνει push στην στοίβα τα ορίσματα που θέλει να περάσει sp

Πως γίνεται στην C; Ο κώδικας κάνει push στην στοίβα τα ορίσματα που θέλει να περάσει sp arg1 arg2

Πως γίνεται στην C; Ο κώδικας κάνει push στην στοίβα τα ορίσματα που θέλει να περάσει Έπειτα κάνει call (near στο παράδειγμα) sp arg1 arg2

Πως γίνεται στην C; Ο κώδικας κάνει push στην στοίβα τα ορίσματα που θέλει να περάσει Έπειτα κάνει call (near στο παράδειγμα) sp return address arg1 arg2

Πως γίνεται στην C; Ο κώδικας κάνει push στην στοίβα τα ορίσματα που θέλει να περάσει Έπειτα κάνει call (near στο παράδειγμα) Μέσα στην συνάρτηση: sp bp old bp return address arg1 arg2 push bp στην στοίβα mov bp, sp

Πως γίνεται στην C; sp Η συνάρτηση μπορεί να προσπελαύνει δεδομένα σχετικά προς τον bp, όποια τιμή και αν έχει ο sp Πχ mov ax, [bp + 6] ;arg2 bp bp+2 bp+4 bp+6 old bp return address arg1 arg2

Πως γίνεται στην C; sp Η συνάρτηση μπορεί να προσπελαύνει δεδομένα σχετικά προς τον bp, όποια τιμή και αν έχει ο sp bp bp+2 bp+4 bp+6 old bp return address arg1 arg2 Πχ mov ax, [bp + 6] ;arg2 Πριν επιστρέψει η συνάρτηση καθαρίζει την στοίβα

Πως γίνεται στην C; Η συνάρτηση μπορεί να προσπελαύνει δεδομένα σχετικά προς τον bp, όποια τιμή και αν έχει ο sp Πχ mov ax, [bp + 6] ;arg2 sp bp old bp return address arg1 arg2 Πριν επιστρέψει η συνάρτηση καθαρίζει την στοίβα mov sp, bp

Πως γίνεται στην C; Η συνάρτηση μπορεί να προσπελαύνει δεδομένα σχετικά προς τον bp, όποια τιμή και αν έχει ο sp Πχ mov ax, [bp + 6] ;arg2 sp old bp return address arg1 arg2 Πριν επιστρέψει η συνάρτηση καθαρίζει την στοίβα mov sp, bp pop bp bp

Πως γίνεται στην C; Έξω από την συνάρτηση, βγάζουμε από την στοίβα τα ορίσματα: Είτε με pop (αν τα χρειαζόμαστε πάλι) Είτε με add sp, 4 (αν δεν τα χρειαζόμαστε) sp old bp return address arg1 arg2 bp

Παράδειγμα Πρόσθεση 4 ακεραίων int addme(num1, num2, num3, num4)

Παράδειγμα Πρόσθεση 4 ακεραίων int addme(num1, num2, num3, num4) addme: push bp mov bp,sp mov eax,[bp + 4] add eax,[bp + 8] add eax,[bp + 12] add eax,[bp + 16] pop bp ret

Δέσμευση τοπικών μεταβλητών Οι τοπικές μεταβλητές μίας συνάρτησης δεσμεύονται και αποδεσμεύονται δυναμικά Πολλαπλά αντίγραφα της ίδιας μεταβλητής μπορούν να υπάρχουν για συναρτήσεις που καλούν τον εαυτό τους Κάθε στιγμιότυπο μίας συνάρτησης πρέπει να μπορεί να προσπελάσει τις τοπικές μεταβλητές του με τις ίδιες εντολές που χρησιμοποιούν και τα υπόλοιπα στιγμιότυπα Το data segment δεν ταιριάζει σε αυτόν τον ρόλο

Δέσμευση τοπικών μεταβλητών Η C δεσμεύει χώρο στην στοίβα αμέσως μετά την αποθηκευμένη τιμή του bp, μειώνοντας τον sp. Οι τοπικές μεταβλητές προσπελαύνονται χρησιμοποιώντας αρνητικά offset ως προς τον bp Κάθε στιγμιότυπο μίας συνάρτησης έχει διαφορετικό bp, οπότε και προσπελαύνει διαφορετικές τοπικές μεταβλητές

Παράδειγμα int fn(int arg1) { int local1; int local2;...... } local2 local1 old bp return address arg1 stack data old local data old local data oldest dp another ret address bp - 4 bp - 2 bp bp + 4 Old bp

Stack Frame Stack Frame: Abstraction των υψηλότερων επιπέδου γλωσσών προγραμματισμού Περιέχει τα δυναμικά δεδομένα και χαρακτηριστικά μιας συνάρτησης Αποτελείται από τα δεδομένα ανάμεσα: στην θέση που δείχνει ο bp της συνάρτησης στην θέση που δείχνει ο bp της επόμενης

Stack Frame Stack frame 2 Stack frame 1 Stack frame 0 local2 local1 old ebp return address arg1 stack data old local data old local data oldest edp another ret address ebp - 8 ebp - 4 ebp ebp + 8 Old ebp

Stack Frame Οι x86 μας δίνουν εξελιγμένες εντολές ώστε να ελέγξουμε το stack frame Enter arg1, arg2: Σώζει τον παλιό ebp στην στοίβα, φορτώνει στον ebp την τιμή του esp και μειώνει τον esp όσα bytes λέει το πρώτο όρισμα Το δεύτερο όρισμα (nesting level operand) κρατάει το lexical nesting level (0 to 31) της procedure. Το nesting level καθορίζει τον αριθμό των stack frame pointers που υπάρχουν. Leave: Φορτώνει τον esp με την τιμή του ebp και επαναφέρει τον ebp με pop

Stack Frame Function prologue / epilogue: push ebp mov esp, ebp sub esp, [size of local variables]... mov esp, ebp Με ENTER & LEAVE: enter [size of local variables], 0... leave ret pop ebp ret