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

Σχετικά έγγραφα
Συναρτήσεις-Διαδικασίες

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

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

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

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

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

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

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

MIPS functions and procedures

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

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

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

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

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

ΕΠΛ605 Εργασία 1 Ημερομηνία Παράδοσης 12/9/2018 στην αρχή του μαθήματος

ΠΛΕ- 027 Μικροεπεξεργαστές

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

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

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

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

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

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

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

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

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

Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη. (Διάλεξη. Πανεπιστήμιο Κύπρου

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

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

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

Εργαστήριο 5. Εαρινό Εξάμηνο

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

Εγγραφές Δραστηριοποίησης

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

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

Προγραµµατισµός. Αναδροµή (1/2)

Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών H/Y Department of Electrical and Computer Engineering. Εργαστήριο 1. Χειμερινό Εξάμηνο

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

Κεφάλαιο 2. Εντολές: η γλώσσα του υπολογιστή

Εγγραφές Δραστηριοποίησης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

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

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

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

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

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

Κεφάλαιο 2. Εντολές: η γλώσσα του υπολογιστή

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

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

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

add $t0,$zero, $zero I_LOOP: beq $t0,$s3, END add $t1, $zero,$zero J_LOOP: sub $t2, $s3, $t0 add $t2, $t2, $s1 int i, j, tmp; int *arr, n;

Εγγραφές ραστηριοποίησης

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

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

LANGUAGE OF THE MACHINE. TEI Κρήτης, Τμ. ΕΠΠ, Αρχιτεκτονική Υπολογιστών. Οργάνωση Υπολογιστή. Τυπική οργάνωση υπολογιστή

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

Αναδρομή (Recursion) Πώς να λύσουμε ένα πρόβλημα κάνοντας λίγη δουλειά και ανάγοντας το υπόλοιπο να λυθεί με τον ίδιο τρόπο.

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

Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι ΤΡΑΠΕΖΑ ΘΕΜΑΤΩΝ. Άσκηση 2 Ποιες οι τιμές των καταχωρητών μετά την εκτέλεση του προγράμματος ;

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 3 Εντολές του MIPS (2)

Δομημένος Προγραμματισμός (ΤΛ1006)

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

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

Εργαστήριο 1: Επανάληψη Βασικών Εννοιών στη Γλώσσα C

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

Χρονισμός και Απόδοση Υπολογιστικών Συστημάτων

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Μετάφραση ενός Προγράμματος Εξαιρέσεις

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

Διδάσκων: Παναγιώτης Ανδρέου

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 2 Οργάνωση μνήμης Καταχωρητές του MIPS Εντολές του MIPS 1

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

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

Δομές Δεδομένων (Data Structures)

Απόδοση Υπολογιστικών Συστημάτων

ΕΠΛ221: Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός. Κεφ. 2 Εντολές: H γλώσσα μηχανής

Διάλεξη 5: Δείκτες και Συναρτήσεις

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

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

Αναδροµή (Recursion) ύο παρεξηγήσεις. Σκέψου Αναδροµικά. Τρίγωνο Sierpinski Μη αναδροµικός ορισµός;

ΠΛΕ- 027 Μικροεπεξεργαστές

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

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies

Διδάσκων: Παναγιώτης Ανδρέου

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

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

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

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

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

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

Transcript:

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

Υπολογισμός Παραγοντικού n! n! = 1*2..(n-1)*n = if n<1, 1 else, n*(n-1)! int fact (int n) { if (n < 1) return 1; else return n * fact(n - 1); Παράμετρος n στον $a0 Αποτέλεσμα στον $v0 2

jal LLL:: fact: Ένθετες διαδικασίες: Παράδειγμα fact int fact (int n) { if (n < 1) return 1; else return n * fact(n - 1); addi $sp, $sp, -8 # ρύθμιση στοίβας για 2 τιμές sw $ra, 4($sp) # αποθ. διεύθυνσης επιστροφής sw $a0, 0($sp) # αποθ. Παραμέτρου bge $a0, 1, L1 # έλεγχος για το εάν n<1 li $v0, 1 # αν ναι, αποτέλεσμα: 1 addi $sp, $sp, 8 # αφαιρ. 2 τιμών από στοίβα jr $ra # και επιστροφή L1: addi $a0, $a0, -1 # αλλιώς αφαιρ. 1 από το n jal fact # αναδρομική κλήση LL: lw $a0, 0($sp) # επαναφορά αρχικού n lw $ra, 4($sp) # και διεύθυνσης επιστροφής addi $sp, $sp, 8 # αφαιρ. 2 τιμών από στοίβα mul $v0, $a0, $v0 # υπολογ. αποτελέσματος jr $ra # και επιστροφή 3

Πριν την κλήση της fact(3) Συμπεριφορά της στοίβας Έστω ότι η συνάρτηση καλείται με n=3 $sp $sp fact(3) fact: addi $sp, $sp, -8 # ρύθμιση στοίβας γ sw $ra, 4($sp) # αποθ. διεύθυνσης sw $a0, 0($sp) # αποθ. Παραμέτρου bge $a0, 1, L1 # έλεγχος για το εά fact(1) li $v0, 1 # αν ναι, αποτέλεσμ addi $sp, $sp, 8 # αφαιρ. 2 τιμών απ jr $ra # και επιστροφή fact(2) $sp $a0 (=2) $a0 (=2) $sp $a0 (=1) L1: addi $a0, $a0, -1 # αλλιώς αφαιρ. 1 α jal fact # αναδρομική κλήση LL: lw $a0, 0($sp) # επαναφορά αρχικού lw $ra, 4($sp) # και διεύθυνσης επ addi $sp, $sp, 8 # αφαιρ. 2 τιμών απ mul $v0, $a0, $v0 # υπολογ. αποτελέσμ jr $ra # και επιστροφή

Συμπεριφορά της στοίβας (συνεχ.) fact(0) fact: $a0 (=2) $a0 (=1) $sp $a0 (=0) $sp $v0 = 1*2=2 $sp $a0 (=2) $sp $a0 (=1) $v0 = 1 $v0 = 2*3=6 $sp $a0 (=2) $v0 = 1*1=1 Επέστρεψε στην καλούσα συνάρτηση addi $sp, $sp, -8 # ρύθμιση στο sw $ra, 4($sp) # αποθ. διεύθ sw $a0, 0($sp) # αποθ. Παραμ bge $a0, 1, L1 # έλεγχος για li $v0, 1 # αν ναι, απο addi $sp, $sp, 8 # αφαιρ. 2 τι jr $ra # και επιστρο L1: addi $a0, $a0, -1 # αλλιώς αφαι jal fact # αναδρομική LL: lw $a0, 0($sp) # επαναφορά α lw $ra, 4($sp) # και διεύθυν addi $sp, $sp, 8 # αφαιρ. 2 τι mul $v0, $a0, $v0 # υπολογ. απο jr $ra # και επιστρο 5

Παράδειγμα αναδρομής Iσχυρή αναδρομική συνάρτηση tak() int tak(int x, int y, int z) { if (y < x) { return 1 + tak(tak(x-1,y,z), tak(y-1,z,x), tak(z-1,x,y)); else return z; int main () { tak (18, 12, 6); 6

Παράδειγμα αναδρομής tak: subu $sp, $sp, 20 sw $ra, 16($sp) sw $s0, 12($sp) sw $s1, 8($sp) sw $s2, 4($sp) sw $s3, 0($sp) move $s0, $a0 move $s1, $a1 move $s2, $a2 int tak(int x, int y, int z) { if (y < x) { return 1 + tak(tak(x-1,y,z), tak(y-1,z,x), tak(z-1,x,y)); else return z; int main () { tak (18, 12, 6); # θέσεις για 5 καταχωρητές στην # στοίβα: $ra, $s0..$s3 # $s0 = x # $s1 = y # $s2 = z bge $s1, $s0, L1 # if (y >= x) goto L1 addiu $a0, $s0, -1 move $a1, $s1 move $a2, $s2 jal tak move $s3, $v0 # κώδικας για y < x # $s3= tak(x-1, y, z) 7

Παράδειγμα αναδρομής addiu $a0, $s1, -1 move $a1, $s2 move $a2, $s0 jal tak # $v0=tak(y-1, z, x) addiu $a0, $s2, -1 move $a1, $s0 move $a2, $s1 move $s0, $v0 jal tak # $v0=tak(z-1, x, y) move $a0, $s3 move $a1, $s0 move $a2, $v0 jal tak addiu $v0, $v0, 1 j L2 L1: move $v0, $s2 int tak(int x, int y, int z) { if (y < x) { return 1 + tak(tak(x-1,y,z), tak(y-1,z,x), tak(z-1,x,y)); else return z; int main () { tak (18, 12, 6); #tak (tak(..), tak(..), tak(..)) 8

Παράδειγμα αναδρομής L2: lw $ra, 16($sp) lw $s0, 12($sp) lw $s1, 8($sp) lw $s2, 4($sp) lw $s3, 0($sp) addiu $sp, $sp, 20 jr $ra main: li $a0, 18 li $a1, 12 li $a2, 6 jal tak move $a0, $v0 li $v0, 1 syscall int tak(int x, int y, int z) { if (y < x) { return 1 + tak(tak(x-1,y,z), tak(y-1,z,x), tak(z-1,x,y)); else return z; int main () { tak (18, 12, 6); # προετοιμασία και κλήση της tak() # τύπωσε το αποτέλεσμα 9

Καταχωρητής Πλαισίου ($fp) Η προσπέλαση των αυτόματων μεταβλητών στη στοίβα δεν γίνεται εύκολα μέσω του $sp, επειδή αυτός μεταβάλλεται διαρκώς όσο προστίθενται νέες και αφαιρούνται παλαιές μεταβλητές => συνήθως μια διαδικασία ορίζει το χώρο που καταλαμβάνουν οι σωσμένοι καταχωρητές και οι αυτόματες μεταβλητές ως το χώρο πλαισίου της (procedure frame) στη στοίβα, και μαρκάρει τη σταθερή αρχή αυτού με τον καταχωρητή $fp (frame pointer, $30) $fp $sp Όρισμα 6 Όρισμα 5 Saved Registers [$ra, $a0-$a3, $s0-$s7, $fp] Automatic variables procedure frame High Address Low Address 10

Τοπικές μεταβλητές διαδικασιών Προσοχή. Μια διαδικασία δεν μπορεί να επιστρέψει στο καλούν πρόγραμμα έναν pointer σε αυτόματη μεταβλητή που έχει δημιουργηθεί στη στοίβα (π.χ. σε έναν πίνακα, όπως συχνά συμβαίνει), καθώς ο χώρος αυτός της μνήμης χάνεται με την επιστροφή από τη διαδικασία και το ταυτόχρονο pop όλων των αυτόματων μεταβλητών int *f() { // error! int local[10]; for (i=0;i<10;i++) local[i] = i; return &local[0]; => η επιστροφή ενός πίνακα μπορεί να γίνει μόνο με τη μέθοδο της δέσμευσης χώρου στη μνήμη από το καλούν πρόγραμμα, και το πέρασμα της αντίστοιχης διεύθυνσης (pointer) βάσης στους καταχωρητές $a0-$a3 ως παραμέτρου της διαδικασίας 11