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

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

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

Transcript

1 Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής Ενότητα 1η: Αναπαράσταση Πληροφορίας Άσκηση 1: Να αποδείξετε ότι η μοναδική μη προσημασμένη ακέραια αναπαράσταση του αριθμού με τιμή 0 σε αριθμητικό σύστημα οποιασδήποτε βάσης είναι η 0 0, για οποιοδήποτε μέγεθος αναπαράστασης. Επεκτείνατε για προσημασμένη αναπαράσταση συμπληρώματος ως προς βάση. Απάντηση: Έστω αριθμητικό σύστημα με βάση q, στο οποίο ένας αριθμός αναπαριστάνεται με n το πλήθος ψηφία, όπου q και n τυχαίοι θετικοί ακέραιοι. Στο σύστημα αυτό υπάρχουν q διαφορετικά ψηφία με διαφορετικές ακέραιες τιμές από 0 έως q-1. Λόγω της 1-1 αντιστοίχησης μεταξύ ψηφίων και τιμών τους, χρησιμοποιούμε τον ίδιο συμβολισμό τόσο για τα ψηφία της αναπαράστασης, όσο και για τις τιμές τους. Έστω λοιπόν ένας μη προσημασμένος αριθμός Ν Α n-1a n-2 A 1A 0 στο πιο πάνω σύστημα, με τιμή που δίνεται από τη σχέση: T(N) = A n-1 q n-1 +A n-2 q n-2 + +A 1 q+a 0 με q > Α i 0, i = 0,,n-1 Αν ο αριθμός Ν έχει τιμή 0, έχουμε: T(N) = 0 A n-1 q n-1 +A n-2 q n-2 + +A 1 q+a 0 = 0 (1) Αφού όμως η βάση q είναι θετικός αριθμός, η παραπάνω σχέση με άγνωστους τις μη αρνητικές τιμές των ψηφίων του αριθμού Ν έχει μοναδική λύση την A i = 0, i = 0,,n-1 γιατί αν έστω και κάποιο ψηφίο του Ν ήταν μη μηδενικό, έστω το A k, 0 k n-1, θα είχαμε: T(N) A k q k > 0 Επομένως η μοναδική μη προσημασμένη ακέραια αναπαράσταση του 0 είναι η 0 0 για οποιαδήποτε q και n. Αν τώρα η αναπαράσταση είναι προσημασμένη σε μορφή συμπληρώματος ως προς βάση, τα παραπάνω αποδεικνύουν ότι η αναπαράσταση 0 0 είναι η μοναδική αναπαράσταση του 0 στους αριθμούς με μη αρνητική τιμή. Αρκεί επομένως να δείξουμε ότι οι αντίθετοι αυτών, δηλαδή οι αριθμοί με μη θετική τιμή, περιλαμβάνουν την ίδια ακριβώς αναπαράσταση του 0, και μόνο αυτή. Στην προσημασμένη αναπαράσταση συμπληρώματος ως προς βάση, η εύρεση του αντιθέτου ενός αριθμού γίνεται με μετατροπή των ψηφίων του αριθμού στα συμπληρωματικά τους και επακόλουθη αύξηση του νέου αριθμού κατά 1. Έτσι, ο αντίθετος του παραπάνω αριθμού Ν θα είναι ο Ν +1, όπου Ν Α n-1 A n-2 A 1 A 0, και A i = q-1-a i, i = 0,,n-1. Αν τυχόν κατά την αύξηση προκύψει κρατούμενο εξόδου, αυτό απορρίπτεται. Η τιμή ενός μη θετικού αριθμού Ν n ψηφίων θα δίνεται επομένως από τη σχέση: T(N) = -[Τ(Ν + 1) mod q n ] = -[(Τ(Ν ) + 1) mod q n ] = = -[(A n-1 q n-1 +A n-2 q n-2 + +A 1 q+a 0 +1) mod q n ] = = -{[(q-1-a n-1) q n-1 +(q-1-a n-2) q n-2 + +(q-1-a 1) q+(q-1-a 0)+1] mod q n } =

2 2 = -{[(q-1) (q n-1 +q n-2 + +q+1)-(a n-1 q n-1 +A n-2 q n-2 + +A 1 q+a 0)+1] mod q n }= = -{[(q n -1) - (A n-1 q n-1 +A n-2 q n-2 + +A 1 q+a 0) + 1] mod q n } = = -{[q n - (A n-1 q n-1 +A n-2 q n-2 + +A 1 q+a 0)] mod q n } όπου η συνάρτηση mod (υπόλοιπο ακέραιας διαίρεσης) εκφράζει την απόρριψη κρατούμενου εξόδου στην έκφραση Ν +1. Εφόσον τα ψηφία A i έχουν τιμές από 0 έως q-1, η έκφραση μέσα στις παρενθέσεις έχει τιμές από 0 έως q n -1. Έτσι, για μη μηδενική τιμή της έκφρασης στις παρενθέσεις, η έκφραση στις αγκύλες έχει τιμή μικρότερη από q n και η συνάρτηση mod δεν έχει καμία επίδραση, η δε συνολική τιμή Τ(Ν) είναι μη μηδενική. Ο μόνος τρόπος να προκύψει μηδενική τιμή Τ(Ν) είναι η έκφραση στις παρενθέσεις να έχει μηδενική τιμή, οπότε η διαφορά q n -0 θα μηδενιστεί μετά την εφαρμογή της συνάρτησης mod. Άρα για μηδενική τιμή του μη θετικού αριθμού Ν καταλήγουμε πάλι στην έκφραση (1), κι επομένως ο αριθμός 0 0 είναι η μοναδική αναπαράσταση του 0 για όλους τους προσημασμένους αριθμούς της αναπαράστασης συμπληρώματος ως προς βάση. Άσκηση 2: Α. Να μετατραπούν οι αριθμοί , και στους αντίστοιχους δεκαεξαδικούς, οκταδικούς και δυαδικούς αριθμούς. Β. Να παρασταθεί σε μορφή κινητής υποδιαστολής ΙΕΕΕ 754 των 32 bits ο αριθμός -5,0 10. Γ. Τι παριστάνεται με καθεμιά από τις ομάδες των 7 bits: 040, 077, 111, 134 (εκφρασμένων σε συμπτυγμένη μορφή στο οκταδικό σύστημα), όταν ερμηνευτεί: α) ως ακέραιος σε παράσταση συμπληρώματος του 1 β) ως ακέραιος σε παράσταση συμπληρώματος του 2 γ) ως ακέραιος σε παράσταση πρόσημο-μέτρο δ) ως μη προσημασμένος ακέραιος ε) ως ASCII χαρακτήρας Απάντηση: Α. Μπορούμε να ξεκινήσουμε τη λύση με τη μετατροπή των αριθμών σε οποιοδήποτε από τα τρία ζητούμενα συστήματα. Εφ όσον δεν έχουμε περιορισμό στον αριθμό των ψηφίων που θα πάρουμε, ο αριθμός των βημάτων του αλγόριθμου μετατροπής καθορίζεται από τον αριθμό των διαιρέσεων που θα εκτελέσουμε, το οποίο σημαίνει ότι η μετατροπή στο σύστημα με τη μεγαλύτερη βάση (δηλαδή στο δεκαεξαδικό) είναι η πιο γρήγορη. Επειδή ακόμα η μετατροπή μεταξύ των τριών συστημάτων δεν απαιτεί νέες διαιρέσεις, εφ όσον η βάση 8 και η βάση 16 είναι δυνάμεις της τρίτης βάσης 2, αρκεί να εφαρμόσουμε τον αλγόριθμο μετατροπής μόνο για τη βάση 16. Έχουμε λοιπόν: x[0] = = , δηλαδή a 0 = 5 και x[1] = = , δηλαδή a 1 = 14 και x[2] = = , δηλαδή a 2 = 6 και x[3] = = , δηλαδή a 3 = 15 και x[4] = 0 Επομένως: = f6e5 16 Επειδή 16 = 2 4, η μετατροπή του δεκαεξαδικού αριθμού σε δυαδικό γίνεται με ανάπτυξη κάθε δεκαεξαδικού ψηφίου σε δυαδικό: f6e5 16 =

3 3 Τέλος, για να πάμε στο οκταδικό σύστημα, παρατηρούμε ότι 8 = 2 3, κι επομένως η μετατροπή του δυαδικού αριθμού σε οκταδικό γίνεται με σύμπτυξη των δυαδικών ψηφίων ανά 3. Για τη μετατροπή αυτή προεκτείνουμε (δηλαδή συμπληρώνουμε προς τα αριστερά) το δυαδικό α- ριθμό, έτσι ώστε ο αριθμός των δυαδικών ψηφίων να γίνει πολλαπλάσιο του 3. Επειδή ο αρχικός αριθμός είναι θετικός, θα συμπληρώσουμε με δύο ψηφία 0. Άρα ο αριθμός γίνεται: = Σημειώστε ότι η μετατροπή στο οκταδικό σύστημα δε μπορεί να γίνει απ ευθείας από το δεκαεξαδικό, επειδή το 16 δεν είναι δύναμη του 8. Συνεχίζοντας για τους υπόλοιπους αριθμούς: x[0] = = , δηλαδή a 0 = 14 και x[1] = = , δηλαδή a 1 = 0 και x[2] = 4 4 = , δηλαδή a 2 = 4 και x[3] = 0 Επομένως: = 40e 16 και συνεχίζοντας όπως παραπάνω: 40e 16 = = Τέλος: x[0] = = , δηλαδή a 0 = 13 και x[1] = = , δηλαδή a 1 = 9 και x[2] = = , δηλαδή a 2 = 11 και x[3] = 3 3 = , δηλαδή a 3 = 3 και x[4] = 0 και άρα 1 : = 3b9d 16 = = Β. Στην ζητούμενη παράσταση ο συντελεστής απεικονίζεται με την τεχνική πρόσημο-μέτρο. Επομένως, θα υπολογίσουμε την παράσταση για το μέτρο του αριθμού, και στο τέλος θα θέσουμε την τιμή 1 στο πιο σημαντικό bit αυτής. Έτσι: 5,0 10 = 101,0 2 και σε μορφή κινητής υποδιαστολής: 5,0 10 = 101, Για να κανονικοποιήσουμε την πιο πάνω παράσταση, την μετατρέπουμε σε ισοδύναμη (δηλαδή ίσης τιμής) με μεταφορά της υποδιαστολής προς τα αριστερά και ταυτόχρονη αύξηση της τιμής του εκθέτη: 5,0 10 = 1, Για να μεταβούμε στη μορφή ΙΕΕΕ 754, εκφράζουμε τον εκθέτη σε πολωμένη παράσταση, προσθέτοντας το 127: 5,0 10 = 1, ( ) Άρα για την τελική μορφή του αριθμού θα έχουμε: σ = ε = π = 1 δηλαδή ο αριθμός θα παρασταθεί ως: Σε επόμενες ασκήσεις οι δεκαεξαδικοί αριθμοί θα αναγράφονται με το πρόθεμα 0x αντί του δείκτη 16, όπως συνηθίζεται σε πολλές γλώσσες προγραμματισμού, τόσο υψηλού όσο και χαμηλού επιπέδου.

4 4 Γ. Για τις ερωτήσεις (α) έως (δ) θέλουμε να βρούμε την αναπαριστώμενη τιμή στο δεκαδικό σύστημα. Κατ αρχήν αναπτύσσουμε τους αριθμούς στην πλήρη δυαδική τους μορφή. Έτσι, διαπιστώνουμε ότι οι πρώτοι δύο αριθμοί είναι θετικοί, κι επομένως η τιμή τους είναι η ίδια για όλες τις ερωτήσεις (α) έως (δ). Για τους υπόλοιπους δύο βρίσκουμε πρώτα τον αντίστοιχο θετικό δυαδικό. Για την ερώτηση (δ) θεωρούμε το πιο σημαντικό δυαδικό ψηφίο σα μέρος του μέτρου του αριθμού. Τέλος για τους ASCII χαρακτήρες ανατρέχουμε στον αντίστοιχο πίνακα. Σχηματίζουμε έτσι τον πιο κάτω πίνακα που συμπληρώνουμε με τις απαντήσεις: οκταδικός δυαδικός (α) = = (β) = = (γ) = = (δ) (ε)? I \ Άσκηση 3: Θεωρήστε το αριθμητικό σύστημα σταθερής υποδιαστολής με βάση 3, μεγέθους 6 ψηφίων, στο οποίο τα 4 πρώτα ψηφία είναι ακέραια και τα υπόλοιπα 2 ψηφία είναι κλασματικά, για προσημασμένους αριθμούς σε συμπλήρωμα ως προς βάση. Βρείτε την αναπαράσταση στο σύστημα αυτό των αριθμών: +24,3-38,25-7, ,6 +0,333 οι οποίοι δίνονται στο δεκαδικό σύστημα σε πρόσημο/μέτρο. Στη συνέχεια υπολογίστε την τιμή των αριθμών της νέας αναπαράστασης και βρείτε πόσο κοντά είναι στην τιμή των αρχικών αριθμών. Απάντηση: Στο αριθμητικό σύστημα που μας δίνεται, οι αριθμοί που περιλαμβάνονται είναι όλες οι διατάξεις των 6 ψηφίων με 3 δυνατές τιμές κάθε ψηφίου, δηλαδή ένα πλήθος 3 6 = 729 αριθμών. Για προσημασμένη αναπαράσταση σε συμπλήρωμα ως προς βάση, έχουμε μόνο μία απεικόνιση του 0, κι επομένως θα έχουμε = 728 μη μηδενικούς αριθμούς, που για ίσο πλήθος θετικών και αρνητικών, θα είναι 364 θετικοί και 364 αρνητικοί αριθμοί. Από τη μία ανεβαίνοντας, και από την άλλη κατεβαίνοντας από το 0, βρίσκουμε το σημείο στο οποίο ο μέγιστος θετικός συναντιέται με τον ελάχιστο αρνητικό. Έτσι, ο μέγιστος θετικός θα είναι ο , με τιμή = 40, (= ) και αντίστοιχα ο ελάχιστος αρνητικός θα είναι ο , με τιμή -40, Με βάση τα παραπάνω, καταλαβαίνουμε ότι το σύστημά μας δεν μπορεί να απεικονίσει τον αριθμό -42,6, αφού είναι μικρότερος από τον ελάχιστο αρνητικό της αναπαράστασης. Για όλους τους υπόλοιπους, εφαρμόζουμε τον αλγόριθμο μετατροπής για το μέτρο του αριθμού, ξεχωριστά για το ακέραιο και ξεχωριστά για το κλασματικό μέρος, και αν ο αριθμός είναι αρνητικός, βρίσκουμε στη συνέχεια το συμπλήρωμα ως προς βάση της αναπαράστασης του μέτρου.

5 5 Για παράδειγμα, για τον πρώτο αριθμό, η μετατροπή του ακέραιου μέρους 24 γίνεται με διαδοχικές διαιρέσεις με το 3: 24 3 = 8 με υπόλοιπο 0 (άρα λιγότερο σημαντικό ψηφίο = 0) 8 3 = 2 με υπόλοιπο 2 (άρα επόμενο ψηφίο = 2) 2 3 = 0 με υπόλοιπο 2 (άρα επόμενο ψηφίο = 2) και συμπληρώνουμε με 0, εφόσον μετατρέπουμε το μέτρο του αριθμού. Η μετατροπή του κλασματικού μέρους 3 γίνεται με διαδοχικούς πολλαπλασιασμούς με το 3: 0,3 3 = 0,9 (άρα πρώτο κλασματικό ψηφίο = 0) 0,9 3 = 2,7 (άρα δεύτερο κλασματικό ψηφίο = 2) και σταματάμε, εφόσον υπολογίζουμε δύο κλασματικά ψηφία. Όλοι οι υπολογισμοί φαίνονται στον παρακάτω πίνακα: Αριθμός Μέτρο Ακέραιο μέρος Κλασματικό μέρος Νέο μέτρο Νέος αριθμός +24,3 24, ,25 38, ,872 7, ,6 - +0,333 0, Η διαδικασία της μετατροπής που ακολουθήσαμε υπολογίζει τα κλασματικά μέρη χωρίς καμία προσπάθεια βέλτιστης προσέγγισης του αρχικού αριθμού. Παρατηρήστε ότι στο παράδειγμα του κλασματικού 3 (δηλαδή του αριθμού 0,3) ο δεύτερος πολλαπλασιασμός έδωσε αποτέλεσμα που είναι πιο κοντά στο 2+1 παρά στο 2, κι επομένως θα μπορούσαμε να προσεγγίσουμε το 0,3 καλύτερα με το 10 (με τιμή 0, ) παρά με το 02 (με τιμή 0, ). Ας δούμε πόσο κοντά είμαστε για καθέναν από τους αριθμούς που μετατρέψαμε, υπολογίζοντας την τιμή του αποτελέσματος: Τ(022002) = = +24, Τ(112021) = -Τ(110202) = -( ) = -38, Τ(220101) = -Τ(002122) = -( ) = -7, Τ(010100) = = +10 Τ(000002) = = +0, Για όλες τις περιπτώσεις η διαφορά της τιμής της αναπαράστασης από την τιμή του αρχικού αριθμού είναι κατ απόλυτη τιμή μικρότερη από την ακρίβεια του συστήματος, η οποία είναι: ακρίβεια συστήματος Τ(000001) = 0, Άσκηση 4: Για ένα αριθμητικό σύστημα με βάση Β, στο οποίο διατίθενται κ ψηφία για την αναπαράσταση των αριθμών, μετράμε την αποτελεσματικότητα αποθήκευσης με το δείκτη κόστους Ε = κ Β που υποθέτει ότι το κόστος αποθήκευσης για κάθε ψηφίο είναι ανάλογο με τον αριθμό τιμών που μπορεί αυτό να πάρει. Αν το πλήθος Α των αριθμών που θέλουμε να αναπαραστήσουμε είναι σταθερό, να βρεθεί η βάση Β που ελαχιστοποιεί το Ε. Απάντηση: Το πλήθος Α των τιμών που αναπαρασταίνουμε δίνεται από τη σχέση: Α = Β κ από την οποία παίρνουμε:

6 6 κ = lna/lnb Αντικαθιστώντας στη σχέση που μας δίνεται: Ε = κ Β Ε = lna B / lnb Για να ελαχιστοποιήσουμε το Ε ως προς Β, πρέπει να μηδενίσουμε την αντίστοιχη παράγωγο: de/db = 0 lna (lnb 1) / ln 2 B = 0 lnb = 1 B = e δεδομένου ότι Α 1, Β 1. Βρίσκουμε εύκολα χρησιμοποιώντας τη δεύτερη παράγωγο ότι η τιμή e όντως ελαχιστοποιεί το δείκτη Ε. Επειδή ζητάμε ακέραιο Β, εξετάζουμε τις τιμές της συνάρτησης για Β = 2 και Β = 3. Έχουμε: 2/ln2 > 3/ln3 κι επομένως η βάση Β που ζητάμε είναι 3.

7 7 Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής Ενότητα 2η: Αρχιτεκτονικές Συνόλου Εντολών Άσκηση 1: Έστω ένας επεξεργαστής αρχιτεκτονικής στοίβας. Στον επεξεργαστή αυτόν κάθε αριθμητική πράξη εκτελείται με υπονοούμενα τελούμενα εισόδου τα δύο στοιχεία στην κορυφή της στοίβας. Ειδικότερα, το πρώτο στοιχείο από την κορυφή της στοίβας αποτελεί το αριστερό, ενώ το δεύτερο στοιχείο από την κορυφή της στοίβας αποτελεί το δεξί τελούμενο της πράξης. Τα στοιχεία της στοίβας φορτώνονται από και αποθηκεύονται στη μνήμη με τις ειδικές εντολές push και pop αντίστοιχα, που λαμβάνουν μοναδικό τελούμενο μια διεύθυνση μνήμης για κατ ευθείαν διευθυνσιοδότηση. Α. Γράψτε το συντομότερο δυνατό κώδικα συμβολικής γλώσσας του πιο πάνω επεξεργαστή για τον υπολογισμό της έκφρασης: Z = A*B - C*(D + E/F) όπου A, B, C, D, E, F και Z αριθμητικές μεταβλητές, οι οποίες αντιστοιχούνται σε διευθύνσεις μνήμης που συμβολίζονται με το όνομά τους. Υποθέστε ότι για την εκτέλεση των αναγκαίων αριθμητικών πράξεων διατίθενται οι εντολές add, sub, mul και div. Δείξτε το περιεχόμενο της στοίβας μετά την εκτέλεση καθεμιάς από τις εντολές του κώδικά σας. Β. Θεωρήστε στη συνέχεια ότι οι εντολές push και pop δέχονται και έμμεση διευθυνσιοδότηση μέσω μνήμης, η οποία στη συμβολική γλώσσα του επεξεργαστή αναγράφεται με παρενθέσεις γύρω από τη διεύθυνση προσπέλασης. Επίσης, θεωρήστε ότι διατίθενται και εντολές διακλάδωσης, έστω beq και bne, οι οποίες εκτελούν άλμα σε περίπτωση μηδενικής ή μη μηδενικής τιμής του στοιχείου στην κορυφή της στοίβας, το οποίο και αφαιρείται από αυτήν. Ο προορισμός του άλματος αναγράφεται ως ετικέτα στον κώδικα συμβολικής γλώσσας του επεξεργαστή, και υλοποιείται με σχετική διευθυνσιοδότηση. Τέλος, θεωρήστε ότι διατίθεται και η εντολή pushi, άμεσης διευθυνσιοδότησης, η οποία εισάγει στην κορυφή της στοίβας μια σταθερά. Γράψτε τώρα το συντομότερο δυνατό κώδικα συμβολικής γλώσσας για την εκτέλεση του βρόχου: FOR I = 1,N Z[I] = A[I]*B C[I]*(D + E[I]/F) ENDFOR όπου τώρα τα A, C, E και Z είναι μεταβλητές που περιέχουν τις αρχικές διευθύνσεις ομώνυμων διανυσμάτων στη μνήμη και Ι, Ν είναι νέες μεταβλητές. Υποθέστε ότι η μνήμη διευθυνσιοδοτείται σε λέξεις ίσου μεγέθους με τα στοιχεία των τεσσάρων διανυσμάτων, και ότι τα διανύσματα δεικτοδοτούνται από 1 έως την τιμή της μεταβλητής Ν. Απάντηση: Α. Για τον υπολογισμό της πιο πάνω έκφρασης σε έναν επεξεργαστή αρχιτεκτονικής στοίβας, πρέπει να φορτώσουμε στη στοίβα τις τιμές των μεταβλητών του δεξιού μέλους της ανάθεσης, να εκτελέσουμε τις απαιτούμενες πράξεις, και στο τέλος να αποθηκεύσουμε το αποτέλεσμα στη μνήμη. Επομένως μπορούμε εύκολα να βρούμε ότι ο ελάχιστος αριθμός εντολών που θα χρειαστούμε είναι 6 εντολές push, 5 εντολές αριθμητικών πράξεων, και 1 εντολή pop.

8 8 Για κάθε αριθμητική πράξη που εκτελούμε, τα δύο τελούμενα εισόδου πρέπει να βρίσκονται στην κορυφή της στοίβας. Ενώ για τις πράξεις της πρόσθεσης και του πολλαπλασιασμού μπορούμε να υποθέσουμε ότι δε μας ενδιαφέρει η σειρά που τα τελούμενα αυτά εισάγονται στη στοίβα, για τις πράξεις της αφαίρεσης και της διαίρεσης η σειρά αυτή είναι ουσιαστική για την ορθότητα του αποτελέσματος. Επομένως, για τις δύο τελευταίες πράξεις, πρέπει να εισάγουμε στη στοίβα πρώτα το δεξί και μετά το αριστερό τελούμενό τους. Σε κάθε πράξη, τα τελούμενα εισόδου αφαιρούνται από την κορυφή της στοίβας, ενώ το αποτέλεσμα της πράξης τοποθετείται στη νέα κορυφή της στοίβας. Σε διαδοχικές πράξεις, κάποιο ή και τα δύο από τα τελούμενα εισόδου μιας πράξης είναι δυνατό να βρίσκονται στη στοίβα σαν αποτελέσματα προηγούμενων πράξεων, και όχι ύστερα από αντίστοιχες εντολές φόρτωσης push. Κάτι τέτοιο μάλιστα είναι επιθυμητό στην παρούσα άσκηση, εφ όσον μας ζητείται ο ελάχιστος αριθμός εντολών, κι επομένως θα πρέπει να περιορίσουμε τις εντολές φόρτωσης στις απολύτως αναγκαίες. Αν δε θέλαμε να βρούμε τον ε- λάχιστο αριθμό εντολών, θα μπορούσαμε να αποθηκεύουμε το αποτέλεσμα κάθε πράξης πλην της τελευταίας σε προσωρινή θέση μνήμης, και να το ξαναφορτώνουμε στη στοίβα, ό- ταν το χρειαζόμαστε σε επόμενη πράξη. Τώρα όμως, πρέπει να φροντίσουμε να εκτελούμε τις διαδοχικές πράξεις με τέτοια σειρά, ώστε τα αποτελέσματά τους να διατίθενται στη στοίβα για τις πράξεις που ακολουθούν 2. Για παράδειγμα, ο δεύτερος από αριστερά πολλαπλασιασμός στην έκφραση που μας δόθηκε μπορεί να εκτελεστεί, μόλις τα δύο τελούμενα εισόδου του τοποθετηθούν στη στοίβα. Το α- ριστερό τελούμενο είναι μια μεταβλητή, που πρέπει να φορτωθεί από τη μνήμη. Το δεξί τελούμενο όμως είναι μια υποέκφραση, που πρέπει να αποτιμηθεί πριν την εκτέλεση του πολλαπλασιασμού. Λόγω της αντιμεταθετικότητας του πολλαπλασιασμού, και σύμφωνα με όσα αναφέραμε πιο πάνω, μπορούμε να φορτώσουμε τη μεταβλητή C στη στοίβα είτε πριν, είτε μετά τον υπολογισμό της υποέκφρασης D+E/F. Για την εκτέλεση του πολλαπλασιασμού, το δεξί τελούμενο αυτού θα βρεθεί στη στοίβα, σαν το αποτέλεσμα της υποέκφρασης αυτής. Ας σημειωθεί ότι ο υπολογισμός κάθε επιμέρους υποέκφρασης πρέπει να γίνεται με μια διαδοχή εντολών που αφορούν μόνο αυτή την υποέκφραση. Για το πιο πάνω παράδειγμα, δε θα μπορούσαμε να παρεμβάλουμε την εντολή φόρτωσης της μεταβλητής C ανάμεσα στις εντολές αποτίμησης της υποέκφρασης D+E/F, διαφορετικά η στοίβα δε θα περιείχε τις τιμές των τελούμενων του πολλαπλασιασμού, αλλά κάποιες άλλες τυχαίες τιμές. Με βάση τα παραπάνω, ένας κώδικας που υπολογίζει την έκφραση Z = A*B - C*(D + E/F) στον επεξεργαστή μας είναι ο ακόλουθος: push C push D push F push E div add mul push A push B mul sub pop Z Παρατηρήστε ότι για τις δύο πράξεις που δεν έχουν αντιμεταθετικότητα, τοποθετείται στη στοίβα πρώτα το δεξί τελούμενο, και μετά το αριστερό. Για παράδειγμα, για να εκτελεστεί η αφαίρεση, πρώτα αποτιμάται η υποέκφραση C*(D + E/F) και μετά η A*B. 2 Αυθαίρετη επιλογή στη σειρά εκτέλεσης διαδοχικών πράξεων δεν είναι πάντα επιτρεπτή. Πολλές φορές, σε γλώσσες προγραμματισμού υψηλού επιπέδου επιβάλλεται αποτίμηση εκφράσεων από αριστερά προς τα δεξιά. Τότε, οι αντίστοιχες πράξεις πρέπει να εκτελούνται από αριστερά προς τα δεξιά, και τα ενδιάμεσα αποτελέσματα αυτών να αποθηκεύονται σε προσωρινές θέσεις μνήμης, αν δε μπορούν να χρησιμοποιηθούν άμεσα. Στην παρούσα άσκηση δεν έχουμε τέτοιον περιορισμό.

9 9 Για να δούμε τι περιέχει η στοίβα μετά την εκτέλεση καθεμιάς από τις πιο πάνω εντολές, σχηματίζουμε τον ακόλουθο πίνακα, υποθέτοντας ότι η στοίβα είναι αρχικά άδεια: Εντολή push C push D push F push E div add mul push A push B mul sub pop Z Στοίβα E F F E/F B D D D D D+E/F A A A*B C C C C C C Υ Υ Υ Υ A*B-Υ όπου σε κάθε μη κενή θέση στη στοίβα περιέχεται η τιμή της αντίστοιχης μεταβλητής ή έκφρασης. Στον παραπάνω πίνακα συμβολίσαμε με Υ την υποέκφραση C*(D+E/F). Σαν εναλλακτική απάντηση, ας δώσουμε τον κώδικα που εισάγει στη στοίβα τα τελούμενα εισόδου με την προβλεπόμενη σειρά ακόμα και για τις πράξεις της πρόσθεσης και του πολλαπλασιασμού που δεν έχουν αντιμεταθετικότητα: push F push E div push D add push C mul push Β push Α mul sub pop Z Τέλος, ας δούμε τι περιέχει η στοίβα μετά την εκτέλεση καθεμιάς από τις πιο πάνω εντολές: Εντολή push F push E div push D add push C mul push B push A mul sub pop Z Στοίβα A E D C B B A*B F F E/F E/F D+E/F D+E/F Υ Υ Υ Υ A*B-Υ όπου και πάλι με Υ συμβολίσαμε την υποέκφραση C*(D+E/F). Β. Για το δεύτερο ερώτημα της άσκησης, παρατηρούμε ότι ο κώδικας που υπολογίζεται σε κάθε επανάληψη του βρόχου μοιάζει με τον κώδικα του προηγούμενου ερωτήματος. Άρα θα χρειαστούμε τον ίδιο ελάχιστο αριθμό εντολών ανά επανάληψη, με τη διαφορά ότι θα χρειαστούμε επιπλέον (α) κώδικα υπολογισμού της διεύθυνσης των στοιχείων των διανυσμάτων που προσπελαύνονται, και (β) κώδικα ελέγχου του βρόχου. Με βάση την εκφώνηση, κι εφόσον τα Α, C, E και Z περιέχουν τις αρχικές διευθύνσεις των ομώνυμων διανυσμάτων, και το μέγεθος στοιχείου του κάθε διανύσματος είναι ίσο με το μέγεθος λέξης μνήμης, ο υπολογισμός της διεύθυνσης ενός στοιχείου, έστω του A[I], θα γίνεται με φόρτωση του περιεχομένου του Α, με φόρτωση του περιεχομένου του Ι, και πρόσθεση των δύο τιμών, δηλαδή της αρχικής διεύθυνσης του διανύσματος Α και του δείκτη Ι, με την προϋπόθεση ότι προσαρμόζουμε το δείκτη να μεταβάλλεται από 0, ώστε το στοιχείο Α[1] να αντιστοιχείται στη διεύθυνση Α+0. Επειδή μας διατίθεται μόνο κατ ευθείαν και έμμεση διευ-

10 10 θυνσιοδότηση μνήμης, ο μοναδικός τρόπος να λάβουμε την τιμή ενός στοιχείου διανύσματος είναι να αποθηκεύσουμε την υπολογισμένη διεύθυνση σε κάποια βοηθητική θέση μνήμης, και στη συνέχεια να φορτώσουμε με έμμεση διευθυνσιοδότηση από αυτή τη διεύθυνση. Έτσι, για τη φόρτωση στη στοίβα του στοιχείου Α[Ι] θα χρειαστούμε τον κώδικα: push A push I add pop T push (T) όπου Τ κάποια διεύθυνση μνήμης. Παρόμοια και για τα υπόλοιπα στοιχεία διανυσμάτων. Όσο αφορά τον κώδικα ελέγχου του βρόχου, επειδή διατίθενται οι εντολές beq και bne που συγκρίνουν με μηδενική τιμή, θα αντιστρέψουμε τη σειρά των επαναλήψεων, και θα μεταβάλλουμε το δείκτη από Ν-1 μέχρι το 0. Έτσι, θα αρχικοποιήσουμε το Ι με την τιμή Ν, και στο τέλος κάθε επανάληψης θα φορτώνουμε στην κορυφή της στοίβας το Ι για να το χρησιμοποιήσουμε σε εντολή bne με προορισμό την αρχή του βρόχου. Η μείωση του Ι θα γίνεται στην αρχή της κάθε επανάληψης του βρόχου. Ο τελικός κώδικας, με βάση τον πρώτο από τους δύο κώδικες του ερωτήματος Α, θα είναι: push N pop I ; I = N Loop: pushi 1 push I sub pop I ; I = I-1 push C push I add pop T ; T = &C[I] push (T) ; push C[I] push D push F push E push I add pop T ; T = &E[I] push (T) ; push E[I] div ; E[I]/F add ; D+E[I]/F mul ; C[I]*(D+E[I]/F) push A push I add pop T ; T = &A[I] push (T) ; push A[I] push B mul ; A[I]*B sub ; A[I]*B-C[I]*(D+E[I]/F) push Z push I add pop T ; T = &Z[I] pop (T) ; Z[I] = A[I]*B-C[I]*(D+E[I]/F) push I bne Loop ; if I!=0 goto Loop όπου με μορφή σχολίων δίνουμε το αποτέλεσμα των κυριότερων εντολών.

11 11 Παρατηρήστε ότι στον πιο πάνω κώδικα πολλές προσπελάσεις μνήμης επαναλαμβάνονται, όπως για παράδειγμα η φόρτωση του Ι, η οποία επαναλαμβάνεται 6 φορές στην ίδια επανάληψη του βρόχου. Άλλες προσπελάσεις μνήμης επαναλαμβάνονται σε διαδοχικές επαναλήψεις του βρόχου, όπως για παράδειγμα οι φορτώσεις των βαθμωτών μεταβλητών Β, D και F, αλλά και των αρχικών διευθύνσεων των διανυσμάτων A, C, E και Z. Η αύξηση των προσπελάσεων μνήμης έχει σαν αποτέλεσμα τη μειωμένη απόδοση του κώδικα. Ένας τρόπος αντιμετώπισης του προβλήματος αυτού είναι η εισαγωγή στο σύνολο εντολών του επεξεργαστή α- ριθμητικών εντολών που δεν αφαιρούν κατ ανάγκη τα τελούμενά τους από τη στοίβα. Με τέτοιες εντολές μπορούμε να διατηρούμε στη στοίβα τιμές που χρησιμοποιούμε συχνά, είτε στην ίδια, είτε σε διαδοχικές επαναλήψεις του βρόχου, μειώνοντας έτσι το κόστος προσπελάσεων μνήμης και το συνολικό χρόνο εκτέλεσης του κώδικα, δεδομένου ότι το κόστος προσπελάσεων της στοίβας είναι πολύ μικρότερο από εκείνο της μνήμης. Άσκηση 2: Έστω μια αρχιτεκτονική επέκτασης συσσωρευτή, με ένα συσσωρευτή Σ και δύο καταχωρητέςδείκτες X και Y. Οι εντολές της αρχιτεκτονικής αυτής είναι οι: Load (φόρτωσε τον Σ), Store (αποθήκευσε από τον Σ), Add (πρόσθεσε στον Σ), Sub (αφαίρεσε από τον Σ), Cmp (σύγκρινε με τον Σ για ισότητα), Beqz (εκτέλεσε άλμα αν ο Σ έχει μηδενική τιμή), LdX, LdY (φόρτωσε τον Χ ή τον Υ), StX, StY (αποθήκευσε από τον Χ ή από τον Υ), IncX, IncY (αύξησε τον Χ ή τον Υ), CmpX, CmpY (σύγκρινε με τον Χ ή με τον Υ για ισότητα), Beq, Bne (εκτέλεσε άλμα αν η τελευταία σύγκριση ήταν αληθής ή ψευδής) και Jmp (εκτέλεσε άλμα). Οι εντολές σύγκρισης Cmp, CmpX και CmpY γράφουν το αποτέλεσμά τους σε ειδικό ψηφίο ε- λέγχου του επεξεργαστή, το οποίο χρησιμοποιείται μόνο από τις εντολές διακλάδωσης Beq και Bne. Η παραπάνω αρχιτεκτονική υποστηρίζει τις εξής μεθόδους διευθυνσιοδότησης της μνήμης: Κατ' ευθείαν (με διεύθυνση μνήμης), έμμεση (με διεύθυνση που βρίσκεται σε κάποια διεύθυνση μνήμης), δεικτοδοτούμενη μέσω του Χ ή του Υ (με διεύθυνση που προστίθεται με τον Χ ή τον Υ), δεικτοδοτούμενη μέσω του Χ και έμμεση (πρώτα δεικτοδοτούμενη μέσω του Χ και ύστερα έμμεση), έμμεση και δεικτοδοτούμενη μέσω του Υ (πρώτα έμμεση και ύστερα δεικτοδοτούμενη μέσω του Υ), και τέλος δεικτοδοτούμενη μέσω του Χ, έμμεση και δεικτοδοτούμενη μέσω του Υ (πρώτα δεικτοδοτούμενη μέσω του Χ, ύστερα έμμεση και τέλος δεικτοδοτούμενη μέσω του Υ). Από τις εντολές της αρχιτεκτονικής, μόνο οι πέντε πρώτες και η εντολή Jmp δέχονται όλες τις πιο πάνω μεθόδους διευθυνσιοδότησης της μνήμης. Οι εντολές που αναφέρονται στους καταχωρητές Χ και Υ, εκτός των εντολών IncX και IncY που δεν έχουν τελούμενο, δέχονται κατ' ευθείαν και έμμεση διευθυνσιοδότηση. Οι εντολές Beqz, Beq και Bne δέχονται σχετική διευθυνσιοδότηση με μετατόπιση σχετικά με το μετρητή προγράμματος. Τέλος, οι εντολές Load, LdX και LdY, όπως και οι εντολές Add, Sub, Cmp, CmpX και CmpY δέχονται και άμεσο τελούμενο. Για την παραπάνω αρχιτεκτονική γράψτε ένα πρόγραμμα σε συμβολική γλώσσα που μεταφέρει τους χαρακτήρες ενός πίνακα από ορμαθούς χαρακτήρων (strings) σε κάποιο συνεχόμενο χώρο μνήμης. Ο πίνακας περιέχει τις διευθύνσεις στις οποίες αρχίζουν οι ορμαθοί και οι οποίες είναι τυχαία διασπαρμένες στη μνήμη, ξεκινά σε κάποια διεύθυνση μνήμης Α και τερματίζεται μετά από Μ ορμαθούς, όπου Μ κάποια σταθερά, ή μόλις συναντηθεί μηδενική διεύθυνση. Κάθε ορμαθός τερματίζεται με το μηδενικό χαρακτήρα, στη θέση του οποίου μεταφέρεται ο χαρακτήρας αλλαγής γραμμής \n. Ο συνεχόμενος χώρος στη μνήμη ξεκινά σε κάποια διεύθυνση Β, και χωράει μέχρι Ν χαρακτήρες, όπου Ν κάποια άλλη σταθερά. Ο αριθμός των χαρακτήρων που μεταφέρθηκαν πρέπει να αποθηκευτεί σε κάποια διεύθυνση Κ. Θεωρήστε ότι η μνήμη διευθυνσιοδοτείται σε ψηφιολέξεις (bytes), κάθε χαρακτήρας καταλαμβάνει μια ψηφιολέξη, ενώ κάθε διεύθυνση καταλαμβάνει τέσσερις ψηφιολέξεις. Υποθέστε ότι οι σταθερές Μ και Ν είναι μη μηδενικές. Απάντηση:

12 12 Έστω ότι η συμβολική γλώσσα της αρχιτεκτονικής μας υποστηρίζει τον ακόλουθο συμβολισμό για αναφορά σε άμεσο τελούμενο (ενδεικτικά για την εντολή Load): - Αριθμητική σταθερά: Load #Ν - Χαρακτήρας ASCII: Load a Έστω ακόμα ότι έχουμε τον ακόλουθο συμβολισμό για τη διευθυνσιοδότηση της μνήμης (ενδεικτικά για την εντολή Load, για κάποια διεύθυνση μνήμης Δ): - Κατ' ευθείαν: Load Δ - Έμμεση: Load (Δ) - Δεικτοδοτούμενη μέσω του Χ: Load Δ,X - Δεικτοδοτούμενη μέσω του Χ και έμμεση: Load (Δ,Χ) - Έμμεση και δεικτοδοτούμενη μέσω του Υ: Load (Δ),Υ - Δεικτοδοτούμενη μέσω του Χ, έμμεση και δεικτοδοτούμενη μέσω του Υ: Load (Δ,Χ),Υ Υπενθυμίζουμε ότι η επίλυση αναφοράς (δηλαδή ο υπολογισμός της τελικής διεύθυνσης μνήμης στην οποία αναφέρεται μια εντολή) στην περίπτωση έμμεσης διευθυνσιοδότησης γίνεται με φόρτωση της τελικής διεύθυνσης από τη μνήμη, από τη διεύθυνση που δίνεται στην εντολή, ενώ στην περίπτωση δεικτοδοτούμενης διευθυνσιοδότησης γίνεται με πρόσθεση της τιμής του καταχωρητή δείκτη στη διεύθυνση που δίνεται στην εντολή. Οι συνδυασμοί έμμεσης και δεικτοδοτούμενης διευθυνσιοδότησης απαιτούν αντίστοιχο συνδυασμό μικρολειτουργιών για την επίλυση αναφοράς. Για παράδειγμα, στην αρχιτεκτονική που μας δίνεται, η τελευταία μέθοδος διευθυνσιοδότησης απαιτεί πρώτα μια πρόσθεση της τιμής του Χ στη διεύθυνση που δίνεται στην εντολή, στη συνέχεια φόρτωση μιας νέας διεύθυνσης από τη μνήμη, από τη διεύθυνση που υπολογίστηκε, και τέλος νέα πρόσθεση, της τιμής του Υ αυτή τη φορά, στη διεύθυνση που φορτώθηκε. Αλγεβρικά, αν MEM είναι μονοδιάστατος πίνακας που απεικονίζει τη μνήμη, τότε η τελική διεύθυνση προσπέλασης για καθεμία από τις διευθυνσιοδοτήσεις θα είναι: Δ, ΜΕΜ[Δ], Δ+Χ, ΜΕΜ[Δ+Χ], ΜΕΜ[Δ]+Υ, ΜΕΜ[Δ+Χ]+Υ, με τη σειρά που τις δώσαμε παραπάνω. Σε κάθε μέθοδο διευθυνσιοδότησης, η τελική διεύθυνση μνήμης χρησιμοποιείται ανάλογα με την εντολή. Αν για παράδειγμα η εντολή είναι εντολή φόρτωσης, η διεύθυνση αυτή στέλνεται στη μνήμη για τη φόρτωση κάποιου δεδομένου, ενώ αν είναι εντολή άλματος, η διεύθυνση αυτή στέλνεται στο μετρητή προγράμματος. Ο κώδικας που θέλουμε να γράψουμε στην παρούσα άσκηση μεταφέρει δεδομένα από μια δομή σε κάποια άλλη. Σε μορφή γλώσσας C η πρώτη δομή, η Α, είναι δηλωμένη ως: char * A[M]; και η δεύτερη, η Β, ως: char B[N]; Επομένως ο κώδικάς μας θα πρέπει να διατρέχει την πρώτη δομή, τόσο κατά μήκος του πίνακα Α, όσο και κατά μήκος των ορμαθών (strings) που αυτός έμμεσα περιέχει. Η δεύτερη δομή διατρέχεται κατά μήκος του πίνακα Β. Για να διαβάσουμε τους αποθηκευμένους χαρακτήρες της πρώτης δομής, χρειαζόμαστε ένα διπλό βρόχο, στον οποίο η πρώτη μεταβλητή δείκτης αποτελεί δείκτη στον πίνακα Α, και η δεύτερη μεταβλητή δείκτης αποτελεί δείκτη σε κάθε επιμέρους ορμαθό. Έτσι, η κεντρική λειτουργία που θέλουμε να υλοποιήσουμε μπορεί να γραφτεί ως: B[k] = *(A[i]+j) ή αλλιώς: *(B+k) = *(*(A+i)+j) όπου ο δείκτης i αναφέρεται στον πίνακα Α, ο δείκτης k αναφέρεται στον πίνακα Β, ενώ ο δείκτης j αναφέρεται στον ορμαθό χαρακτήρων που αρχίζει στη διεύθυνση A[i]. Επειδή η ανάγνωση ενός χαρακτήρα γίνεται με πρόσθεση του δείκτη i με τη διεύθυνση βάσης Α, ανάγνωση της διεύθυνσης του αντίστοιχου ορμαθού, πρόσθεση του δείκτη j στη διεύθυνση που διαβάστηκε, και τελική ανάγνωση από τη διεύθυνση που υπολογίσαμε, διαπιστώνουμε ότι η τελευταία από τις μεθόδους διευθυνσιοδότησης που υποστηρίζει η αρχιτεκτονική μας

13 13 είναι η ιδανική για την ανάγνωση αυτή, με χρήση του καταχωρητή X για τον i, και του καταχωρητή Υ για τον j. Για την αποθήκευση των χαρακτήρων στη δεύτερη δομή, αρκεί απλή δεικτοδοτούμενη διευθυνσιοδότηση, με την πρόσθεση του δείκτη k στη διεύθυνση βάσης Β. Παρατηρούμε μάλιστα ότι ο δείκτης k μας δίνει και τον αριθμό χαρακτήρων που μεταφέρονται. Επομένως, δε χρειάζεται ξεχωριστός υπολογισμός για το σκοπό αυτό. Για να υλοποιήσουμε τον κώδικα σύμφωνα με τα παραπάνω, παρατηρούμε ακόμα τα εξής: - Οι δομές που έχουμε απαιτούν συνολικά τρεις δείκτες, ενώ η αρχιτεκτονική μας παρέχει δύο καταχωρητές. Θα πρέπει έτσι να επιλέξουμε έναν από τους δύο καταχωρητές Χ και Υ να υλοποιεί δύο δείκτες, το οποίο σημαίνει ότι οι τιμές αυτών των δεικτών θα πρέπει να αποθηκεύονται προσωρινά, ώστε οι ρόλοι τους να εναλλάσσονται. Εφ όσον και οι τρεις δείκτες του κώδικα χρησιμοποιούνται σε κάθε επανάληψη του διπλού βρόχου, δεν έχει σημασία ποιοι δύο δείκτες θα εναλλάσσονται. Επειδή ο δείκτης στον πίνακα Β θέλουμε ούτως ή άλλως να αποθηκεύεται στη διεύθυνση Κ, ώστε αυτή να περιέχει τον αριθμό χαρακτήρων που έχουν μεταφερθεί σε κάθε επανάληψη, θα εναλλάσσουμε αυτόν με έναν από τους άλλους δύο, έστω το δείκτη στον πίνακα Α. Ο καταχωρητής που θα χρησιμοποιήσουμε για τους δύο δείκτες θα είναι ο Χ, μια που η διευθυνσιοδότηση για την ανάγνωση των χαρακτήρων επιβάλλει αυτόν τον καταχωρητή για την πρώτη δεικτοδότηση. Υποθέτουμε ότι η προσωρινή αποθήκευση του δείκτη στον πίνακα Α θα γίνεται στη διεύθυνση I. - Πριν γίνει η ανάγνωση του πρώτου χαρακτήρα κάθε ορμαθού, διαβάζεται η διεύθυνση του ορμαθού, ώστε να εξεταστεί αν αυτή είναι μηδενική, οπότε ο κώδικας θα πρέπει να τερματίζεται. Η ανάγνωση της διεύθυνσης γίνεται με απλή δεικτοδοτούμενη διευθυνσιοδότηση, στην οποία θα συμμετέχουν η διεύθυνση Α και ο καταχωρητής Χ. - Η διαδοχική ανάγνωση χαρακτήρων από έναν ορμαθό και αντίστοιχη αποθήκευση στον πίνακα Β τερματίζεται με μηδενικό χαρακτήρα. Επειδή ο μηδενικός χαρακτήρας αποθηκεύεται ως χαρακτήρας αλλαγής γραμμής, ο έλεγχος θα γίνεται πριν την αποθήκευση, ώστε ο κώδικας να εκτελεί άλμα σε σημείο που φορτώνει στο συσσωρευτή το χαρακτήρα \n, πριν κάνει την αποθήκευση. Μετά την αποθήκευση του χαρακτήρα αυτού, ο εσωτερικός βρόχος τερματίζεται. - Εφ όσον οι σταθερές Μ και Ν είναι μη μηδενικές, ο έλεγχος των δεικτών με αυτές τις τιμές μπορεί να γίνεται στο τέλος των βρόχων. Αν ένας από τους δείκτες λάβει την αντίστοιχη οριακή τιμή, ο κώδικας τερματίζεται. Ειδικότερα, για τη σταθερά Μ που αναφέρεται στον πίνακα Α, η οριακή τιμή που θα χρησιμοποιήσουμε θα είναι η 4*Μ, συμβολικά Μ4, επειδή η μετάβαση από ένα στοιχείο του Α στο επόμενο γίνεται με αύξηση του δείκτη κατά 4, λόγω του μεγέθους που έχουν οι διευθύνσεις στην αρχιτεκτονική μας. Με βάση τα παραπάνω, ο ζητούμενος κώδικας δίνεται στην επόμενη σελίδα. Τελειώνοντας, αξίζει να σημειωθεί ότι αν γράφαμε τον ίδιο κώδικα για μια αρχιτεκτονική RISC, όπως για παράδειγμα την αρχιτεκτονική φόρτωσης-αποθήκευσης MIPS, θα προέκυπταν από τη μία περισσότερες εντολές για την προσπέλαση των πινάκων και των ορμαθών, επειδή θα είχαμε απλούστερη διευθυνσιοδότηση μνήμης κι επομένως πολλαπλές εντολές RISC για κάθε προσπέλαση με συνδυασμένη έμμεση και δεικτοδοτούμενη διευθυνσιοδότηση, αλλά από την άλλη λιγότερες συνολικές προσπελάσεις μνήμης, επειδή θα είχαμε καταχωρητές για προσωρινή αποθήκευση των δεικτών που τώρα αποθηκεύουμε στη μνήμη. Έτσι, παρά το ίσως μικρότερο μέγεθός του, ένας κώδικας CISC όπως ο κώδικας αρχιτεκτονικής συσσωρευτή καταλήγει να είναι αρκετά πιο αργός από τον ίδιο κώδικα RISC, πρώτον επειδή οι εντολές RISC είναι απλούστερες, ομοιόμορφες, και εκτελούνται γρηγορότερα, αλλά και δεύτερον επειδή η εκτενής χρήση καταχωρητών γενικού σκοπού μειώνει σημαντικά τον α- ριθμό προσπελάσεων μνήμης, οι οποίες αποτελούν τη σημαντικότερη επιβάρυνση στο χρόνο εκτέλεσης του κώδικα.

14 14 Κώδικας Load #0 Store Κ LdX #0 Loop1: Load A,X Beqz End1 LdY #0 Loop2: Load (A,X),Y StX I LdX Κ Beqz End2 Store B,X IncX StX Κ CmpX #N Beq End1 LdX I IncY Jmp Loop2 End2: Load \n Store B,X IncX StX Κ CmpX #N Beq End1 LdX I IncX IncX IncX IncX CmpX #M4 Bne Loop1 End1: Σχόλια Αρχικοποίηση του Κ Ανάγνωση διεύθυνσης από τον πίνακα Α Έλεγχος μηδενικής τιμής και τερματισμός Ανάγνωση χαρακτήρα Προσωρινή αποθήκευση του Χ Φόρτωση του Κ στον Χ Έλεγχος μηδενικού χαρακτήρα με κατάλληλο άλμα Αποθήκευση χαρακτήρα στον πίνακα Β Αύξηση κατά 1 του δείκτη στον πίνακα Β Αποθήκευση του Χ στο Κ Σύγκριση του Χ με τη σταθερά Ν Σε περίπτωση ισότητας, τερματισμός Επαναφορά της αποθηκευμένης τιμής του Χ Αύξηση κατά 1 του δείκτη στον ορμαθό Επόμενη επανάληψη του εσωτερικού βρόχου Φόρτωση στον Σ του χαρακτήρα \n Αποθήκευση χαρακτήρα στον πίνακα Β Αύξηση κατά 1 του δείκτη στον πίνακα Β Αποθήκευση του Χ στο Κ Σύγκριση του Χ με τη σταθερά Ν Σε περίπτωση ισότητας, τερματισμός Επαναφορά της αποθηκευμένης τιμής του Χ Αύξηση κατά 4 του δείκτη στον πίνακα Α Σύγκριση του Χ με τη σταθερά Μ4 Σε περίπτωση ανισότητας, επόμενη επανάληψη Άσκηση 3: Θεωρήστε τη συμβολική γλώσσα της αρχιτεκτονικής φόρτωσης-αποθήκευσης MIPS. Υποθέστε ότι ο καταχωρητής $sp περιέχει το δείκτη στη στοίβα κι ότι ο καταχωρητής $ra αποθηκεύει τη διεύθυνση επανόδου από υποπρόγραμμα 3. Ακόμα υποθέστε ότι οι καταχωρητές $4-7 χρησιμοποιούνται για το πέρασμα παραμέτρων σε υποπρόγραμμα κι ότι οι καταχωρητές $16-23 πρέπει να διατηρούν το περιεχόμενό τους κατά την κλήση υποπρογράμματος. Γράψτε τον κώδικα συμβολικής γλώσσας που υλοποιεί τον παρακάτω κώδικα C: foo1 (int v[], int n) { int i, j; for (i = 0; i < n; i = i+1) { for (j = i-1; j >= 0 && v[j] > v[j+1]; j = j-1) foo2(v, j); } } Απάντηση: 3 $sp και $ra είναι τα συμβολικά ονόματα των καταχωρητών $29 και $31 αντίστοιχα.

15 15 Στην άσκηση αυτή θέλουμε να βρούμε τον κώδικα συμβολικής γλώσσας της αρχιτεκτονικής MIPS που υλοποιεί το υποπρόγραμμα foo1 το οποίο καλεί ένα άλλο υποπρόγραμμα foo2. Κάθε φορά που ξεκινάμε ένα υποπρόγραμμα, είναι πιθανό να χρειαστεί να προσπελάσουμε τη στοίβα για αποθήκευση δεδομένων από καταχωρητές που θέλουμε να χρησιμοποιήσουμε σε αυτό. Για παράδειγμα, αν θέλουμε να χρησιμοποιήσουμε έναν από τους καταχωρητές $16-23, το περιεχόμενο των οποίων πρέπει να διατηρείται κατά την κλήση του υποπρογράμματος, πρέπει να ξεκινήσουμε το υποπρόγραμμα με αποθήκευση της τιμής του στη στοίβα. Πριν την έξοδο από το υποπρόγραμμα, επαναφέρουμε την τιμή αυτή πίσω στον καταχωρητή. Γενικά, χρησιμοποιούμε τη στοίβα για προσωρινή αποθήκευση δεδομένων που δε μπορούμε να διατηρούμε σε καταχωρητές. Ο συνολικός χώρος που κάποιο υποπρόγραμμα καταλαμβάνει στη στοίβα πρέπει να λαμβάνεται υπ όψη, εάν αυτό καλεί άλλο υποπρόγραμμα. Πριν από μια φωλιασμένη κλήση, είναι απαραίτητο να διορθώσουμε τον καταχωρητή $sp κατάλληλα, ώστε να δείχνει στην επόμενη ελεύθερη διεύθυνση της στοίβας. Βέβαια, δε μπορούμε να γράψουμε τον κώδικα που υλοποιεί τα παραπάνω, πριν αποκτήσουμε μια καθολική εικόνα του υποπρογράμματος, ώστε να ξέρουμε πόσες και ποιες τιμές πρέπει να αποθηκευτούν στη στοίβα, γι αυτό και συνεχίζουμε με το σώμα του, κι αφήνουμε για το τέλος την προσθήκη όποιων εντολών αναφέρονται στη στοίβα. Το υποπρόγραμμα foo1 χρησιμοποιεί δύο παραμέτρους, οι οποίες με το ξεκίνημα του υποπρογράμματος βρίσκονται στους καταχωρητές $4 και $5. Έτσι ο πρώτος από τους δύο καταχωρητές περιέχει τη διεύθυνση στη μνήμη όπου αρχίζει το διάνυσμα v, ενώ ο δεύτερος περιέχει την τιμή του n. Ακόμα, το υποπρόγραμμα foo1 χρησιμοποιεί δύο τοπικές μεταβλητές που επιλέγουμε να τοποθετήσουμε στους καταχωρητές $16 και $17. Αρχίζουμε με τον εξωτερικό βρόχο που αντιστοιχεί στην πρώτη εντολή for. Η αρχικοποίηση της μεταβλητής i γίνεται με την εντολή: move 4 $16, $0 Υπενθυμίζεται ότι ο καταχωρητής $0 περιέχει μόνιμα την τιμή 0. Στη συνέχεια θα πρέπει να εισάγουμε τον κώδικα ελέγχου τερματισμού του βρόχου, και στο τέλος του σώματος του βρόχου τον κώδικα αύξησης του i, καθώς και μια εντολή άλματος προς την αρχή του σώματος του βρόχου: For1: slt $8, $16, $5 beq $8, $0, Exit1 addi $16, $16, 1 j For1 Exit1: Ο καταχωρητής $8 χρησιμοποιείται σαν προσωρινός χώρος αποθήκευσης του αποτελέσματος της σύγκρισης του i με το n. Με παρόμοιο τρόπο εισάγουμε στο σώμα του εξωτερικού βρόχου τις εντολές ελέγχου του εσωτερικού βρόχου. Τώρα όμως η συνθήκη τερματισμού του βρόχου δεν είναι απλή. Επειδή 4 Η εντολή move είναι ψευδοεντολή, δηλαδή δεν αντιστοιχεί σε πραγματική εντολή της γλώσσας μηχανής της αρχιτεκτονικής MIPS, και χρησιμοποιείται αντί του λιγότερο προφανούς: ori $16, $0, 0 που έχει το ίδιο ακριβώς αποτέλεσμα. Η χρήση ψευδοεντολών διευκολύνει τη συγγραφή προγραμμάτων σε συμβολική γλώσσα, εάν υποστηρίζεται από το συμβολομεταφραστή που θα μετατρέψει το πρόγραμμα σε γλώσσα μηχανής. Ως ψευδοεντολές νοούνται και πραγματικές εντολές με ψευδοσύνταξη, όπως για παράδειγμα οι εντολές προσπέλασης μνήμης χωρίς μετατόπιση ή με καταχωρητή στη θέση της μετατόπισης. Κάθε ψευδοεντολή πρέπει να είναι πλήρως ορισμένη μέσω μιας ή περισσότερων πραγματικών εντολών όταν χρησιμοποιείται. Η τελική γλώσσα μηχανής που λαμβάνεται από το συμβολομεταφραστή αποτελείται μόνο από πραγματικές εντολές MIPS!

16 16 αυτή βρίσκεται με ένα λογικό γινόμενο, πρέπει να ελέγξουμε τον πρώτο όρο του γινομένου, κι αν αυτός έχει τιμή 0 (ψευδής), τότε εκτελούμε άλμα στην έξοδο του βρόχου 5. Στη συνέχεια ελέγχουμε το δεύτερο όρο του γινομένου κι αντίστοιχα εισάγουμε μια εντολή άλματος υπό τη συνθήκη ότι αυτός έχει τιμή 0 (ψευδής). Για να ελέγξουμε το δεύτερο όρο, διαβάζουμε από τη μνήμη τις μεταβλητές v[j] και v[j+1], χρησιμοποιώντας σα διεύθυνση προσπέλασης το άθροισμα της αρχικής διεύθυνσης του διανύσματος με την τιμή του j πολλαπλασιασμένη επί 4. Η δεύτερη μεταβλητή διαβάζεται με την ίδια διεύθυνση προσπέλασης, μετατοπισμένη κατά 4. Έτσι ο κώδικας ελέγχου του εσωτερικού βρόχου είναι: addi $17, $16, -1 For2: slt $8, $17, $0 bne $8, $0, Exit2 sll $9, $17, 2 add $10, $4, $9 lw $11, 0($10) lw $12, 4($10) slt $8, $12, $11 beq $8, $0, Exit2 addi $17, $17, -1 j For2 Exit2: Το σώμα του εσωτερικού βρόχου περιέχει μόνο την κλήση του υποπρογράμματος foo2. Για να γράψουμε τον κώδικα της κλήσης πρέπει να περάσουμε τις αντίστοιχες παραμέτρους στο υποπρόγραμμα. Όμως, επειδή οι παράμετροι περνάνε πάντα μέσω των καταχωρητών $4-7, θα πρέπει να σώσουμε τις τιμές των $4 και $5 που χρησιμοποιούμε στο υποπρόγραμμα foo1. Για το σκοπό αυτό χρησιμοποιούμε δύο ακόμα καταχωρητές (αντί για θέσεις μνήμης στη στοίβα που επίσης θα μπορούσαμε να χρησιμοποιήσουμε), τους $18 και $19. Αντί δε να σώσουμε τις τιμές πριν από την κλήση και μετά να τις επαναφέρουμε, είναι καλύτερα να τις σώσουμε στην αρχή του foo1, και να χρησιμοποιούμε τους καταχωρητές $18 και $19 εκεί που μέχρι τώρα χρησιμοποιήσαμε τους $4 και $5. Η κλήση στο υποπρόγραμμα foo2 θα γίνει ως εξής: move $4, $18 move $5, $17 jal foo2 Τελειώσαμε έτσι με το σώμα του υποπρογράμματος foo1. Γυρνώντας πάλι στην αρχή του κώδικα, βλέπουμε ότι έχουμε χρησιμοποιήσει 4 από τους καταχωρητές $16-23, την αρχική τιμή των οποίων πρέπει να σώσουμε στη στοίβα, και στο τέλος να την επαναφέρουμε, ώστε να είναι πάλι διαθέσιμη με την έξοδο από το foo1. Επίσης, με την κλήση του foo2 χάνουμε την αρχική τιμή του $ra, που χρειαζόμαστε απαραιτήτως για την έξοδο από το foo1. Επομένως, πρέπει να σώσουμε τις τιμές συνολικά 5 καταχωρητών στη στοίβα, γι αυτό και θα μειώσου-με και στο τέλος θα αυξήσουμε την τιμή του δείκτη στοίβας $sp κατά 5 λέξεις (20 bytes). Ο συνολικός κώδικας του υποπρογράμματος foo1 δίνεται στην επόμενη σελίδα. 5 Με αυτόν τον τρόπο υλοποιείται η απαιτούμενη από τη γλώσσα C βραχυκύκλωση στην αποτίμηση λογικών εκφράσεων: Αν ο πρώτος όρος αρκεί για την αποτίμηση της έκφρασης, τότε δεν αποτιμάται η υπόλοιπη έκφραση αν στη συνέχεια ο δεύτερος όρος αρκεί για την αποτίμηση της έκφρασης, τότε δεν αποτιμάται η υπόλοιπη έκφραση, κ.ο.κ. Έτσι, σε λογικά γινόμενα ελέγχουμε για τιμή 0 (ψευδής), αφού 0 && x = 0, ενώ σε λογικά αθροίσματα ελέγχουμε για τιμή 1 (αληθής), αφού 1 x = 1, για οποιαδήποτε τιμή του x. Σε κάθε περίπτωση, η αποτίμηση μιας έκφρασης και άρα η αρίθμηση των όρων της νοείται από αριστερά προς τα δεξιά. Αν για τη μετάφραση σε γλώσσα MIPS είχαμε ξεκινήσει από γλώσσα υψηλού επιπέδου που δεν υποστηρίζει βραχυκύκλωση, τότε θα έπρεπε να δώσουμε διαφορετικό κώδικα MIPS, ο οποίος να αποτιμά υποχρεωτικά όλους τους όρους της έκφρασης.

17 17 Κώδικας Περιγραφή foo1: addi $sp, $sp, -20 η στοίβα αυξάνεται προς τα κάτω! sw $ra, 16($sp) αποθήκευσε τον $ra στη θέση $sp+16 sw $19, 12($sp) αποθήκευσε τον $19 στη θέση $sp+12 sw $18, 8($sp) αποθήκευσε τον $18 στη θέση $sp+8 sw $17, 4($sp) αποθήκευσε τον $17 στη θέση $sp+4 sw $16, 0($sp) αποθήκευσε τον $16 στη θέση $sp+0 move $18, $4 σώσε το περιεχόμενο του $4 στον $18 move $19, $5 σώσε το περιεχόμενο του $5 στον $19 move $16, $0 i = 0 For1: slt $8, $16, $19 $8 = i < n beq $8, $0, Exit1 if not $8 goto Exit1 addi $17, $16, -1 j = i - 1 For2: slt $8, $17, $0 $8 = j < 0 bne $8, $0, Exit2 if $8 goto Exit2 sll $9, $17, 2 $9 = j * 4 add $10, $18, $9 $10 = διεύθυνση (v[j]) lw $11, 0($10) $11 = v[j] lw $12, 4($10) $12 = v[j+1] slt $8, $12, $11 $8 = v[j] > v[j+1] beq $8, $0, Exit2 if not $8 goto Exit2 move $4, $18 1η παράμετρος του foo2 move $5, $17 2η παράμετρος του foo2 jal foo2 κάλεσε το foo2, $ra = διεύθυνση επανόδου addi $17, $17, -1 j = j - 1 j For2 goto For2 Exit2: addi $16, $16, 1 i = i + 1 j For1 goto For1 Exit1: lw $16, 0($sp) φόρτωσε τον $16 lw $17, 4($sp) φόρτωσε τον $17 lw $18, 8($sp) φόρτωσε τον $18 lw $19, 12($sp) φόρτωσε τον $19 lw $ra, 16($sp) φόρτωσε τον $ra addi $sp, $sp, 20 επανάφερε τον $sp στην αρχική του τιμή jr $ra επέστρεψε! Άσκηση 4: Θεωρήστε τον πιο κάτω κώδικα δύο συναρτήσεων σε γλώσσα C, από τις οποίες η πρώτη καλεί τη δεύτερη, και η δεύτερη καλεί αναδρομικά τον εαυτό της: int foo1 (int n, char* a, int** x) { int i, y; y = 0; for (i = 0; i < n; i++) { if (a[i] == '\0') y += foo2(i, x[i]); else y++; } return y; } int foo2 (int n, int* l) { if (n > 0) return l[foo2(n-1, l+1)]; else return l[0]; }

18 18 Α. Παρατηρώντας τον κώδικα στη γλώσσα C, εξηγήστε ποιες μεταβλητές της κάθε συνάρτησης πρέπει να διατηρούν την τιμή τους μέσα από την κλήση υποπρογράμματος που υπάρχει στο σώμα της συνάρτησης. Β. Να μετατρέψετε τον κώδικα σε συμβολική γλώσσα αρχιτεκτονικής MIPS. Υποθέστε ότι ο καταχωρητής $sp περιέχει το δείκτη στη στοίβα κι ότι ο καταχωρητής $ra αποθηκεύει τη διεύθυνση επανόδου από υποπρόγραμμα. Ακόμα υποθέστε ότι οι καταχωρητές $a0-a3 χρησιμοποιούνται για το πέρασμα των παραμέτρων στις συναρτήσεις κι ότι οι καταχωρητές $s0-s8 πρέπει να διατηρούν το περιεχόμενό τους κατά την κλήση ενός υποπρογράμματος. Οι καταχωρητές γενικού σκοπού που δεν είναι απαραίτητο να διατηρούν το περιεχόμενό τους μέσα από ένα υποπρόγραμμα αναφέρονται συμβολικά ως $t0-t9. Ο καταχωρητής που επιστρέφει την τιμή μιας συνάρτησης στο καλούν περιβάλλον είναι ο $v0 6. Γ. Έχοντας εξασφαλίσει τη διατήρηση των περιεχομένων των καταχωρητών που χρειάζεστε μέσα από τις κλήσεις των συναρτήσεων foo1 και foo2, δείξτε σχηματικά τη μορφή της στοίβας από τη θέση που δείχνει ο $sp τη στιγμή της κλήσης της foo1 μέχρι τη θέση που δείχνει ο $sp τη στιγμή δεύτερης εξόδου από τη foo2 μετά από την κλήση της foo1. Το στιγμιότυπο της στοίβας λαμβάνεται την παραπάνω στιγμή εξόδου από την foo2. Υποθέστε ότι η συνθήκη (a[i] == '\0') είναι για πρώτη φορά αληθής όταν ο δείκτης i έχει τιμή 5. Δ. Εξηγήστε τι θα συμβεί κατά την εκτέλεση του κώδικά σας, εάν δε διατηρήσετε την τιμή του $ra (i) στον κώδικα της foo1 μέσα από την κλήση της foo2, και (ii) στον κώδικα της foo2 μέσα από την αναδρομική κλήση του εαυτού της. Απάντηση: Α. Η συνάρτηση foo1 περιέχει 5 μεταβλητές, από τις οποίες οι 3 είναι οι παράμετροί της n, a και x, ενώ οι υπόλοιπες 2 είναι οι i και y. Το σώμα της συνάρτησης αυτής περιέχει ένα βρόχο, στο σώμα του οποίου υπάρχει κλήση στην foo2. Παρατηρούμε ότι κάθε επανάληψη του βρόχου χρειάζεται και τις 5 μεταβλητές: Η παράμετρος n είναι απαραίτητη για τον έλεγχο τερματισμού του βρόχου, η παράμετρος a είναι απαραίτητη για την αποτίμηση της συνθήκης της εντολής if, η παράμετρος x είναι απαραίτητη για την κλήση της foo2, η μεταβλητή i είναι η μεταβλητή-δείκτης του βρόχου, ενώ η μεταβλητή y προσθέτει τα ενδιάμεσα αποτελέσματα των επαναλήψεων του βρόχου και επιστρέφει το άθροισμα στο καλούν περιβάλλον. Συνεπώς όλες οι μεταβλητές της foo1 πρέπει να διατηρούν την τιμή τους μέσα από την κλήση της συνάρτησης foo2. Από την άλλη μεριά, η συνάρτηση foo2 περιέχει 2 μεταβλητές, τις παραμέτρους n και l. Παρατηρούμε ότι η παράμετρος n δε χρησιμοποιείται μετά την αναδρομική κλήση της foo2, σε αντίθεση με την l, η οποία χρησιμοποιείται για την εύρεση της τελικής διεύθυνσης προσπέλασης του διανύσματος που αυτή παριστάνει. Έτσι, ενώ η πρώτη παράμετρος δεν είναι απαραίτητο να διατηρεί την τιμή της μέσα από την αναδρομική κλήση, η δεύτερη παράμετρος είναι απαραίτητο να τη διατηρεί. Β. Υπάρχουν δύο τρόποι διατήρησης του περιεχομένου μιας μεταβλητής διαμέσου μιας κλήσης σε υποπρόγραμμα: Ο ένας είναι με απ ευθείας αποθήκευση στη στοίβα πριν από την κλήση, και στη συνέχεια με φόρτωση από τη στοίβα μετά την κλήση, της τιμής της μεταβλητής. Ο άλλος είναι μέσω ενός από τους καταχωρητές $s0-s8 που διατηρούν την τιμή τους υ- ποχρεωτικά μέσα από την κλήση 7, με μεταφορά της τιμής της μεταβλητής στον καταχωρητή αυτόν πριν από την κλήση. 6 Υπάρχει μια 1-1 αντιστοίχηση συμβολικών και πραγματικών καταχωρητών. Για παράδειγμα, οι καταχωρητές $4-7 αναφέρονται συμβολικά ως $a0-a3. Η γνώση της ακριβούς αντιστοίχησης δεν είναι απαραίτητη για την κατανόηση της άσκησης, εκτός από την αντιστοίχηση του καταχωρητή $zero στον $0 που έχει προκαθορισμένη τιμή 0, και του $ra στον $31 που χρησιμοποιείται ως υπονοούμενο τελούμενο από την εντολή jal. 7 Η διατήρηση του περιεχομένου των καταχωρητών $s0-s8 μέσα από ένα υποπρόγραμμα δεν είναι χαρακτηριστικό της αρχιτεκτονικής, δηλαδή δε γίνεται αυτόματα. Το περιεχόμενο διατηρείται μέσα από

19 19 Ο δεύτερος από τους παραπάνω τρόπους επιβαρύνεται με αποθήκευση στη στοίβα του αρχικού περιεχομένου του καταχωρητή και επαναφόρτωση του περιεχομένου αυτού όταν ο καταχωρητής δε θα είναι πλέον απαραίτητος για τη διατήρηση της τιμής της μεταβλητής. Παρά την επιβάρυνση αυτή, ο τρόπος αυτός είναι προτιμότερος, όταν η κλήση στο υποπρόγραμμα γίνεται μέσα σε κάποιο βρόχο, στον οποίο χρησιμοποιείται η εν λόγω μεταβλητή. Τότε, η προσπέλαση στη στοίβα μπορεί να γίνει έξω από το βρόχο αυτόν, μειώνοντας έτσι τις εντολές προσπέλασης μνήμης στο ελάχιστο δυνατό. Ο πρώτος τρόπος διατήρησης του περιεχομένου της μεταβλητής απαιτεί δύο προσπελάσεις μνήμης σε κάθε επανάληψη του βρόχου, γεγονός που μπορεί να οδηγήσει σε μη βέλτιστη επίδοση του κώδικα, επειδή κάθε εντολή προσπέλασης μνήμης ενέχει τον κίνδυνο αποτυχίας στην κρυφή μνήμη με σημαντική αύξηση του συνολικού χρόνου εκτέλεσής της. Λόγω της ύπαρξης του βρόχου στη συνάρτηση foo1, θα εφαρμόσουμε το δεύτερο τρόπο για τη διατήρηση της τιμής των μεταβλητών n, a, x, i και y. Έτσι, ο κώδικας σε συμβολική γλώσσα για τη συνάρτηση αυτή θα χρησιμοποιεί 5 καταχωρητές από τους $s0-s8 και αντίστοιχα 5 θέσεις στη στοίβα για αποθήκευση του αρχικού περιεχομένου αυτών. Αν λοιπόν χρησιμοποιήσουμε τους καταχωρητές $s0, $s1, $s2, $s3 και $s4 για τη διατήρηση της τιμής των μεταβλητών y, i, n, a και x αντίστοιχα, οι εντολές αρχικοποίησης αυτών στην αρχή της foo1 θα είναι: move $s0, $zero move $s1, $zero move $s2, $a0 move $s3, $a1 move $s4, $a2 δεδομένου ότι οι παράμετροι n, a και x της συνάρτησης foo1 περνάνε σε αυτή μέσω των καταχωρητών $a0, $a1 και $a2 αντίστοιχα. Μετά από τις εντολές αυτές, οι καταχωρητές $a0, $a1 και $a2 μπορούν να χρησιμοποιηθούν για προσωρινή αποθήκευση άλλων τιμών, ή για το πέρασμα των παραμέτρων στη συνάρτηση foo2. Οι εντολές προσπέλασης της στοίβας για αποθήκευση του αρχικού περιεχομένου των $s0-s5, μαζί με την εντολή κατάλληλης τροποποίησης της τιμής του $sp, θα συμπεριληφθούν στον τελικό κώδικα. Ο βρόχος που αντιστοιχεί στην εντολή for ξεκινάει με τον έλεγχο της συνθήκης τερματισμού, που υλοποιείται με τις ακόλουθες εντολές συμβολικής γλώσσας: Loop: slt $t0, $s1, $s2 beq $t0, $zero, Break όπου η διεύθυνση της ετικέτας Break θα καθοριστεί αργότερα. Η εντολή if περιλαμβάνει τον έλεγχο της συνθήκης άλματος (a[i] == '\0') που οδηγεί σε δύο κατευθύνσεις, από τις οποίες η πρώτη περιλαμβάνει την κλήση της συνάρτησης foo2. Για την αποτίμηση της συνθήκης άλματος διαβάζουμε από τη μνήμη το στοιχείο a[i] του διανύσματος a. Αυτό μπορεί να γίνει, είτε υπολογίζοντας κάθε φορά εκ νέου τη διεύθυνση του στοιχείου από την αρχική διεύθυνση του διανύσματος και την τιμή του δείκτη i, είτε διατηρώντας σε κάποιον καταχωρητή τη διεύθυνση του στοιχείου και προχωρώντας στο επόμενο στοιχείο με κατάλληλη αυξομείωση της τιμής του καταχωρητή αυτού. Ο δεύτερος τρόπος είναι πιο σύντομος, ενώ επειδή η αρχική διεύθυνση του a δε μας χρειάζεται μετά το βρόχο, μπορούμε να διατηρήσουμε τη διεύθυνση του στοιχείου a[i] στον καταχωρητή $s3, στον ο- ποίο έχουμε αποθηκεύσει την αρχική διεύθυνση του a. Με την ίδια λογική μπορούμε να χρησιμοποιήσουμε τον καταχωρητή $s4 για να διατηρήσουμε τη διεύθυνση του στοιχείου x[i] του διανύσματος x, την οποία χρειαζόμαστε για την κλήση της συνάρτησης foo2. Η κλήση της foo2 γίνεται αφού μεταφέρουμε τις τιμές των παραμέεντολές που παρεμβάλλονται κατάλληλα από το μεταγλωττιστή ή από τον προγραμματιστή συμβολικής γλώσσας, και οι οποίες χρησιμοποιούν τη στοίβα για προσωρινή αποθήκευση.

20 20 τρων της στους καταχωρητές $a0 και $a1, και αφού σώσουμε στη στοίβα το περιεχόμενο του καταχωρητή $ra, ο οποίος περιέχει τη διεύθυνση επανόδου από τη συνάρτηση foo1. Προκειμένου να αποφύγουμε την εντολή αποθήκευσης του $ra στη στοίβα σε κάθε επανάληψη του βρόχου, την εισάγουμε στην αρχή της foo1. Προφανώς η διεύθυνση επανόδου από την foo1 πρέπει να επαναφορτωθεί στον καταχωρητή $ra πριν την έξοδο από αυτήν. Η εντολή if στο σώμα του βρόχου ολοκληρώνεται με την πρόσθεση στη μεταβλητή y την οποία διατηρούμε στον καταχωρητή $s0 του αποτελέσματος της foo2 στη μια, ή της σταθεράς 1 στην άλλη κατεύθυνση της διακλάδωσης. Το αποτέλεσμα της foo2 λαμβάνεται από τον καταχωρητή $v0, όπου θα πρέπει αυτό να τοποθετείται μέσα από τον κώδικα της συνάρτησης foo2. Με βάση τα παραπάνω, ο κώδικας σε συμβολική γλώσσα που αντιστοιχεί στην εντολή if του αρχικού προγράμματος θα είναι ο εξής: lb $t1, 0($s3) bne $t1, $zero, Else move $a0, $s1 lw $a1, 0($s4) jal foo2 addu $s0, $s0, $v0 j Cont Else: addi $s0, $s0, 1 Ο κώδικας του βρόχου ολοκληρώνεται με την αύξηση του καταχωρητή-δείκτη κατά 1, του καταχωρητή που περιέχει τη διεύθυνση του a[i] κατά 1, και του καταχωρητή που περιέχει τη διεύθυνση του x[i] κατά 4: Cont: addi $s1, $s1, 1 addi $s3, $s3, 1 addi $s4, $s4, 4 j Loop Ο κώδικας της συνάρτησης foo1 ολοκληρώνεται από τη διεύθυνση Break με τη μεταφορά της τιμής της μεταβλητής y στον καταχωρητή $v0, ώστε αυτή να επιστραφεί στο καλούν περιβάλλον, την επαναφόρτωση από τη στοίβα των αποθηκευμένων τιμών των καταχωρητών $s0- s4 και $ra, τη διόρθωση του καταχωρητή $sp στην τιμή που είχε πριν την είσοδο στην foo1, και τέλος την έξοδο από τη foo1. Η συνάρτηση foo2 δεν περιέχει κάποιο βρόχο, κι επομένως η διατήρηση της τιμής της παραμέτρου l μπορεί να γίνει με απ ευθείας αποθήκευση αυτής στη στοίβα αμέσως πριν την αναδρομική κλήση. Η μόνη άλλη τιμή που πρέπει να αποθηκευτεί στη στοίβα είναι η τιμή του $ra που περιέχει τη διεύθυνση επανόδου. Επειδή η χρήση της στοίβας περιορίζεται στην περίπτωση που η αποτίμηση της συνθήκης (n>0) δώσει αποτέλεσμα αληθές, μπορούμε να ξεκινήσουμε τον κώδικα της foo2 με τις εντολές που απαιτούνται για την αποτίμηση της συνθήκης και την κατεύθυνση της διακλάδωσης που αντιστοιχεί σε αποτέλεσμα ψευδές: foo2: bgtz $a0, Then lw $v0, 0($a1) jr $ra όπου υποθέσαμε ότι οι παράμετροι της foo2 λαμβάνονται από τους καταχωρητές $a0 και $a1, ενώ το αποτέλεσμά της επιστρέφεται μέσω του καταχωρητή $v0. Η κατεύθυνση της διακλάδωσης που περιέχει την αναδρομική κλήση της foo2 περιλαμβάνει τις εντολές χειρισμού της στοίβας, τις εντολές υπολογισμού των παραμέτρων της κλήσης, την εντολή της κλήσης, τις εντολές υπολογισμού της τιμής του αποτελέσματος της foo2 που επιστρέφεται στο καλούν περιβάλλον, και την εντολή εξόδου από την foo2. Πιο αναλυτικά, οι εντολές υπολογισμού των παραμέτρων της κλήσης, καθώς και η εντολή κλήσης, θα είναι οι εξής: addi $a0, $a0, -1 addi $a1, $a1, 4

21 21 jal foo2 όπου η παράσταση l+1 μεταφράστηκε με αύξηση κατά 4, επειδή η μεταβλητή l είναι τύπου δείκτη ακεραίων. Οι εντολές υπολογισμού του αποτελέσματος της foo2 από το αποτέλεσμα της αναδρομικής κλήσης, υποθέτοντας ότι η μεταβλητή l έχει διαβαστεί από τη στοίβα στον καταχωρητή $a1, θα είναι: sll $t0, $v0, 2 addu $t0, $t0, $a1 lw $v0, 0($t0) όπου με την εντολή ολίσθησης πολλαπλασιάζουμε το αποτέλεσμα της αναδρομικής κλήσης που αποτελεί δείκτη στο διάνυσμα l επί 4, ώστε να πάρουμε τη σχετική διεύθυνση στο διάνυσμα αυτό, στην οποία θα βρούμε το στοιχείο που θα επιστρέψουμε στο καλούν περιβάλλον. Η απόλυτη διεύθυνση του στοιχείου βρίσκεται προσθέτοντας σε αυτήν την αρχική διεύθυνση του l. Ο συνολικός κώδικας των δύο συναρτήσεων foo1 και foo2, συμπεριλαμβανομένων των εντολών χειρισμού της στοίβας, δίνεται στην επόμενη σελίδα. Πρέπει να σημειωθεί ότι υπάρχουν πολλοί διαφορετικοί τρόποι μετάφρασης του αρχικού κώδικα σε συμβολική γλώσσα. Η επιλογή συμβολικών εντολών, η επιλογή καταχωρητών, καθώς και η τελική συγγραφή του κώδικα συμβολικής γλώσσας, γίνονται με σκοπό τη βέλτιστη παραγωγή κώδικα μηχανής. Ανάλογα με τα χαρακτηριστικά της κάθε αρχιτεκτονικής, στην ο- ποία απευθύνεται η μετάφραση, διαφοροποιείται και η μεθοδολογία που ακολουθείται για κάθε μία από τις περιοχές αυτές, ενώ για την ίδια αρχιτεκτονική κάθε μεταγλωττιστής ή προγραμματιστής συμβολικής γλώσσας ακολουθεί τις δικές του συμβάσεις μετάφρασης. Τέλος, είναι σημαντικό να κατανοήσουμε ότι η αρχιτεκτονική δεν έχει αντίληψη του προγράμματος που δίνεται για εκτέλεση. Ο επεξεργαστής εκτελεί εντολές, τη μία μετά την άλλη, οι οποίες χειρίζονται κάποια δεδομένα που περιέχονται σε καταχωρητές ή στη μνήμη. Οι μόνες περιπτώσεις που ο επεξεργαστής αντιλαμβάνεται συνδέσεις μεταξύ διαδοχικών εντολών είναι αυτές που σχετίζονται με εξαρτήσεις σε καταχωρητές και εντολές διακλαδώσεων. Από εκεί και πέρα, ο επεξεργαστής δεν ξέρει τι κάνει το πρόγραμμα συμβολικής γλώσσας σε σχέση με το αρχικό πρόγραμμα σε γλώσσα υψηλού επιπέδου, και είναι θέμα προγραμματισμού και μόνο το πώς θα υλοποιηθούν οι προγραμματιστικές δομές σε συμβολική γλώσσα, όπως για παράδειγμα οι βρόχοι και οι κλήσεις υποπρογραμμάτων. Γ. Αμέσως πριν την κλήση της συνάρτησης foo1, ο καταχωρητής $sp περιέχει κάποια διεύθυνση στη στοίβα, έστω SP0. Με την πρώτη εντολή της foo1 ο $sp μειώνεται κατά 24 ψηφιολέξεις, που αντιστοιχούν σε 6 θέσεις καταχωρητών μεγέθους 32 bits. Όπως βλέπουμε στον κώδικα, οι 6 αυτές θέσεις καταλαμβάνονται από πάνω προς τα κάτω από τα περιεχόμενα των καταχωρητών $s4, $s3, $s2, $s1, $s0 και $ra. Οι τιμές των καταχωρητών $s0-s4 τη στιγμή αυτή μας είναι άγνωστες, και δεν αφορούν την foo1, ενώ η τιμή που περιέχει ο $ra είναι η διεύθυνση επανόδου στο καλούν περιβάλλον. Μετά τις εντολές αποθήκευσης στη στοίβα και αρχικοποίησης των καταχωρητών που χρησιμοποιεί η foo1 για όσους αυτό είναι απαραίτητο, εκτελείται ο βρόχος που ξεκινάει στη διεύθυνση Loop. Όταν η μεταβλητή-δείκτης i του βρόχου λάβει τιμή 5, θα κληθεί η συνάρτηση foo2, με παραμέτρους 5 και x[5]. Επειδή η πρώτη παράμετρος της foo2 έχει τιμή 5, ο κώδικας της συνάρτησης αυτής θα μας οδηγήσει στη διεύθυνση Then, στην οποία θα μειωθεί ο $sp κατά 8 ψηφιολέξεις, δηλαδή 2 θέσεις καταχωρητών. Με τις επόμενες δύο εντολές αποθηκεύονται στις θέσεις αυτές της στοίβας τα περιεχόμενα των καταχωρητών $ra και $a1, από τα οποία το πρώτο είναι η διεύθυνση επανόδου στην foo1, και το δεύτερο η δεύτερη παράμετρος της foo2, δηλαδή η τιμή του στοιχείου x[5] του διανύσματος δεικτών x. Στη συνέχεια καλούμε αναδρομικά την foo2 με παραμέτρους n-1 = 4 και l+1 = x[6].

22 22 Κώδικας Περιγραφή foo1: addiu $sp, $sp, -24 Αύξηση της στοίβας προς τα κάτω. sw $ra, 0($sp) Αποθήκευση στη στοίβα sw $s0, 4($sp) << sw $s1, 8($sp) << sw $s2, 12($sp) << sw $s3, 16($sp) << sw $s4, 20($sp) << move $s0, $zero Αρχικοποίηση της μεταβλητής y. move $s1, $zero Αρχικοποίηση της μεταβλητής i. move $s2, $a0 Μεταφορά παραμέτρου. move $s3, $a1 << move $s4, $a2 << Loop: slt $t0, $s1, $s2 Αποτίμηση συνθήκης (i<n). beq $t0, $zero, Break Διακλάδωση τερματισμού βρόχου. lb $t1, 0($s3) Ανάγνωση τιμής a[i]. bne $t1, $zero, Else Διακλάδωση εντολής if. move $a0, $s1 Παράμετρος της foo2. lw $a1, 0($s4) << jal foo2 Κλήση της foo2. addu $s0, $s0, $v0 Αύξηση τιμής της μεταβλητής y. j Cont Else: addi $s0, $s0, 1 Αύξηση τιμής της y κατά 1. Cont: addi $s1, $s1, 1 Αύξηση καταχωρητή-δείκτη. addi $s3, $s3, 1 Διόρθωση μεταβλητής a. addi $s4, $s4, 4 Διόρθωση μεταβλητής x. j Loop Άλμα στην αρχή του βρόχου. Break: move $v0, $s0 Προετοιμασία επιστροφής αποτελέσματος. lw $s4, 20($sp) Φόρτωση από τη στοίβα. lw $s3, 16($sp) << lw $s2, 12($sp) << lw $s1, 8($sp) << lw $s0, 4($sp) << lw $ra, 0($sp) << addiu $sp, $sp, 24 Διόρθωση του δείκτη στοίβας. jr $ra Επιστροφή. foo2: bgtz $a0, Then Διακλάδωση στη συνθήκη (n>0). lw $v0, 0($a1) Ανάγνωση τιμής l[0]. jr $ra Επιστροφή. Then: addiu $sp, $sp, -8 Αύξηση της στοίβας προς τα κάτω. sw $ra, 0($sp) Αποθήκευση στη στοίβα. sw $a1, 4($sp) << addi $a0, $a0, -1 Παράμετρος της foo2. addi $a1, $a1, 4 << jal foo2 Κλήση της foo2. lw $a1, 4($sp) Φόρτωση από τη στοίβα. sll $t0, $v0, 2 Εύρεση σχετικής διεύθυνσης στο διάνυσμα l. addu $t0, $t0, $a1 Υπολογισμός απόλυτης διεύθυνσης στο l. lw $v0, 0($t0) Ανάγνωση τιμής l[foo2(n-1,l+1)]. lw $ra, 0($sp) Φόρτωση από τη στοίβα. addiu $sp, $sp, 8 Διόρθωση του δείκτη στοίβας. jr $ra Επιστροφή. Όπως και προηγουμένως, επειδή η πρώτη παράμετρος της foo2 έχει τιμή μεγαλύτερη του 0,

23 23 θα πάμε στη διεύθυνση Then του κώδικα της foo2. Θα επαναληφτεί η πιο πάνω διαδικασία, και η στοίβα θα κατέβει κατά 2 θέσεις καταχωρητών, όπου θα αποθηκευτούν η διεύθυνση επανόδου και η δεύτερη παράμετρος της foo2. Ας σημειωθεί ότι η νέα διεύθυνση επανόδου είναι η διεύθυνση που ακολουθεί την αναδρομική κλήση της foo2. Ακολουθούν άλλες 4 κλήσεις της foo2, με παραμέτρους αντίστοιχα 3 και x[7], 2 και x[8], 1 και x[9], και 0 και x[10]. Από τις κλήσεις αυτές, οι 3 πρώτες οδηγούν σε αύξηση της στοίβας, με μείωση του $sp συνολικά κατά 24 ψηφιολέξεις. Η τελευταία δε θα οδηγήσει σε αύξηση της στοίβας, επειδή ο έλεγχος της συνθήκης (n>0) θα οδηγήσει στην πρώτη έξοδο από την foo2 με επιστροφή της τιμής x[10][0]. Μετά την πρώτη έξοδο από την foo2, ο κώδικας θα συνεχίσει να εκτελείται από την εντολή που ακολουθεί την αναδρομική κλήση της foo2. Ο κώδικας αυτός θα οδηγήσει στη δεύτερη έξοδο από την foo2 με διόρθωση του $sp στην τιμή που αυτός είχε πριν την τελευταία μείωσή του έστω SP1, και επιστροφή της τιμής x[9][x[10][0]]. Σε κάθε επόμενη έξοδο από την foo2, εκτός της τελευταίας, ο κώδικας εκτελείται από το ίδιο σημείο, δηλαδή από την εντολή που ακολουθεί την αναδρομική κλήση, και μόνο στην τελευταία έξοδο αυτήν δηλαδή που αντιστοιχεί στην πρώτη κλήση της foo2 ο κώδικας συνεχίζεται από την εντολή που ακολουθεί την κλήση της foo2 από την foo1. Με βάση τα παραπάνω σχόλια, μια σχηματική απεικόνιση της στοίβας μεταξύ των δύο διευθύνσεων SP0 και SP1 δίνεται πιο κάτω: Διεύθυνση Στοίβα SP0 Άγνωστο περιεχόμενο (SP0-24)+20 Αρχικό περιεχόμενο του $s4 (SP0-24)+16 Αρχικό περιεχόμενο του $s3 (SP0-24)+12 Αρχικό περιεχόμενο του $s2 (SP0-24)+8 Αρχικό περιεχόμενο του $s1 (SP0-24)+4 Αρχικό περιεχόμενο του $s0 (SP0-24)+0 Διεύθυνση επανόδου στο καλούν περιβάλλον (SP0-32)+4 x[5] (SP0-32)+0 Διεύθυνση επανόδου στην foo1 (SP0-40)+4 x[6] (SP0-40)+0 Διεύθυνση επανόδου στην foo2 (SP0-48)+4 x[7] (SP0-48)+0 Διεύθυνση επανόδου στην foo2 (SP0-56)+4 x[8] (SP0-56)+0 SP1 Διεύθυνση επανόδου στην foo2 Δ. Η αποθήκευση της διεύθυνσης επανόδου πριν από μια κλήση υποπρογράμματος με την εντολή jal είναι απαραίτητη, επειδή η εντολή αυτή τροποποιεί το περιεχόμενο του καταχωρητή $ra που θεωρούμε ότι διατηρεί τη διεύθυνση αυτή. Εάν δεν αποθηκεύσουμε το αρχικό περιεχόμενο του $ra, τότε η διεύθυνση επανόδου στο καλούν περιβάλλον θα χαθεί, και ο $ra θα περιέχει μετά την κλήση τη διεύθυνση επανόδου στο παρόν περιβάλλον. Μ άλλα λόγια, αν δε διατηρήσουμε την τιμή του $ra μέσα από την κλήση της foo2 στην foo1, δε θα μπορέσουμε να επιστρέψουμε στο περιβάλλον που κάλεσε την τελευταία. Τότε, η εντολή εξόδου από αυτήν θα μας ξαναγυρίσει στην τελευταία διεύθυνση που γράφτηκε στον $ra, και η οποία είναι η διεύθυνση στην foo1 της εντολής που ακολουθεί την κλήση της foo2, οδηγώντας έτσι τον κώδικα σε έναν ατέρμονα βρόχο. Παρόμοια κατάσταση θα παρουσιαστεί, εάν δεν αποθηκεύσουμε το περιεχόμενο του $ra πριν την αναδρομική κλήση της foo2 στον εαυτό της. Η έξοδος από την foo2 θα μας οδηγήσει στην εντολή που ακολουθεί την εντολή αναδρομικής κλήσης, και θα μας διατηρήσει για πάντα στο χώρο μεταξύ αυτής της εντολής και της εντολής εξόδου από την foo2 που ακολουθεί, μη επιτρέποντάς μας να επιστρέψουμε στην foo1.

24 24 Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής Ενότητα 3η: Αριθμητικές Πράξεις και Μονοπάτι Επεξεργασίας Δεδομένων Άσκηση 1: Δείξτε πώς μπορούμε να υλοποιήσουμε ένα δυαδικό αθροιστή 16 ψηφίων, χρησιμοποιώντας ως δομικές μονάδες αθροιστές πρόβλεψης κρατουμένου των 4 ψηφίων, με τους πιο κάτω τρόπους: (α) Οι επιμέρους αθροιστές είναι συνδεμένοι σε διάταξη διάδοσης κρατουμένου. (β) Οι επιμέρους αθροιστές είναι συνδεμένοι ιεραρχικά με μια διάταξη πρόβλεψης κρατουμένου που χρησιμοποιεί ενδιάμεσα αποτελέσματα αυτών. Να επαληθεύσετε τις παραπάνω αρχιτεκτονικές με παράδειγμα πρόσθεσης δύο δυαδικών αριθμών των 16 ψηφίων. Για καθεμιά αρχιτεκτονική υπολογίστε το χρόνο καθυστέρησης για την παραγωγή του αποτελέσματος εκφρασμένο ως το μέγιστο αριθμό πυλών που διανύει κάποιο σήμα σε αυτήν. Σχολιάστε πιθανή επέκταση κάθε αρχιτεκτονικής στα 64 ψηφία. Απάντηση: Οι αθροιστές πρόβλεψης κρατουμένου (carry-lookahead adders) υλοποιούν το συνδυαστικό κύκλωμα ενός αθροιστή πολλών ψηφίων που δε διαδίδει το κρατούμενο του κάθε ψηφίου προς το αμέσως πιο σημαντικό ψηφίο, αλλά υπολογίζει όλα μαζί τα κρατούμενα σα λογικές συναρτήσεις των σημάτων εισόδου του αθροιστή. Οι αθροιστές πρόβλεψης κρατουμένου στηρίζουν την τεχνική τους στη χρήση δύο ενδιάμεσων λογικών συναρτήσεων, από τις οποίες η μία αληθεύει στις περιπτώσεις που ένα κρατούμενο παράγεται κατά την πρόσθεση δύο ψηφίων (συνάρτηση g i generate), και η άλλη αληθεύει στις περιπτώσεις που ένα κρατούμενο διαδίδεται από την πρόσθεση προηγούμενων ψηφίων (συνάρτηση p i propagate): p i = a i b i g i = a ib i όπου a i και b i τα ψηφία των αριθμών που προστίθενται. Ο μηχανισμός υπολογισμού ενός κρατουμένου μπορεί να προκύψει από τη λογική σχέση που συνδέει τις δύο πιο πάνω συναρτήσεις: c i+1 = g i + p ic i (1) δηλαδή ένα νέο κρατούμενο είτε παράγεται στη θέση i, είτε διαδίδει το κρατούμενο της προηγούμενης θέσης 8. Η ανάπτυξη των εκφράσεων για όλα τα ψηφία που συμμετέχουν στην πρόσθεση μας δίνει ταυτόχρονα το κρατούμενο για κάθε ψηφίο: c 1 = g 0 + p 0c 0 c 2 = g 1 + p 1c 1 = g 1 + p 1g 0 + p 1p 0c 0 c 3 = g 2 + p 2c 2 = g 2 + p 2g 1 + p 2p 1c 1 = g 2 + p 2g 1 + p 2p 1g 0 + p 2p 1p 0c 0 c 4 = g 3 + p 3c 3 = = g 3 + p 3g 2 + p 3p 2g 1 + p 3p 2p 1g 0 + p 3p 2p 1p 0c 0 κοκ 8 Στην πραγματικότητα κρατούμενο διαδίδεται και όταν και τα δύο ψηφία a i και b i έχουν τιμή 1, οπότε η συνάρτηση p i θα μπορούσε να γραφτεί ως a i + b i. Όμως, για τον υπολογισμό του κρατουμένου c i+1, όπου χρησιμοποιούμε τη συνάρτηση p i, η περίπτωση αυτή καλύπτεται από τη συνάρτηση g i. Επιπλέον, χρησιμοποιώντας το αποκλειστικό Ή για τη συνάρτηση p i, μπορούμε να υπολογίζουμε το άθροισμα s i από τη λογική έκφραση p i c i αντί της γνωστής a i b i c i, μειώνοντας έτσι το κόστος του υλικού.

25 25 συναρτήσει μόνο των p i, g i και c 0. Το άθροισμα παράγεται με μια ακόμα λογική πράξη μετά την παραγωγή των κρατουμένων: s i = p i c i (2) Συνολικά τα κρατούμενα παράγονται μετά από 3 λογικές πράξεις, δηλαδή με καθυστέρηση 3 πυλών 9, και το άθροισμα μετά από 4 πράξεις, δηλαδή με καθυστέρηση 4 πυλών. Μια συνολική σχεδίαση ενός κυκλώματος που βασίζεται στις πιο πάνω σχέσεις έχει απαγορευτικό κόστος πολυπλοκότητας, ακόμα και για μικρό αριθμό ψηφίων. Ο πιο σημαντικός περιοριστικός παράγοντας είναι ο μέγιστος αριθμός εισόδων μιας πύλης (fan-in), που για τα μεγέθη των πυλών ενός VLSI κυκλώματος δεν είναι συνήθως μεγαλύτερος του 4 ή 5, ώστε να μην καταλαμβάνει μεγάλη επιφάνεια και να μην αυξάνει το χρόνο καθυστέρησης διάδοσης των σημάτων μέσα από την πύλη, αλλά ούτε και την καταναλισκόμενη ισχύ. Έτσι οι σχεδιαστές αθροιστών μεγάλου μήκους χρησιμοποιούν σα δομικές μονάδες γρήγορους αθροιστές των 4 bits που τους συνδέουν μεταξύ τους με διάφορες τεχνικές. Στην πρώτη από τις δύο τεχνικές που μελετάμε συνδέουμε 4 αθροιστές πρόβλεψης κρατουμένου των 4 bits (ΑΠΚ-4) σε διάταξη διάδοσης κρατουμένου, όπως φαίνεται στο σχήμα που ακολουθεί. Στη διάταξη αυτή το κρατούμενο εξόδου του κάθε αθροιστή πλην του τελευταίου τροφοδοτεί το κρατούμενο εισόδου του επόμενου. a 15 a 14 a 13 a 12 a 11 a 10 a 9 a 8 a 7 a 6 a 5 a 4 a 3 a 2 a 1 a 0 b 15 b 14 b 13 b 12 b 11 b 10 b 9 b 8 b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 c 0 ΑΠΚ-4 c 12 c 8 c 4 ΑΠΚ-4 ΑΠΚ-4 ΑΠΚ-4 c 16 s 15 s 14 s 13 s 12 s 11 s 10 s 9 s 8 s 7 s 6 s 5 s 4 s 3 s 2 s 1 s 0 Στη δεύτερη τεχνική από την άλλη μεριά χρησιμοποιούμε ένα πρόσθετο κύκλωμα πρόβλεψης κρατουμένου που χρησιμοποιεί τις συναρτήσεις p i και g i του πρώτου επιπέδου, για να προβλέψει τις τιμές των επιμέρους κρατουμένων εισόδου των αθροιστών των 4 bits. Κατασκευάζουμε έτσι μια διάταξη όπως την παρακάτω: a 15 a 14 a 13 a 12 a 11 a 10 a 9 a 8 a 7 a 6 a 5 a 4 a 3 a 2 a 1 a 0 b 15 b 14 b 13 b 12 b 11 b 10 b 9 b 8 b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 c 0 p 15 p 14 p 13 p 12 p 11 p 10 p 9 p 8 p 7 p 6 p 5 p 4 p 3 p 2 p 1 p 0 g 15 g 14 g 13 g 12 g 11 g 10 g 9 g 8 g 7 g 6 g 5 g 4 g 3 g 2 g 1 g 0 Πρόβλεψη Σούπερ-Κρατουμένου c 0 c 16 ΑΠΚ-4 c 12 ΑΠΚ-4 c 8 ΑΠΚ-4 c 4 ΑΠΚ-4 c 0 c 16 s 15 s 14 s 13 s 12 s 11 s 10 s 9 s 8 s 7 s 6 s 5 s 4 s 3 s 2 s 1 s 0 Το κύκλωμα Πρόβλεψης Σούπερ-Κρατουμένου (ΠΣΚ ονομάζεται έτσι επειδή λειτουργεί σα δεύτερο επίπεδο πρόβλεψης πάνω στο πρώτο) χρησιμοποιεί αυτές τις συναρτήσεις για να προβλέψει τα επιμέρους κρατούμενα c 12, c 8, και c 4, καθώς και το κρατούμενο εξόδου c 16. (Παρατηρήστε ότι τα ίδια κρατούμενα παράγονται και από τους ΑΠΚ-4, αλλά με καθυστέ- 9 Κάνοντας την απλούστευση ότι οι λογικές πράξεις AND, OR και XOR αντιστοιχούν σε πύλες ίσης καθυστέρησης.

26 26 ρηση, γι αυτό και με το νέο επίπεδο λέμε ότι προβλέπουμε τα κρατούμενα και όχι απλά ότι τα υπολογίζουμε!) Ορίζοντας τις βοηθητικές συναρτήσεις: P 0 = p 3p 2p 1p 0 G 0 = g 3 + p 3g 2 + p 3p 2g 1 + p 3p 2p 1g 0 P 4 = p 7p 6p 5p 4 G 4 = g 7 + p 7g 6 + p 7p 6g 5 + p 7p 6p 5g 4 P 8 = p 11p 10p 9p 8 G 8 = g 11 + p 11g 10 + p 11p 10g 9 + p 11p 10p 9g 8 P 12 = p 15p 14p 13p 12 G 12 = g 15 + p 15g 14 + p 15p 14g 13 + p 15p 14p 13g 12 η σχέση (1) για το δεύτερο επίπεδο του κυκλώματος πρόβλεψης γίνεται: c i+4 = G i + P ic i (3) και αναπτύσσοντάς την σε βάθος μέχρι 4 bits παίρνουμε τα σούπερ-κρατούμενα: c 4 = G 0 + P 0c 0 c 8 = G 4 + P 4G 0 + P 4P 0c 0 c 12 = G 8 + P 8G 4 + P 8P 4G 0 +P 8P 4P 0c 0 c 16 = G 12 + P 12G 8 + P 12P 8G 4 + P 12P 8P 4G 0 + P 12P 8P 4P 0c 0 Επιστρέφοντας στο πρώτο επίπεδο, βρίσκουμε τα υπόλοιπα επιμέρους κρατούμενα σε κάθε αθροιστή των 4 bits με βάση τα αναπτύγματα της σχέσης (1) σε βάθος μέχρι 3 bits, και ολοκληρώνουμε με την εφαρμογή της σχέσης (2) για κάθε bit, για να υπολογίσουμε το τελικό άθροισμα. Ας θεωρήσουμε τους δυαδικούς αριθμούς και σε μη προσημασμένη αναπαράσταση. Η πρόσθεσή τους με την πρώτη τεχνική δίνει στους τέσσερις ΑΠΚ-4 τις ακόλουθες ενδιάμεσες τιμές: p = g = με τα επιμέρους κρατούμενα και το κρατούμενο εξόδου να υπολογίζονται διαδοχικά σε κάθε ΑΠΚ-4 σα συνάρτηση των αντίστοιχων τετράδων των p και g, και των αντίστοιχων κρατουμένων εισόδου. Τα κρατούμενα εισόδου μετά τον πρώτο ΑΠΚ-4 λαμβάνονται από τον προηγούμενο. Για τον πρώτο ΑΠΚ-4 τα κρατούμενα θα προκύψουν από τα αναπτύγματα της σχέσης (1) σε βάθος μέχρι 4 bits: c 1 = c 2 = c 3 = c 4 = 1 Τα αντίστοιχα ψηφία του αθροίσματος θα προκύψουν από τη σχέση (2) για κάθε bit: s 3-0 = 1000 Οι υπόλοιποι τρεις ΑΠΚ-4 παράγουν έξοδο με πανομοιότυπο τρόπο όπως ο πρώτος, με κρατούμενα εισόδου τα c 4, c 8 και c 12, αντίστοιχα. Έτσι, για το δεύτερο: c 5 = c 6 = c 7 = 0 c 8 = 1 s 7-4 = 0111 Για τον τρίτο: c 11 = c 12 = 0 c 9 = c 10 = 1 s 11-8 = 1100 Για τον τέταρτο τέλος: c 13 = c 14 = 0 c 15 = c 16 = 1 s = 0001 Και το συνολικό άθροισμα θα είναι: s = Μπορούμε εύκολα να δούμε ότι η συνολική καθυστέρηση στον υπολογισμό ενός αθροίσματος με αυτή την τεχνική είναι 1 πύλης για τον υπολογισμό των p i και g i στον πρώτο ΑΠΚ-4, 4 φορές 2 πυλών για τον υπολογισμό των κρατουμένων εξόδου κάθε ΑΠΚ-4, και 1 ακόμα πύλης για τον υπολογισμό του αθροίσματος στον τελευταίο ΑΠΚ-4, δηλαδή 10 μονάδες πυλών.

27 27 Με τη δεύτερη τεχνική παίρνουμε κατ αρχήν τις ίδιες ενδιάμεσες τιμές για τα p και g, καθώς και: P 0 = P 4 = P 8 = P 12 = G 8 = 0 G 0 = G 4 = G 12 = 1 Από τα αναπτύγματα της σχέσης (3) βρίσκουμε τα σούπερ-κρατούμενα, δηλαδή τα κρατούμενα εισόδου των τριών ΑΠΚ-4 μετά τον πρώτο, καθώς και το κρατούμενο εξόδου: c 12 = 0 c 4 = c 8 = c 16 = 1 Επιστρέφοντας στο πρώτο επίπεδο, υπολογίζουμε τα υπόλοιπα επιμέρους κρατούμενα και τα ψηφία του αθροίσματος με τον ίδιο ακριβώς τρόπο όπως και στην πρώτη τεχνική, με τη διαφορά ότι χρησιμοποιούμε τα αναπτύγματα της σχέσης (1) σε βάθος μέχρι 3 bits, αφού τα κρατούμενα c 4, c 8, c 12 και c 16 είναι ήδη γνωστά και δεν λαμβάνονται από τον προηγούμενο ΑΠΚ-4. Στην τεχνική αυτή η καθυστέρηση υπολογίζεται αναλύοντας τις επιμέρους καθυστερήσεις στους αθροιστές των 4 bits. Έτσι θέλουμε καθυστέρηση 1 πύλης για τον υπολογισμό των p i και g i του πρώτου επιπέδου, και καθυστέρηση 2 πυλών για τον υπολογισμό των P i και G i. Στη συνέχεια χρειαζόμαστε καθυστέρηση άλλων 2 πυλών για τον υπολογισμό των σούπερ-κρατουμένων. Επιστρέφοντας στο πρώτο επίπεδο, θέλουμε άλλες 2 πύλες για τα υπόλοιπα επιμέρους κρατούμενα, και 1 τελευταία πύλη για το τελικό άθροισμα, δηλαδή ένα σύνολο 8 πυλών. Εάν θέλουμε να επεκτείνουμε τις πιο πάνω τεχνικές στα 64 bits, θα δούμε ότι η πρώτη είναι η πλέον ακατάλληλη, καθώς η διάδοση κρατουμένου θα μας υποχρεώσει να περιμένουμε =34 μονάδες πυλών μέχρι να πάρουμε ένα αποτέλεσμα των 64 bits. Η δεύτερη τεχνική έχει το πλεονέκτημα ότι λόγω της ιεραρχικής υλοποίησης, μπορεί να επεκταθεί πιο εύκολα σε μεγαλύτερα μήκη αριθμών. Μ άλλα λόγια, επέκταση σε 64 bits μπορεί να γίνει συνδυάζοντας μικρότερες διατάξεις με την προσθήκη ενός ακόμα επιπέδου αθροιστών. Έτσι, ένα νέο κύκλωμα ΠΣΚ θα προβλέπει τα επιμέρους κρατούμενα c 48, c 32, και c 16, καθώς και το κρατούμενο εξόδου c 64, με τις βοηθητικές συναρτήσεις: P 0' = P 12P 8P 4P 0 G 0' = G 12 + P 12G 8 + P 12P 8G 4 + P 12P 8P 4G 0 P 16' = P 28P 24P 20P 16 G 16' = G 28 +P 28G 24 + P 28P 24G 20 + P 28P 24P 20G 16 P 32' = P 44P 40P 36P 32 G 32' = G 44 + P 44G 40 + P 44P 40G 36 + P 44P 40P 36G 32 P 48' = P 60P 56P 52P 48 G 48' = G 60 + P 60G 56 + P 60P 56G 52 + P 60P 56P 52G 48 οπότε η σχέση (3) για το τρίτο επίπεδο του κυκλώματος πρόβλεψης γίνεται: c i+16 = G i' + P i'c i από την οποία θα λαμβάνουμε τα ζητούμενα σούπερ-κρατούμενα. Η τελική διάταξη που παίρνουμε έχει τη μορφή τετραδικού δέντρου, μια που κάθε υπομονάδα ΠΣΚ συνδυάζει 4 ψηφία P i με 4 ψηφία G i και παράγει τα ενδιάμεσα σούπερ-κρατούμενα, επιστρέφοντάς τα στο πιο κάτω επίπεδο. Έτσι, το ανώτερο επίπεδο ΠΣΚ συνδυάζει 4 αθροιστές των 16 bits και δίνει τα κρατούμενα εισόδου των αντίστοιχων υπομονάδων του αμέσως κατώτερου επιπέδου ΠΣΚ. Αυτές με τη σειρά τους θα δώσουν τα κρατούμενα εισόδου των κατώτερων αθροιστών των 4 bits, οι οποίοι θα παράγουν το τελικό άθροισμα. Το κρατούμενο εξόδου παράγεται από το ανώτερο επίπεδο πρόβλεψης. Άσκηση 2: Μελετήστε τις δύο βελτιώσεις του αθροιστή διάδοσης κρατουμένου, (α) του αθροιστή επιλογής κρατουμένου (carry-select) και (β) του αθροιστή παράκαμψης κρατουμένου (carry-skip). Για καθέναν από τους δύο αυτούς αθροιστές δώστε ένα κυκλωματικό διάγραμμα, το οποίο με δομικές μονάδες αθροιστές διάδοσης κρατουμένου, να αναδεικνύει την τροποποίηση που γίνεται στη διάδοση κρατουμένου, ώστε να επιτυγχάνεται η επιθυμητή βελτίωση στην απόδοση του αθροιστή. Αναλύστε ποσοτικά τη βελτίωση αυτή, υπολογίζοντας το χρόνο σε αριθμό στοιχειωδών

28 28 πυλών που απαιτείται για την πρόσθεση δύο αριθμών Ν ψηφίων, και συγκρίνοντας με τον αντίστοιχο χρόνο ενός κλασικού αθροιστή διάδοσης κρατουμένου. Απάντηση: Θα μελετήσουμε και θα αξιολογήσουμε τους δύο αθροιστές επιλογής και παράκαμψης κρατουμένου για αριθμούς εύρους 24 ψηφίων, και αργότερα θα επεκτείνουμε την αξιολόγησή τους για οποιοδήποτε εύρος αριθμών. Έστω Α και Β οι προσθετέοι και S το άθροισμα που λαμβάνουμε από τους αθροιστές. Το παρακάτω διάγραμμα δείχνει τη δομή ενός αθροιστή επιλογής κρατουμένου, με δομικές μονάδες αθροιστές διάδοσης κρατουμένου των 8 ψηφίων: A B A 15-8 B 15-8 Διάδοση 8-bit 0 Διάδοση 8-bit 0 A 7-0 B 7-0 A B A 15-8 B 15-8 Διάδοση 8-bit Διάδοση 8-bit 1 Διάδοση 8-bit 1 S Η λειτουργία του αθροιστή επιλογής κρατουμένου στηρίζεται στον διπλό υπολογισμό τμημάτων του αθροίσματος, τόσο με κρατούμενο εισόδου 0 όσο και με κρατούμενο εισόδου 1, και στη μετέπειτα επιλογή του αποτελέσματος κάθε τμήματος με βάση το πραγματικό κρατούμενο του προηγούμενου τμήματος. Διπλός υπολογισμός σημαίνει διπλό υλικό πρόσθεσης, που το κάθε ένα λειτουργεί με διαφορετικό κρατούμενο εισόδου, όπως ακριβώς φαίνεται στο διάγραμμα, όπου η πράξη υλοποιείται με τρία τμήματα των 8 bits. Πολυπλέκτες χρησιμοποιούνται για την επιλογή του αθροίσματος και του κρατουμένου εξόδου του τμήματος. Μόνο το λιγότερο σημαντικό τμήμα του αθροίσματος υπολογίζεται με το πραγματικό κρατούμενο εισόδου, αφού το κρατούμενο αυτό είναι εξ αρχής γνωστό κι έτσι δεν έχει εδώ νόημα διπλός υπολογισμός και επιλογή αποτελέσματος. Το παρακάτω διάγραμμα δείχνει τη δομή ενός αθροιστή παράκαμψης κρατουμένου, με δομικές μονάδες αθροιστές διάδοσης κρατουμένου των 8 ψηφίων: A 15-8 B 15-8 S 15-8 S 7-0 A B Διάδοση 8-bit p 15-8 Διάδοση 8-bit A 7-0 B 7-0 Διάδοση 8-bit S S 15-8 S 7-0 όπου p είναι τα ψηφία διάδοσης κρατουμένου που προκύπτουν μέσα σε κάθε κύκλωμα α- θροιστή με βάση τη λογική σχέση p i = a i b i. Εδώ έχουμε μόνο έναν υπολογισμό ανά τμήμα των 8 bits, και μπορούμε να δούμε εύκολα ότι ο υπολογισμός του κρατουμένου εξόδου του τμήματος παρακάμπτεται, όταν τα ψηφία διάδοσης έχουν όλα τιμή 1. Πράγματι, αν ξέρουμε από νωρίς ότι το κρατούμενο εξόδου δε θα δημιουργηθεί μέσα στο τμήμα, αλλά ότι θα προ-

29 29 κύψει μόνο από τη διάδοση του κρατουμένου εισόδου στην έξοδο του τμήματος, τότε δε χρειάζεται να περιμένουμε την παραγωγή του μέσα από το κύκλωμα του τμήματος, αλλά με τη βοήθεια του πολυπλέκτη στέλνουμε την τιμή του κρατουμένου εισόδου απ ευθείας στην έξοδο κρατουμένου του τμήματος. Η παράκαμψη κρατουμένου έχει νόημα όταν προηγείται, αλλά και όταν ακολουθεί επόμενο τμήμα υπολογισμού, γι αυτό και δεν έχουμε κύκλωμα παράκαμψης στο λιγότερο και στο πιο σημαντικό τμήμα του αθροίσματος. Ας μελετήσουμε στη συνέχεια το χρόνο που απαιτεί κάθε διάταξη για τον υπολογισμό ενός αθροίσματος 24 bits. Θα θεωρήσουμε ότι ένα κύκλωμα πλήρους αθροιστή 1 bit απαιτεί δύο επίπεδα πυλών για τον υπολογισμό του αθροίσματος και του κρατουμένου. Έτσι για τη δομική μονάδα αθροιστή διάδοσης κρατουμένου των 8 bits ο χρόνος υπολογισμού τόσο του α- θροίσματος όσο και του κρατουμένου εξόδου θα είναι 8 2=16Τ, όπου Τ είναι ο χρόνος διάδοσης σήματος μέσα από μία στοιχειώδη λογική πύλη. Ένας αθροιστής διάδοσης κρατουμένου των 24 bits θα αποτελείται από τρεις μονάδες διάδοσης των 8 bits, συνδεμένους σε σειρά, οπότε ο χρόνος υπολογισμού του αθροίσματος θα είναι: Τ διαδ = 3 16Τ = 48Τ Στον πιο πάνω αθροιστή επιλογής κρατουμένου όλοι οι αθροιστές των 8 bits λειτουργούν παράλληλα, από τη στιγμή που έχουν γνωστό κρατούμενο εισόδου το κρατούμενο εισόδου του συνολικού αθροιστή και τις σταθερές 0 και 1. Έτσι, όλοι οι υπολογισμοί στους αθροιστές των 8 bits θα απαιτήσουν μόνο 16Τ για να ολοκληρωθούν. Μετά τον υπολογισμό κάθε τμήματος θα απαιτηθεί επιπλέον χρόνος δύο λογικών πυλών για κάθε πολυπλέκτη, κι έτσι ο συνολικός χρόνος του αθροιστή επιλογής κρατουμένου θα είναι: Τ επιλ = 16Τ + 2 2Τ = 20Τ Στον αθροιστή παράκαμψης κρατουμένου, η αξιολόγηση της απόδοσης είναι λιγότερο απλή. Αυτό οφείλεται στο ότι η παράκαμψη του κρατουμένου γίνεται υπό συνθήκη, κι επομένως πρέπει να μελετήσουμε τι συμβαίνει σε κάθε τμήμα υπολογισμού, τόσο όταν η συνθήκη ικανοποιείται, όσο και όταν η συνθήκη δεν ικανοποιείται. Η συνθήκη όπως την περιγράψαμε παραπάνω είναι η μη μηδενική τιμή των ψηφίων διάδοσης p i του τμήματος. Τα ψηφία p i υπολογίζονται όλα ταυτόχρονα με την έναρξη της πρόσθεσης, και ο υπολογισμός τους, όπως και ο επακόλουθος υπολογισμός του λογικού γινομένου τους, ολοκληρώνεται πριν την ολοκλήρωση της πρόσθεσης του λιγότερο σημαντικού αθροιστή. Έτσι, στην περίπτωση αληθούς συνθήκης, η τιμή του κρατουμένου εξόδου είναι έγκυρη με καθυστέρηση ίση με το χρόνο διάδοσης μέσα από τον πολυπλέκτη. Στην περίπτωση ψευδούς συνθήκης, το κρατούμενο εισόδου θα διαδοθεί μέχρι κάποιο σημείο στη μονάδα πρόσθεσης του τμήματος όσο τα ψηφία διάδοσης έχουν τιμή 1, αλλά από εκεί και πέρα το κρατούμενο εξόδου θα είναι ανεξάρτητο του κρατουμένου εισόδου, οπότε θα είναι έγκυρο σε χρόνο το πολύ ίσο με το χρόνο υπολογισμού του πρώτου τμήματος της πρόσθεσης, δηλαδή σε χρόνο 16Τ από την έναρξη της πράξης, και θα διαδοθεί στην έξοδο του τμήματος με καθυστέρηση ίση με το χρόνο διάδοσης μέσα από τον πολυπλέκτη. Επομένως, ο συνολικός χρόνος του αθροιστή παράκαμψης κρατουμένου θα είναι: Τ παρακ = 16Τ + 2Τ +16Τ = 34Τ Γενικεύοντας τους αθροιστές για εύρος Ν = 8ν bits οι χρόνοι διαμορφώνονται ως εξής: Τ διαδ = ν 16Τ = 16νΤ Τ επιλ = 16Τ + (ν-1) 2Τ = (14 + 2ν)Τ Τ παρακ = 16Τ + (ν-2) 2Τ +16Τ = (28 + 2ν)Τ Κατ αρχήν είναι φανερό ότι οι δυο αθροιστές επιλογής και παράκαμψης κρατουμένου έχουν καλύτερη απόδοση από τον κλασικό αθροιστή διάδοσης κρατουμένου. Παρατηρήστε ότι ο αθροιστής επιλογής κρατουμένου επιτυγχάνει καλύτερο χρόνο υπολογισμού από τον αθροιστή παράκαμψης κρατουμένου, όμως με σημαντικά υψηλότερο κόστος υλικού. Τελειώνοντας, αξίζει να πούμε ότι αν τα τμήματα στα οποία χωρίζονται οι αριθμοί στον α- θροιστή παράκαμψης κρατουμένου δεν είναι ίσα, αλλά τα ακραία τμήματά του είναι αρκετά μικρότερα, με σταδιακή αύξηση εύρους προς τα μεσαία τμήματα, τότε ο χρόνος υπολογισμού

30 30 του αθροιστή βελτιώνεται σημαντικά, και μάλιστα γίνεται ανάλογος του N, με Ν το εύρος του υπολογισμού. Από την άλλη μεριά, ο αθροιστής επιλογής κρατουμένου μπορεί να υλοποιηθεί με ιεραρχική προς τα κάτω επιλογή αντί της γραμμικής που δείξαμε, οπότε ο χρόνος υπολογισμού του γίνεται ανάλογος του log 2 Ν. Άσκηση 3: Θεωρήστε τους δυαδικούς αριθμούς Α = και Β = σε αναπαράσταση συμπληρώματος του 2 των 6 bits, οι οποίοι πολλαπλασιάζονται σε μια μονάδα διαδοχικών προσθέσεων και ολισθήσεων των 12 bits. Α. Περιγράψτε την πράξη με και χωρίς τον αλγόριθμο του Booth, θεωρώντας τον Β σαν πολλαπλασιαστή. Σχολιάστε αν ο αλγόριθμος του Booth μειώνει τις επί μέρους πράξεις. Να επαληθεύσετε το αποτέλεσμα συγκρίνοντας με την τιμή του δεκαδικού γινομένου. Β. Υλοποιήστε με τη βοήθεια λογικών κυκλωμάτων τον αλγόριθμο του Booth στη μονάδα ελέγχου της πράξης, εξετάζοντας τα κατάλληλα ψηφία του πολλαπλασιαστή, ελέγχοντας έτσι την πράξη (πρόσθεση ή αφαίρεση) σε κάθε στάδιο μερικών γινομένων. Γ. Σχολιάστε αν ο αλγόριθμος Booth βελτιώνει τον πολλαπλασιασμό, όταν αυτός υλοποιείται συνδυαστικά με αθροιστές διάδοσης κρατουμένου. Απάντηση: Α. Εφόσον οι δύο αριθμοί βρίσκονται στην παράσταση συμπληρώματος του 2, πρέπει να σκεφτούμε ότι η μη χρησιμοποίηση του αλγόριθμου του Booth επιβάλλει την προέκταση των αρνητικών αριθμών μέχρι το μέγεθος του ζητούμενου γινομένου. Η προέκταση ενός αρνητικού αριθμού στην παράσταση συμπληρώματος του 2 γίνεται με προσθήκη του ψηφίου 1 από τα αριστερά του αριθμού όσες φορές απαιτείται για να φτάσουμε το επιθυμητό μέγεθος. Εάν δεν προεκτείνουμε έναν αρνητικό αριθμό σε μια τέτοια περίπτωση, η πράξη χωρίς τον αλγόριθμο Booth θα είναι πιθανά λανθασμένη. Ειδικότερα, η μη προσθήκη των ψηφίων 1 στον πολλαπλασιαστέο θα αλλοιώσει τα μερικά αθροίσματα στην εκτέλεση του πολλαπλασιασμού, εάν παρουσιαστεί κάποια υπερχείλιση, ενώ η μη προσθήκη των ψηφίων 1 στον πολλαπλασιαστή οδηγεί σε απώλεια τόσων προσθέσεων, όσα είναι τα ψηφία της προέκτασης. Εξαιτίας της ανάγκης προέκτασης των αριθμών, δε μπορούμε να χρησιμοποιήσουμε την ΑΛΜ μεγέθους ίσου με το μέγεθος των παραγόντων, αλλά πρέπει να χρησιμοποιήσουμε μια μονάδα μεγέθους ίσου με το μέγεθος του γινομένου. Επιπλέον, δε μπορούμε να χρησιμοποιήσουμε την τεχνική συνένωσης των καταχωρητών γινομένου και πολλαπλασιαστή σε ένα διπλό καταχωρητή, και θα πρέπει να χρησιμοποιήσουμε ξεχωριστούς καταχωρητές για κάθε αριθμό, με τον καθένα να έχει μέγεθος ίσο με αυτό του γινομένου. Υπενθυμίζεται ότι για την πρόσθεση δύο αριθμών μεγέθους n ψηφίων, η απ ευθείας απεικόνιση σε υλικό της τεχνικής που ακολουθούμε με το χέρι επιβάλλει τις επιμέρους προσθέσεις να γίνονται σε ΑΛΜ των 2n ψηφίων, ενώ σε κάθε επανάληψη πρέπει να ολισθαίνουμε τον πολλαπλασιαστέο μια θέση προς τα αριστερά. Η απλοποιημένη απεικόνιση, ακολουθώντας την πράξη διαγώνια, χρησιμοποιεί ΑΛΜ των n ψηφίων και ολισθαίνει το μερικό γινόμενο προς τα δεξιά αντί της αριστερής ολίσθησης του πολλαπλασιαστέου. Εφόσον με τους αριθμούς σε παράσταση συμπληρώματος του 2 και χωρίς τη χρήση του αλγόριθμου του Booth απαιτείται μήκος 2n ψηφίων τόσο στην ΑΛΜ όσο και στους καταχωρητές, η απλοποιημένη απεικόνιση δε μας διευκολύνει πια, κι έτσι προτιμούμε την πρώτη απεικόνιση, η οποία δίνεται στο διάγραμμα της επόμενης σελίδας. Για το συγκεκριμένο παράδειγμα όπου η είσοδος της μονάδας πολλαπλασιασμού είναι αριθμοί μεγέθους 6 bits, όλοι οι καταχωρητές καθώς και η ΑΛΜ έχουν μέγεθος 12 bits, ενώ οι αριθμοί εισάγονται στον καταχωρητή-πολλαπλασιαστέο και στον καταχωρητή-πολλαπλασιαστή με προέκταση προσήμου.

31 31 Πολλαπλασιαστέος Πολλαπλασιαστής ΑΛΜ Έλεγχος Γινόμενο Για τους αριθμούς που μας δίνονται, η πράξη του πολλαπλασιασμού θα γίνει όπως φαίνεται πιο κάτω: πολλαπλασιαστέος A: προέκτεινε σε 12 bits πολλαπλασιαστής B: προέκτεινε σε 12 bits αρχικό γινόμενο = B 0 == ολίσθησε Α Β 1 == 1, γινόμενο = γινόμενο + Α ολίσθησε Α Β 2 == 1, γινόμενο = γινόμενο + Α ολίσθησε Α Β 3 == ολίσθησε Α Β 4 == 1, γινόμενο = γινόμενο + Α ολίσθησε Α Β 5 == 1, γινόμενο = γινόμενο + Α ολίσθησε Α Β 6 == 1, γινόμενο = γινόμενο + Α ολίσθησε Α Β 7 == 1, γινόμενο = γινόμενο + Α ολίσθησε Α Β 8 == 1, γινόμενο = γινόμενο + Α ολίσθησε Α Β 9 == 1, γινόμενο = γινόμενο + Α ολίσθησε Α Β 10 == 1, γινόμενο = γινόμενο + Α ολίσθησε Α Β 11 == 1, γινόμενο = γινόμενο + Α όπου σε κάθε επανάληψη δίνονται η τιμή του μερικού γινομένου και η τιμή του ολισθημένου πολλαπλασιαστέου. Παρατηρήστε ότι: (α) Η πράξη της ολίσθησης του πολλαπλασιαστέου Α γίνεται σε κάθε επανάληψη, ανεξάρτητα από την τιμή του bit του πολλαπλασιαστή Β που ελέγχουμε. Έτσι, η συνεχής ολίσθηση θα μας δώσει έτοιμη την τιμή του ολισθημένου πολλαπλασιαστέου, όταν τη χρειαστούμε. (β) Κατά την ολίσθηση τα ψηφία που ολισθαίνουν αριστερά του Α 11 χάνονται. Αυτό δε μας απασχολεί, διότι με αρχικό μέγεθος των Α και Β στα 6 bits, τα ψηφία που χάνονται μετά το δωδέκατο bit δεν παίζουν ρόλο στην τελική τιμή του γινομένου. (γ) Στην παραπάνω υλοποίηση, η υπομονάδα ελέγχου αποφασίζει αν η πρόσθεση στην ΑΛΜ θα εκτελεστεί ή όχι. Αν δεν εκτελεστεί, γίνεται η ολίσθηση του πολλαπλασιαστέου, και ο αλ-

32 32 γόριθμος προχωράει στην επόμενη επανάληψη. Εναλλακτικά, μπορούμε να εκτελούμε την πρόσθεση σε κάθε επανάληψη, και αν το bit του πολλαπλασιαστή που εξετάζουμε είναι 0, μηδενίζουμε την είσοδο της ΑΛΜ που έρχεται από τον πολλαπλασιαστέο. Συνήθως είναι πιο εύκολη για το υλικό η δεύτερη υλοποίηση, αλλά η πρώτη μπορεί να είναι πιο γρήγορη, εάν η αποφυγή κάποιας πρόσθεσης επιταχύνει τη διαδικασία, αν δηλαδή η διάρκεια κάθε επανάληψης του αλγόριθμου δεν είναι σταθερή. (Διαφορετικά είτε γίνει η πρόσθεση είτε δε γίνει, η διάρκεια της επανάληψης θα είναι η ίδια.) Από εδώ και πέρα θα υποθέσουμε ότι έχουμε την πρώτη υλοποίηση, οπότε βλέπουμε ότι για τους συγκεκριμένους αριθμούς εκτελούμε 10 προσθέσεις στην ΑΛΜ 10. Ελέγχοντας το αποτέλεσμα της πιο πάνω πράξης, βρίσκουμε ότι έχει τιμή , που είναι και η σωστή. Ο αλγόριθμος του Booth στηρίζεται στην παρατήρηση ότι μια σειρά από bits με τιμή 1 μπορεί να παρασταθεί αριθμητικά με μία διαφορά. Έτσι, ενώ με τον κλασικό αλγόριθμο πολλαπλασιασμού μια σειρά από 1 στον πολλαπλασιαστή απαιτεί έναν αντίστοιχο αριθμό διαδοχικών προσθέσεων στην ΑΛΜ, με τον αλγόριθμο του Booth μια τέτοια σειρά απαιτεί μόνο δύο πράξεις, μια πρόσθεση για το μειωτέο, και μια αφαίρεση για τον αφαιρετέο. Στη χειρότερη περίπτωση βέβαια, αν ο αλγόριθμος Booth συναντά συνεχόμενες εναλλαγές μεταξύ 0 και 1, μπορεί να φτάσει στο σημείο να εκτελέσει διπλάσιο αριθμό προσθέσεων/αφαιρέσεων από τον κλασικό αλγόριθμο. Η σημαντικότερη διαφορά όμως του αλγόριθμου του Booth από τον κλασικό παρουσιάζεται στους αρνητικούς αριθμούς. Επειδή η προέκταση του προσήμου δημιουργεί είτε μια ακολουθία από 1 είτε μια ακολουθία από 0, δεν προσθέτει πράξεις στον αλγόριθμο του Booth, πράγμα το οποίο όπως είδαμε δε συμβαίνει στον κλασικό αλγόριθμο, όταν έχουμε αρνητικούς α- ριθμούς. Επιπλέον, μπορεί να αποδειχτεί θεωρητικά ότι η εναλλαγή προσθέσεων και αφαιρέσεων του πολλαπλασιαστέου δεν οδηγεί ποτέ σε υπερχείλιση κάποιας επιμέρους πρόσθεσης, είτε ο πολλαπλασιαστέος είναι θετικός είτε είναι αρνητικός. Επομένως, μπορούμε να χρησιμοποιήσουμε την απλοποιημένη μονάδα που υλοποιεί την πράξη του πολλαπλασιασμού, η οποία απαιτεί καταχωρητές και ΑΛΜ μεγέθους n bits, και η οποία εκτελεί την πράξη σε n μόνο επαναλήψεις. Για την περίπτωση όπου n = 6, και για τους αριθμούς που μας δίνονται, η πράξη του πολλαπλασιασμού με τον αλγόριθμο του Booth στην απλοποιημένη υλοποίηση θα γίνει όπως φαίνεται πιο κάτω: πολλαπλασιαστέος A πολλαπλασιαστής B αρχικό γινόμενο = B 0 == 0, Β -1 == ολίσθησε γινόμενο/πολλαπλασιαστή Β 1 == 1, B 0 == 0, γινόμενο = γινόμενο - Α ολίσθησε γινόμενο/πολλαπλασιαστή Β 2 == 1, Β 1 == ολίσθησε γινόμενο/πολλαπλασιαστή Β 3 == 0, Β 2 == 1, γινόμενο = γινόμενο + Α ολίσθησε γινόμενο/πολλαπλασιαστή Β 4 == 1, Β 3 == 0, γινόμενο = γινόμενο - Α ολίσθησε γινόμενο/πολλαπλασιαστή Β 5 == 1, Β 4 == ολίσθησε γινόμενο/πολλαπλασιαστή 10 Με την προϋπόθεση ότι η ολίσθηση κατά ένα ψηφίο είναι πολύ πιο γρήγορη λειτουργία από την πρόσθεση, μας ενδιαφέρει μόνο ο αριθμός των αριθμητικών πράξεων για τον ίδιο αριθμό επαναλήψεων.

33 33 όπου σε κάθε επανάληψη δίνονται οι τιμές του ζεύγους καταχωρητών γινόμενο/πολλαπλασιαστής μετά την πράξη και μετά την ολίσθηση. Παρατηρήστε ότι: (α) Κάθε πράξη της ΑΛΜ αναφέρεται μόνο στον καταχωρητή γινόμενο, δηλαδή στα 6 πιο σημαντικά bits από τα 12 που βλέπουμε. Το διάγραμμα του προηγούμενου αλγόριθμου είχε μια πιο άμεση αντιστοιχία με την εκτέλεση της πράξης που κάνουμε με το χέρι, απ ό,τι αυτό το διάγραμμα. Το νέο διάγραμμα είναι προσαρμοσμένο στο απλοποιημένο υλικό που τώρα χρησιμοποιούμε. (β) Η δεξιά ολίσθηση που χρησιμοποιούμε στον αλγόριθμο είναι η αριθμητική δεξιά ολίσθηση, η οποία εισάγει στο πιο σημαντικό ψηφίο του καταχωρητή αντίγραφο του προσήμου του αριθμού. (γ) Ο αλγόριθμος Booth εφαρμοσμένος στην περίπτωση των αριθμών Α και Β έχει μειώσει όχι μόνο τον αριθμό επαναλήψεων, αλλά και τον αριθμό των πράξεων που αντιστοιχούν στα 6 bits του πολλαπλασιαστή. Έτσι εκτελούμε μόνο 3 πράξεις στην ΑΛΜ, ενώ πριν εκτελέσαμε 10. Η δυνατότητα χρήσης του απλοποιημένου υλικού για πολλαπλασιασμό προσημασμένων αριθμών στη μορφή συμπληρώματος του 2 τονίζει ακόμα πιο πολύ τη σημασία του αλγόριθμου Booth. Κάνοντας την επαλήθευση για το παραπάνω αποτέλεσμα, βλέπουμε ότι είναι πράγματι το σωστό, Β. Η υλοποίηση του ελέγχου της μονάδας πολλαπλασιασμού γίνεται σε δύο επίπεδα: Στο επίπεδο του κυκλώματος ελέγχου που φροντίζει για το συνολικό χρονισμό της μονάδας, και στο επίπεδο του κυκλώματος ελέγχου που υλοποιεί τον αλγόριθμο Booth. Στην παρούσα άσκηση μας απασχολεί το δεύτερο από τα παραπάνω επίπεδα. Για το σκοπό αυτό, θα πρέπει να υλοποιήσουμε σε ένα συνδυαστικό κύκλωμα τον έλεγχο που ο αλγόριθμος κάνει στα διαδοχικά bits του πολλαπλασιαστή. Έτσι, πρέπει πρώτα να ορίσουμε τα σήματα ελέγχου που θέλουμε να παίρνουμε από το κύκλωμα αυτό σα συνάρτηση των δύο bits που εξετάζουμε κάθε φορά. Παρατηρώντας τις λειτουργίες που εκτελούνται σε κάθε επανάληψη με τον αλγόριθμο Booth βλέπουμε ότι ο αλγόριθμος επιδρά σε δύο αποφάσεις της υπομονάδας ελέγχου. Πρώτον στην απόφαση αν θα γίνει μια πράξη στην ΑΛΜ και δεύτερον στην απόφαση ποια πράξη θα γίνει. Άρα θα σχεδιάσουμε δυο λογικές συναρτήσεις που να μας δίνουν τις επιθυμητές αποφάσεις σε ψηφιακά σήματα. Μπορούμε εύκολα να κατασκευάσουμε τους πίνακες αλήθειας αυτών των συναρτήσεων στον παρακάτω πίνακα: Β i Β i-1 πράξη/όχι πράξη αφαίρεση/πρόσθεση x x απ όπου βλέπουμε ότι: πράξη/όχι πράξη = Β i B i-1+b ib i-1 αφαίρεση/πρόσθεση = B ib i-1 Οι συναρτήσεις αυτές απεικονίζονται εύκολα σε ένα συνδυαστικό κύκλωμα με τη βοήθεια ενός αποκωδικοποιητή 2 4 και μιας πύλης Η. Ένα τέτοιο κύκλωμα είναι το εξής: Β i Β i-1 αφαίρεση/πρόσθεση πράξη/όχι πράξη αποκωδικοποιητής

34 34 Η συνολική υπομονάδα ελέγχου της μονάδας πολλαπλασιασμού θα επιμελείται τον έλεγχο χρονισμού των επαναλήψεων, καθώς και τον έλεγχο των λειτουργιών ολίσθησης, που δεν επηρεάζονται από το συγκεκριμένο αλγόριθμο πολλαπλασιασμού που χρησιμοποιείται. Γ. Στην υλοποίηση της μονάδας πολλαπλασιασμού σα συνδυαστικό κύκλωμα με αθροιστές διάδοσης κρατουμένου, όλες οι πράξεις στους αθροιστές του 1 bit εκτελούνται, είτε το bit του πολλαπλασιαστή που ελέγχεται έχει τιμή 0, είτε έχει τιμή 1. Στην πρώτη περίπτωση, οι πύλες ΚΑΙ που μεσολαβούν μεταξύ του ολισθημένου πολλαπλασιαστέου και του αθροιστή, μηδενίζουν την είσοδο του αθροιστή. Μ άλλα λόγια, οι επιμέρους προσθέσεις εκτελούνται με το μηδέν για τον ένα προσθετέο. Στη δεύτερη περίπτωση βέβαια, οι προσθέσεις εκτελούνται κανονικά, μεταξύ του μερικού γινομένου που είναι το αποτέλεσμα από το παραπάνω επίπεδο αθροιστών και του ολισθημένου πολλαπλασιαστέου. Ο αλγόριθμος Booth επομένως δε συντομεύει την πράξη μεταξύ μη προσημασμένων αριθμών, καθώς ο αριθμός των κανονικά εκτελεσμένων προσθέσεων δεν επηρεάζει το χρόνο ε- κτέλεσης του πολλαπλασιασμού. Όπως είδαμε όμως νωρίτερα, ο αλγόριθμος Booth επιτρέπει τον πολλαπλασιασμό προσημασμένων αριθμών με τρόπο που να μην απαιτείται προέκταση προσήμου για τον αρνητικό α- ριθμό, όταν βέβαια θέλουμε να πάρουμε το γινόμενο σε μέγεθος μεγαλύτερο από το μέγεθος των παραγόντων του. Στην περίπτωση τότε αυτή, ο αλγόριθμος Booth θα επιτρέψει την πράξη σε λιγότερα επίπεδα απ όσα θα χρειαζόμασταν χωρίς αυτόν. Άσκηση 4: Ο αλγόριθμος του Booth για πολλαπλασιασμό σταθερής υποδιαστολής ελέγχει 2 bits του πολλαπλασιαστή σε κάθε βήμα της εκτέλεσης της πράξης του πολλαπλασιασμού. Αν ελέγχουμε 3 bits κάθε φορά αντί για 2, μπορούμε να υπολογίζουμε το γινόμενο με ρυθμό 2 bits ανά βήμα. Α. Κατασκευάστε έναν επαναληπτικό αλγόριθμο που υλοποιεί μια τέτοια τεχνική, εξηγώντας τις επιλογές της πράξης κάθε επανάληψης. Ποιες είναι τώρα οι τιμές που συμμετέχουν στις επιμέρους προσθέσεις του πολλαπλασιασμού και πώς θα τις πάρετε από τον πολλαπλασιαστέο; Πόσα ψηφία χρειάζεστε στην υπομονάδα που εκτελεί τις προσθέσεις; Β. Δοκιμάστε το νέο αλγόριθμο σε δύο αριθμούς των 6 bits κι εξετάστε αν αυτός είναι πιο γρήγορος από τον αλγόριθμο Booth για το παράδειγμά σας. Απάντηση: Α. Γνωρίζουμε ότι στον αλγόριθμο Booth ο έλεγχος των ψηφίων του πολλαπλασιαστή ανά ζεύγος δίνει τις ακόλουθες επιλογές πράξης ανά επανάληψη: Ψηφίο i Ψηφίο i-1 Επιλογή 0 0 Καμία πράξη 0 1 Πρόσθεση 1 0 Αφαίρεση 1 1 Καμία πράξη Μεταξύ διαδοχικών επιλογών συμβαίνει ολίσθηση του πολλαπλασιαστέου προς τα αριστερά (ή ισοδύναμα ολίσθηση του μερικού γινομένου προς τα δεξιά) κατά ένα ψηφίο. Ένας συνδυασμός των ελέγχων διαδοχικών ζευγών ψηφίων του πολλαπλασιαστή οδηγεί σε συνδυασμό διαδοχικών επαναλήψεων του αλγόριθμου Booth. Έτσι, για να υπολογίζουμε το γινόμενο με ρυθμό 2 ψηφίων ανά επανάληψη, πρέπει να συνδυάζουμε δύο διαδοχικές επιλογές πράξεων σε μία, ελέγχοντας 3 ψηφία ανά επανάληψη. Όμως, για να συνδυαστούν οι δύο διαδοχικές επιλογές πράξεων σε μία, πρέπει και η ολίσθηση που μεσολαβεί μεταξύ αυτών, να συνδυαστεί με την επόμενη ολίσθηση, δίνοντας μια ενιαία ολίσθηση κατά δύο ψηφία.

35 35 Ο συνδυασμός μιας επανάληψης του αρχικού αλγόριθμου με την επόμενη προϋποθέτει επομένως αλλαγή στη σειρά των λειτουργιών που εκτελούνται. Ενώ αρχικά έχουμε μια σειρά λειτουργιών επιλογή πράξης ολίσθηση επιλογή πράξης ολίσθηση, ο συνδυασμός διαδοχικών επιλογών πράξεων και ολισθήσεων γίνεται μόνο, αν η σειρά είναι επιλογή πράξης επιλογή πράξης ολίσθηση ολίσθηση. Η αντιμετάθεση των δύο κεντρικών λειτουργιών ο- λίσθησης και επιλογής πράξης μπορεί να γίνει, μόνο αν εξασφαλίζεται η ορθότητα του αποτελέσματος. Επειδή η ολίσθηση του πολλαπλασιαστέου προς τα αριστερά κατά ένα ψηφίο ισοδυναμεί με διπλασιασμό του πολλαπλασιαστέου, για να μπορούμε να εκτελέσουμε την πρώτη ολίσθηση μετά τη δεύτερη επιλογή πράξης, πρέπει η επιλογή αυτή να αφορά πράξη με το διπλάσιο του πολλαπλασιαστέου. Για παράδειγμα, η τριάδα ψηφίων 010, που για το πρώτο από δεξιά ζεύγος δίνει την επιλογή αφαίρεση πολλαπλασιαστέου, ενώ για το δεύτερο από δεξιά ζεύγος δίνει την επιλογή πρόσθεση πολλαπλασιαστέου, μας δίνει τη συνδυασμένη πράξη αφαίρεση πολλαπλασιαστέου και πρόσθεση διπλάσιου πολλαπλασιαστέου, δηλαδή πρόσθεση πολλαπλασιαστέου. Παρόμοια, η τριάδα ψηφίων 100, που για το πρώτο από δεξιά ζεύγος δίνει την επιλογή καμία πράξη ενώ για το δεύτερο από δεξιά ζεύγος δίνει την επιλογή αφαίρεση πολλαπλασιαστέου, μας δίνει τη συνδυασμένη πράξη αφαίρεση διπλάσιου πολλαπλασιαστέου. Οι επιλογές πράξης του νέου αλγόριθμου που προκύπτει μετά από συνδυασμό διαδοχικών επαναλήψεων του αρχικού, μπορούν να αποδειχτούν και θεωρητικά, από την έκφραση της τιμής του γινομένου. Έστω λοιπόν ότι πολλαπλασιάζουμε δύο αριθμούς Α και Β, όπου Α είναι ο πολλαπλασιαστέος και Β ο πολλαπλασιαστής. Έστω ακόμα ότι ο πολλαπλασιαστής έχει αναπαράσταση: Β Β n-1β n-2 Β 1Β 0 μεγέθους n ψηφίων. Αν ο Β είναι μη αρνητικός, η τιμή του δίνεται από τη σχέση: T(Β) = Β n-1 2 n-1 +Β n-2 2 n-2 + +Β 1 2+Β 0 Η τιμή του γινομένου Α Β θα είναι: Τ(Α Β) = Τ(Α) (Β n-1 2 n-1 +Β n-2 2 n-2 + +Β 1 2+Β 0) = = Τ(Α) Β n-1 2 n-1 + Τ(Α) Β n-2 2 n Τ(Α) Β Τ(Α) Β 0 = = Τ(Α) (Β n-1 2 n - Β n-1 2 n-1 ) + Τ(Α) (Β n-2 2 n-1 - Β n-2 2 n-2 ) + + Τ(Α) (Β Β 1 2) + Τ(Α) Β 0 = = Τ(Α) Β n-1 2 n + Τ(Α) (-Β n-1 + Β n-2) 2 n-1 + Τ(Α) (-Β n-2 + Β n-3) 2 n Τ(Α) (-Β 1 + Β 0) 2 + Τ(Α) (-Β 0 + Β -1) = = Τ(Α) (-Β n-1 + Β n-2) 2 n-1 + Τ(Α) (-Β n-2 + Β n-3) 2 n Τ(Α) (-Β 1 + Β 0) 2 + Τ(Α) (-Β 0 + Β -1) όπου Β n-1 = 0, επειδή ο Β είναι μη αρνητικός, και Β -1 = 0 εξ ορισμού. Η σχέση στην οποία καταλήξαμε εκφράζει τον αλγόριθμο του Booth για μη αρνητικό πολλαπλασιαστή. Υποθέτουμε ότι ο n είναι άρτιος, διαφορετικά επεκτείνουμε τον Β κατά ένα ψηφίο. Έτσι, θέτοντας n=2k, συνδυάζουμε τα ζεύγη ψηφίων της παραπάνω σχέσης ανά δύο, και παίρνουμε: Τ(Α Β) = Τ(Α) (-Β 2k-1 + Β 2k-2) 2 2k-1 + Τ(Α) (-Β 2k-2 + Β 2k-3) 2 2k Τ(Α) (-Β 1 +Β 0) 2 + Τ(Α) (-Β 0 + Β -1) = = Τ(Α) [(-Β 2k-1 + Β 2k-2) 2 2k-1 + (-Β 2k-2 + Β 2k-3) 2 2k-2 ] + + Τ(Α) [(-Β 1 + Β 0) 2 + (-Β 0 + Β -1)] = = Τ(Α) [(-Β 2k-1 + Β 2k-2) 2 + (-Β 2k-2 + Β 2k-3)] 2 2k Τ(Α) [(-Β 1 + Β 0) 2 + (-Β 0 + Β -1)] = = Τ(Α) (-2 Β 2k-1+ Β 2k-2 + Β 2k-3) 2 2k Τ(Α) (-2 Β 1 + Β 0 + B -1) Αν ο Β είναι αρνητικός σε παράσταση συμπληρώματος του 2, η τιμή του δίνεται από τη σχέση: T(Β) = -[(1-Β n-1) 2 n-1 +(1-Β n-2) 2 n-2 + +(1-Β 1) 2+(1-Β 0)+1]

36 36 η οποία, επαναλαμβάνοντας τα παραπάνω με Β n-1 = 1, οδηγεί σε παρόμοια έκφραση για την τιμή του γινομένου Α Β. Η έκφραση της τιμής του γινομένου Α Β στην οποία καταλήξαμε μας δίνει το ζητούμενο, δηλαδή ένα νέο αλγόριθμο που προχωράει 2 ψηφία ανά επανάληψη, στην i επανάληψη του οποίου, όπου 1 i k, θα έχουμε την επιλογή πράξης με τον πολλαπλασιαστέο Α, που αντιστοιχεί στον παράγοντα -2 Β 2i-1 + Β 2i-2 + Β 2i-3. Για τα πιο πάνω παραδείγματα, για την τριάδα ψηφίων 010 παίρνουμε: -2 Β 2i-1 + Β 2i-2 + Β 2i-3 = 1 κι επομένως την πράξη πρόσθεση πολλαπλασιαστέου, ενώ για την τριάδα ψηφίων 100 παίρνουμε: -2 Β 2i-1 + Β 2i-2 + Β 2i-3 = -2 δηλαδή την πράξη αφαίρεση διπλάσιου πολλαπλασιαστέου. Συνολικά ο νέος αλγόριθμος ελέγχει τα ψηφία του πολλαπλασιαστή ανά τριάδα και δίνει τις επιλογές πράξης ανά επανάληψη που δίνονται στον παρακάτω πίνακα: Ψηφίο 2i-1 Ψηφίο 2i-2 Ψηφίο 2i-3 Επιλογή Καμία πράξη Πρόσθεση Α Πρόσθεση Α Πρόσθεση 2 Α Αφαίρεση 2 Α Αφαίρεση Α Αφαίρεση Α Καμία πράξη Μεταξύ των διαδοχικών επιλογών συμβαίνει ολίσθηση του πολλαπλασιαστέου προς τα αριστερά (ή ισοδύναμα ολίσθηση του μερικού γινομένου προς τα δεξιά) κατά δύο ψηφία. Από την πιο πάνω ανάλυση του νέου αλγόριθμου διαπιστώνουμε ότι οι αριθμοί που συμμετέχουν στις πράξεις είναι ο πολλαπλασιαστέος και ο διπλάσιος του πολλαπλασιαστέου. Στον αρχικό αλγόριθμο του Booth συμμετέχει μόνο ο πολλαπλασιαστέος, ο οποίος αποτελεί είσοδο της μονάδας πολλαπλασιασμού. Ο διπλάσιος του πολλαπλασιαστέου που χρειαζόμαστε τώρα, μπορεί να ληφθεί άμεσα από τον πολλαπλασιαστέο με ολίσθηση των ψηφίων του κατά μία θέση προς τα αριστερά. Ο αριθμός αυτός δε χρειάζεται να αποθηκευτεί, και μπορεί να παρέχεται στην υπομονάδα πρόσθεσης/αφαίρεσης με μετατοπισμένη σύνδεση του καταχωρητή όπου τοποθετείται ο πολλαπλασιαστέος, με τις εισόδους της. Ένας πολυπλέκτης θα πρέπει να επιλέγει κάθε φορά την τιμή που θα χρησιμοποιείται, σύμφωνα με τον αλγόριθμο. Όσο αφορά το μέγεθος της υπομονάδας πρόσθεσης/αφαίρεσης, αυτό θα πρέπει να είναι ίσο με το μέγιστο μέγεθος των αριθμών που συμμετέχουν στις πράξεις. Εφόσον στις πράξεις που εκτελούνται συμμετέχει ο διπλάσιος του πολλαπλασιαστέου, ο οποίος έχει μέγεθος κατά ένα ψηφίο μεγαλύτερο από τον πολλαπλασιαστέο, συμπεραίνουμε ότι η υπομονάδα πρόσθεσης/αφαίρεσης πρέπει να έχει το ίδιο μέγεθος, δηλαδή το μέγεθος του πολλαπλασιαστέου συν ένα ψηφίο. Β. Ας εφαρμόσουμε το νέο αλγόριθμο στους δύο αριθμούς μεγέθους 6 bits Α = και Β = , τους οποίους είδαμε στην προηγούμενη άσκηση. Τα βήματα του αλγόριθμου για τους δύο αριθμούς φαίνονται στο παρακάτω διάγραμμα: πολλαπλασιαστέος A πολλαπλασιαστής B αρχικό γινόμενο = Β 1 == 1, B 0 == 0, Β -1 == 0, γινόμενο = γινόμενο - 2Α ολίσθησε γινόμενο/πολλαπλασιαστή Β 3 == 0, Β 2 == 1, B 1 == 1, γινόμενο = γινόμενο + 2Α

37 ολίσθησε γινόμενο/πολλαπλασιαστή Β 5 == 1, Β 4 == 1, Β 3 == 0, γινόμενο = γινόμενο - Α ολίσθησε γινόμενο/πολλαπλασιαστή όπου σε κάθε επανάληψη δίνονται οι τιμές του ζεύγους καταχωρητών γινόμενο/πολλαπλασιαστής μετά την πράξη και μετά την ολίσθηση. Παρατηρήστε ότι: (α) Κάθε πράξη της ΑΛΜ γίνεται στα 7 πιο σημαντικά bits του ζεύγους καταχωρητών γινόμενο/πολλαπλασιαστής, επομένως το μέγεθος του καταχωρητή γινομένου είναι 7 bits. Αν χρησιμοποιούσαμε μόνο 6 bits, θα είχαμε λάθος πράξη από την πρώτη κιόλας επανάληψη! (β) Σε κάθε επανάληψη κάνουμε αριθμητική ολίσθηση προς τα δεξιά του ζεύγους καταχωρητών γινόμενο/πολλαπλασιαστής κατά δύο ψηφία. (γ) Το τελικό αποτέλεσμα είναι μεγέθους 12 bits, κάτι που δεν επηρεάζεται από το γεγονός ότι χρησιμοποιούμε μεγαλύτερο καταχωρητή για την αποθήκευση του μερικού γινομένου. Ο νέος αλγόριθμος μειώνει στο μισό τον αριθμό επαναλήψεων από τον αρχικό αλγόριθμο Booth, ανεξάρτητα από τον πολλαπλασιαστή. Αν μας ενδιαφέρει μόνο ο αριθμός των αριθμητικών πράξεων, παρατηρούμε ότι για το συγκεκριμένο παράδειγμα εκτελούμε 3 πράξεις, όσες εκτελεί και ο αρχικός αλγόριθμος Booth. Άσκηση 5: Έστω μια διάταξη πρόσθεσης 5 μη προσημασμένων δυαδικών αριθμών των 8 bits. Η διάταξη χρησιμοποιεί πλήρεις αθροιστές () για κάθε 1 bit πρόσθεσης και δεν είναι επαναληπτική. Αγνοήστε τα κρατούμενα εισόδου και εξόδου. Θεωρήστε τους αριθμούς 38, 31, 66, 17 και 77 (εκφρασμένους στο δεκαδικό σύστημα) και δείξτε τα βήματα στην πρόσθεσή τους, όταν οι είναι συνδεμένοι (α) σε διάταξη διάδοσης κρατουμένου και (β) σε διάταξη διατήρησης κρατουμένου, όπου το τελευταίο επίπεδο πρόσθεσης υλοποιείται με την τεχνική διάδοσης κρατουμένου. Σε κάθε περίπτωση υπολογίστε πόσο χρόνο διαρκεί η πράξη, σαν τη μέγιστη απόσταση σε αριθμό αθροιστών που θα διανύσει κάποιο σήμα κατά την εκτέλεση αυτής. Τι παρατηρείτε; Απάντηση: Κατ αρχήν εκφράζουμε τους αριθμούς στο δυαδικό σύστημα αρίθμησης σε μη προσημασμένη αναπαράσταση των 8 bits: 38 (10) = (2) 31 (10) = (2) 66 (10) = (2) 17 (10) = (2) 77 (10) = (2) (α) Ένα σύστημα διάδοσης κρατουμένου υπολογίζει ένα τέτοιο άθροισμα προσθέτοντας κάθε φορά δύο αριθμούς. Στο ανώτερο επίπεδο προσθέτει τους δύο πρώτους αριθμούς, και στη συνέχεια προσθέτει ένα νέο αριθμό σε κάθε μερικό άθροισμα, μέχρι να φτάσει στο κατώτερο επίπεδο που ολοκληρώνει την πρόσθεση, όπως φαίνεται στο πρώτο διάγραμμα της επόμενης σελίδας. Τα βήματα αυτής της πράξης στο σύστημα διάδοσης κρατουμένου φαίνονται πιο κάτω:

38 38 a 7 b 7 c 7 d 7 e 7 a 6 b 6 c 6 d 6 e 6 a 0 b 0 c 0 d 0 e s 7 s 6 s 0 Σε κάθε επιμέρους πρόσθεση το κρατούμενο διαδίδεται από τα δεξιά προς τα αριστερά. (β) Ένα σύστημα διατήρησης κρατουμένου (carry-save) δεν προωθεί το κρατούμενο από δεξιά προς τα αριστερά στο ίδιο επίπεδο, αλλά από πάνω προς τα κάτω μεταξύ επιπέδων μέχρι το τελευταίο επίπεδο της πρόσθεσης, διατηρώντας το σε κάθε επίπεδο, όπως δείχνει το πιο κάτω διάγραμμα. Κάθε ενδιάμεση πρόσθεση δηλαδή προσθέτει τρεις αριθμούς (υπενθυμίζεται ότι ο προσθέτει 3 bits συμπεριλαμβανομένου του κρατουμένου εισόδου) και παράγει ένα άθροισμα στο οποίο δε συνυπολογίζονται τα επιμέρους κρατούμενα του ίδιου επιπέδου, αλλά μόνο των προηγούμενων επιπέδων, τα δε επιμέρους κρατούμενα του επιπέδου προωθούνται στο επόμενο επίπεδο. a 7 b 7 c 7 d 7 e 7 a 6 b 6 c 6 d 6 e 6 a 0 b 0 c 0 d 0 e s 7 s 6 s 0

39 39 Τα βήματα αυτής της πράξης στο σύστημα διατήρησης κρατουμένου είναι τα εξής: όπου κάθε ζευγάρι ενδιάμεσων αποτελεσμάτων είναι το άθροισμα των 3 αντίστοιχων αριθμών χωρίς επιμέρους κρατούμενα (μ άλλα λόγια το αποκλειστικό Ή των αντίστοιχων ψηφίων) και η λέξη των κρατουμένων (κρατούμενο έχουμε όταν 2 τουλάχιστον από κάθε 3 ψηφία είναι 1), όπως προωθείται στο επόμενο επίπεδο, δηλαδή ολισθημένη κατά μία θέση αριστερά. Στην πρώτη διάταξη το μέγιστο μήκος διαδρομής κάποιου σήματος περιλαμβάνει διαδρομή τόσο κατά μήκος οποιασδήποτε από τις επιμέρους προσθέσεις των 8 bits, όσο και κατά ύψος από το πρώτο στο τελευταίο επίπεδο. Επομένως αυτό θα είναι ίσο με 8+3=11, και βέβαια α- ντιστοιχεί στη διάδοση του κρατουμένου εισόδου της διάταξης μέχρι την παραγωγή του πιο σημαντικού ψηφίου του αθροίσματος. Στη δεύτερη διάταξη το αντίστοιχο μέγιστο μήκος διαδρομής περιλαμβάνει διαδρομή κατά ύψος, αλλά και κατά μήκος της τελευταίας πρόσθεσης. Άρα αυτό θα είναι ίσο με 4+7=11, αντιστοιχώντας και πάλι στη διάδοση του κρατουμένου εισόδου της διάταξης μέχρι την παραγωγή του πιο σημαντικού ψηφίου του αθροίσματος. Παρατηρούμε βέβαια ότι ο χρόνος εκτέλεσης της πράξης της πρόσθεσης των 5 αριθμών είναι ο ίδιος και με τις δύο διατάξεις. Η διαφορά των δύο διατάξεων βρίσκεται στην ευκολία με την οποία μπορεί να βελτιωθεί το κύκλωμα στη δεύτερη διάταξη σχετικά με την πρώτη. Πιο συγκεκριμένα, στην πρώτη διάταξη πρέπει να επιταχύνουμε όλες τις επιμέρους προσθέσεις, ενώ στη δεύτερη μόνο την τελευταία, καθώς οι επιμέρους προσθέσεις ολοκληρώνονται με καθυστέρηση μόνο 1. Η χρησιμοποίηση έτσι ενός αθροιστή πρόβλεψης κρατουμένου μπορεί να λύσει το πρόβλημα χρόνου στη δεύτερη διάταξη. Στην πρώτη όμως διάταξη, ακόμα κι αν χρησιμοποιήσουμε τέτοιους αθροιστές σε κάθε επίπεδο (πράγμα που δεν αποτελεί ρεαλιστική λύση, δεδομένου του κόστους αυτών σε χώρο), δεν πρόκειται ποτέ να επιτύχουμε επιμέρους πρόσθεση σε χρόνο 1. Άσκηση 6: Θεωρήστε τον πολλαπλασιασμό σταθερής υποδιαστολής με το βελτιωμένο αλγόριθμο Booth που προχωράει κατά 2 ψηφία σε κάθε βήμα, εξετάζοντας τριάδες ψηφίων. Χρησιμοποιώντας στοιχειώδεις αθροιστές σε επίπεδο bit, σχεδιάστε μια μονάδα πολλαπλασιασμού αριθμών 8 bit που να υλοποιεί τον αλγόριθμο αυτό μη επαναληπτικά, με βάση την τεχνική διατήρησης κρατουμένου. Η έξοδος της μονάδας πρέπει να είναι μεγέθους 16 bit. Επαληθεύστε τη λειτουργία της μονάδας με τους αριθμούς (πολλαπλασιαστέος) και (πολλαπλασιαστής). Απάντηση: Όπως είδαμε στο μάθημα, η μη επαναληπτική υλοποίηση του κλασικού αλγόριθμου πολλαπλασιασμού με την τεχνική διατήρησης κρατουμένου είναι σχετικά απλή τουλάχιστον για μη προσημασμένους αριθμούς. Ο κύριος λόγος γι αυτό είναι το γεγονός ότι σε κάθε επίπεδο πρόσθεσης έχουμε απλή επιλογή νέας εισόδου επιπλέον δηλαδή των εξόδων του προηγούμενου επιπέδου μεταξύ του πολλαπλασιαστέου και της τιμής 0. Αν δηλαδή το ψηφίο του πολλαπλασιαστή που εξετάζουμε είναι το 1, ως νέα είσοδο στο αντίστοιχο επίπεδο διατήρησης κρατουμένου επιλέγουμε την τιμή του πολλαπλασιαστέου, ενώ αν το ψηφίο είναι το 0, επιλέγουμε την τιμή 0. Η επιλογή αυτή δε χρειάζεται παρά μόνο μια πύλη λογικού KAI για την υλοποίησή της, όπως φαίνεται στο σχήμα της μονάδας των 4 bit που μελετήσαμε και ξαναδίνουμε και στη συνέχεια, και όπου πολλαπλασιαστέος είναι ο Α και πολλαπλασιαστής ο

40 40 A 3 A 2 A 1 A 0 B 0 B 1 Η Π Π Η B 2 Π Π Π Η B 3 Αθροιστής Πρόβλεψης Κρατουμένου Γ 7 Γ 6 Γ 5 Γ 4 Γ 3 Γ 2 Γ 1 Γ 0 Β. Η μόνη πολυπλοκότητα της μονάδας αυτής βρίσκεται στη μετατόπιση που υφίστανται οι επιμέρους πράξεις προς τα αριστερά μεταξύ των διαδοχικών επιπέδων, η οποία όμως είναι αναμενόμενη, εξαιτίας της διαφορετικής σημαντικότητας των ψηφίων του πολλαπλασιαστή που κάθε φορά εξετάζουμε. Στην περίπτωση του αλγόριθμου Booth, οι επιλογές είναι πιο περίπλοκες. Συγκεκριμένα, για κάθε νέο έλεγχο ψηφίων του πολλαπλασιαστή πρέπει να επιλέγουμε μεταξύ πρόσθεσης του πολλαπλασιαστέου, της τιμής 0, αλλά και του αντίθετου του πολλαπλασιαστέου. Βέβαια, στον επαναληπτικό αλγόριθμο, όπως ήδη έχουμε δει, η υλοποίηση του ελέγχου της μονάδας για κάθε επανάληψη είναι σχετικά εύκολη, διότι οι παραπάνω επιλογές ανάγονται σε: (α) Επιλογή μεταξύ πρόσθεσης και αφαίρεσης, με τη βοήθεια κυκλώματος που εκτελεί μαζί πρόσθεση και αφαίρεση με την κλασική μέθοδο. Το σήμα αφαίρεση/πρόσθεση που επιλέγει την πράξη, υλοποιεί ουσιαστικά την επιλογή μεταξύ του πολλαπλασιαστέου και του αντίθετού του. (β) Επιλογή της πρόσθεσης με την τιμή 0, με τη βοήθεια μιας πύλης λογικού ΚΑΙ που παρεμβάλλεται μεταξύ του πολλαπλασιαστέου και της αντίστοιχης εισόδου του κυκλώματος πρόσθεσης/αφαίρεσης. Το σήμα πράξη/όχι πράξη οδηγεί την πύλη αυτή, ώστε να μηδενίζει τον πολλαπλασιαστέο όταν γίνεται αυτή η επιλογή. Από την άλλη μεριά, για την υλοποίηση του ελέγχου των επαναλήψεων, που ολοκληρώνει το κύκλωμα ελέγχου της μονάδας, δεν υπάρχει ουσιαστική διαφορά μεταξύ του κλασικού αλγόριθμου και του αλγόριθμου Booth. Το κύκλωμα ελέγχου των επαναλήψεων θα είναι ακολουθιακό και για τους δύο αλγόριθμους, και ανάλογα με το χρονισμό και την επιλογή των καταστάσεων, είναι πιθανό αντί για μηδενισμό της μιας εισόδου του κυκλώματος πρόσθεσης/αφαίρεσης με την πύλη λογικού ΚΑΙ, να παρακάμπτεται πλήρως το κύκλωμα αυτό με απ ευθείας ολίσθηση της προηγούμενης τιμής του καταχωρητή γινόμενο/πολλαπλασιαστής. Τη συνολική υλοποίηση του κυκλώματος ελέγχου με τέτοια δυνατότητα θα τη μελετήσουμε σε άσκηση επόμενης ενότητας. Όσο αφορά την επέκταση του αλγόριθμου Booth για έλεγχο τριάδας αντί ζεύγους ψηφίων, αυτό που αλλάζει στην υλοποίηση είναι η υποστήριξη για πράξη με το διπλάσιο του πολλαπλασιαστέου στο κύκλωμα πρόσθεσης/αφαίρεσης, καθώς και η αντίστοιχη πρόσθετη επιλογή βάσει των τριών ψηφίων του πολλαπλασιαστή που εξετάζονται, κάτι που έχουμε αναλύσει σε προηγούμενη άσκηση.

41 41 Στη μη επαναληπτική υλοποίηση του αλγόριθμου Booth τώρα, ενώ η επιλογή εισόδων μπορεί να γίνει με τη βοήθεια παρόμοιων σημάτων με τα παραπάνω, πρέπει να εξετάσουμε καλύτερα τον υπολογισμό του αντίθετου του πολλαπλασιαστέου. Ο υπολογισμός αυτός δε χρειάζεται στην επαναληπτική υλοποίηση, επειδή εκεί μπορούμε να κάνουμε κατ ευθείαν αφαίρεση αντί πρόσθεσης του αντίθετου του πολλαπλασιαστέου. Φυσικά, το ίδιο θα συνέβαινε με κάποια μη επαναληπτική υλοποίηση, βασισμένη όμως στην κλασική πρόσθεση, και όχι στην τεχνική διατήρησης κρατουμένου, αφού και τότε θα μπορούσαμε να έχουμε κύκλωμα αφαίρεσης σε κάθε επίπεδο αν και με μια μικρή διόρθωση που θα παραβλέψουμε διότι δεν αφορά την παρούσα άσκηση. Ας δούμε όμως πιο αναλυτικά τι πρόβλημα εμφανίζεται στην τεχνική διατήρησης κρατουμένου σε σχέση με την υποστήριξη αφαίρεσης. Όπως είδαμε στο μάθημα, η επέκταση ενός αθροιστή για υποστήριξη αφαίρεσης συνίσταται στην προσθήκη πυλών αποκλειστικού Ή στη μία είσοδο, και σύνδεση του σήματος αφαίρεση/πρόσθεση τόσο με τις πύλες αυτές όσο και με το κρατούμενο εισόδου του κυκλώματος. Για την υποστήριξη λοιπόν του αντίθετου του πολλαπλασιαστέου σε μια διάταξη όπως αυτή του παραπάνω σχήματος παραβλέποντας προς στιγμή το γεγονός ότι η διάταξη υλοποιεί τον κλασικό αλγόριθμο πολλαπλασιασμού, πρέπει (α) να συνδέσουμε τέτοιες πύλες στις αντίστοιχες εισόδους και (β) να συνδέσουμε το σήμα αφαίρεση/πρόσθεση στα κατάλληλα σημεία της διάταξης. Προφανώς, είναι απλό να τοποθετήσουμε πύλες αποκλειστικού Ή σε όλες τις εισόδους που προέρχονται από τον πολλαπλασιαστέο Α, όπως και να τις συνδέσουμε με το σήμα αφαίρεση/πρόσθεση. Η δυσκολία όμως βρίσκεται στη σύνδεση του σήματος με το κατάλληλο σημείο, ώστε το συμπλήρωμα ως προς 1 να μετατραπεί σε συμπλήρωμα ως προς 2. Αυτό το σημείο στον κλασικό αθροιστή είναι το κρατούμενο εισόδου, εδώ όμως τέτοιο σημείο δεν είναι πάντα διαθέσιμο! Πιο συγκεκριμένα, για να μπορούμε να μετατρέψουμε το συμπλήρωμα ως προς 1 το οποίο προκύπτει με την αντιστροφή των ψηφίων μέσα από τις πύλες αποκλειστικού Ή σε συμπλήρωμα ως προς 2, πρέπει να μπορούμε να προσθέσουμε σε αυτό την τιμή 1, μ άλλα λόγια να προσθέσουμε το ψηφίο 1 στο λιγότερο σημαντικό ψηφίο αυτού, όπου αυτό απαντάται. Στο παραπάνω σχήμα, το λιγότερο σημαντικό ψηφίο του Α άρα και του Α, απαντάται ως είσοδος σε διάφορους πλήρεις αθροιστές (Π) ή ημιαθροιστές (Η). Στη δεύτερη περίπτωση, η σύνδεση του σήματος αφαίρεση/πρόσθεση είναι εύκολη, μια που ο ημιαθροιστής απλά επεκτείνεται σε πλήρη αθροιστή, με σύνδεση του σήματος αυτού στην τρίτη είσοδο που αντιστοιχεί στο κρατούμενο εισόδου. Στην πρώτη περίπτωση όμως, τέτοια σύνδεση είναι αδύνατη, μια που η τρίτη είσοδος ήδη χρησιμοποιείται! Μια πιθανή λύση στο παραπάνω πρόβλημα είναι η προσθήκη μιας ακόμα λέξης εισόδου στη διάταξη, η οποία να αντιστοιχεί σε αυτές τις συνδέσεις, και η οποία να προστίθεται στο πρώτο επίπεδο διατήρησης κρατουμένου. Κάτι τέτοιο είναι εφικτό, μια που το ψηφίο A 0 δεν εμφανίζεται ποτέ στην ίδια σημαντικότητα της διάταξης. Έτσι, το λιγότερο σημαντικό ψηφίο της λέξης θα έχει τιμή 1, αν ο έλεγχος του ζεύγους ψηφίων (Β 0, Β -1) δίνει πράξη πρόσθεσης του -Α, δηλαδή αφαίρεσης, διαφορετικά θα έχει τιμή 0, το επόμενο ψηφίο θα έχει τιμή 1, αν ο έλεγχος του ζεύγους ψηφίων (Β 1, Β 0) δίνει πράξη αφαίρεσης, διαφορετικά θα έχει τιμή 0, κοκ. Επειδή για αριθμούς μεγέθους 8 bit ο έλεγχος γίνεται για 8 ζεύγη, η λέξη που θέλουμε θα είναι μεγέθους 8 bit. Φυσικά, η λέξη αυτή θα πρέπει να θεωρηθεί μη προσημασμένη. Για την υλοποίηση του βελτιωμένου αλγόριθμου Booth, ισχύουν παρόμοια με τα παραπάνω όσο αφορά την υλοποίηση του αντίθετου. Εφόσον κάθε βήμα προχωράει κατά 2 bit, το βοηθητικό ψηφίο που θα προστίθεται, θα αντιστοιχεί μόνο στις άρτιες σημαντικότητες της διάταξης, αλλά θα καλύπτει πάλι όλο το εύρος του πολλαπλασιαστή. Στη μη επαναληπτική υλοποίηση τόσο του βασικού όσο και του βελτιωμένου αλγόριθμου Booth, όλα τα σήματα ελέγχου παράγονται ταυτόχρονα από πολλαπλά αντίγραφα του κυκλώματος που εξετάζει το ζεύγος ή την τριάδα ψηφίων, με κάθε αντίγραφο να τροφοδοτείται από τα κατάλληλα ψηφία του πολλαπλασιαστή. Μια διάταξη των 8 bit που υλοποιεί το βελτιωμένο αλγόριθμο Booth μη επαναληπτικά σύμφωνα με τα παραπάνω δίνεται στην επόμενη σελίδα. Προσέξτε ότι κάθε νέος αριθμός που προστίθεται είναι μετατοπισμένος κατά δύο ψηφία, ενώ ο αριθμός 2Α παράγεται με μετατόπιση κατά ένα ακόμα ψηφίο. Γι αυτό και κάθε επίπεδο διατήρησης κρατουμένου περιέχει 9 στοιχειώδεις αθροιστές. Το Ε είναι το κύκλωμα

42 42 επιλογής εισόδου, με την επιλογή να καθορίζεται από τις γραμμές ελέγχου Σ 0, Σ 1, Σ 2 και Σ 3. Τα πρόσθετα ψηφία υπολογισμού του αντιθέτου είναι τα Ψ 0, Ψ 1, Ψ 2 και Ψ 3. Πιο συγκεκριμένα, το κύκλωμα Ε πρέπει με βάση τις γραμμές ελέγχου να επιλέγει μεταξύ των δύο εισόδων του, των συμπληρωματικών τους και του 0. Κάθε γραμμή ελέγχου πρέπει να

43 43 είναι εύρους τριών ψηφίων, ώστε να καλύπτει τις 5 εναλλακτικές τιμές, και μπορεί να περιλαμβάνει τα σήματα πράξη/όχι πράξη και αφαίρεση/πρόσθεση, καθώς και ένα σήμα διπλάσιο/απλό για την επιλογή της κατάλληλης από τις δύο εισόδους, με τιμή 1 για επιλογή διπλασίου δηλαδή του ψηφίου μικρότερης σημαντικότητας ώστε να επιτευχθεί ολίσθηση κατά μία θέση και 0 για επιλογή απλού πολλαπλασιαστέου. Με αυτά τα σήματα ελέγχου, μια υλοποίηση του Ε μπορεί να είναι η παρακάτω: MUX διπλάσιο/απλό αφαίρεση/πρόσθεση πράξη/όχι πράξη E Για κάθε επίπεδο διατήρησης κρατουμένου, η γραμμή ελέγχου Σ i θα περιγράφεται από τον πίνακα: Β 2i+1 Β 2i Β 2i-1 διπλάσιο/απλό i πράξη/όχι πράξη i αφαίρεση/πρόσθεση i x 0 x x 0 x για i = 0,1,2,3, όπως προκύπτει από προηγούμενη άσκηση, οπότε τα αντίστοιχα σήματα θα παράγονται από ένα συνδυαστικό κύκλωμα που υλοποιεί τις λογικές συναρτήσεις: διπλάσιο/απλό 0 = Β 1Β 0 αφαίρεση/πρόσθεση 0 = Β 1Β 0 + Β 1Β 0 πράξη/όχι πράξη 0 = (Β 1 Β 0 ) διπλάσιο/απλό 1 = Β 3Β 2 Β 1 + Β 3 Β 2Β 1 αφαίρεση/πρόσθεση 1 = Β 3Β 2 Β 1 + Β 3Β 2 Β 1 + Β 3Β 2Β 1 πράξη/όχι πράξη 1 = (Β 3Β 2Β 1 + Β 3 Β 2 Β 1 ) διπλάσιο/απλό 2 = Β 5Β 4 Β 3 + Β 5 Β 4Β 3 αφαίρεση/πρόσθεση 2 = Β 5Β 4 Β 3 + Β 5Β 4 Β 3 + Β 5Β 4Β 3 πράξη/όχι πράξη 2 = (Β 5Β 4Β 3 + Β 5 Β 4 Β 3 ) διπλάσιο/απλό 3 = Β 7Β 6 Β 5 + Β 7 Β 6Β 5 αφαίρεση/πρόσθεση 3 = Β 7Β 6 Β 5 + Β 7Β 6 Β 5 + Β 7Β 6Β 5 πράξη/όχι πράξη 3 = (Β 7Β 6Β 5 + Β 7 Β 6 Β 5 ) δεδομένου ότι Β Τα ψηφία Ψ 0, Ψ 1, Ψ 2 και Ψ 3 θα τροφοδοτούνται από τα σήματα αφαίρεση/πρόσθεση 0, αφαίρεση/πρόσθεση 1, αφαίρεση/πρόσθεση 2 και αφαίρεση/πρόσθεση 3, αντίστοιχα. Για τους αριθμούς που μας δίνονται, Α (2) = 83 (10) και Β (2) = -46 (10), η παραπάνω διάταξη θα συμπεριφερθεί όπως περιγράφεται στο σχήμα της επόμενης σελίδας, όπου φαίνονται οι τιμές που προκύπτουν από όλα τα κυκλώματα Ε, καθώς και από όλους τους αθροιστές, συμπεριλαμβανομένου του αθροιστή πρόβλεψης κρατουμένου. Τα σήματα των γραμμών Σ 0, Σ 1, Σ 2 και Σ 3 θα έχουν τιμές:

44 διπλάσιο/απλό 0 = 1 αφαίρεση/πρόσθεση 0 = 1 πράξη/όχι πράξη 0 = 1 διπλάσιο/απλό 1 = 0 αφαίρεση/πρόσθεση 1 = 0 πράξη/όχι πράξη 1 = 1 διπλάσιο/απλό 2 = 0 αφαίρεση/πρόσθεση 2 = 0 πράξη/όχι πράξη 2 = 1 διπλάσιο/απλό 3 = 0 αφαίρεση/πρόσθεση 3 = 1 πράξη/όχι πράξη 3 = 1 οπότε και Ψ 0 = 1, Ψ 1 = Ψ 2 = 0 και Ψ 3 = 1. Το αποτέλεσμα της πράξης είναι ο αριθμός Γ (2) = (10). Άσκηση 7: Δείξτε τα βήματα του αλγόριθμου διαίρεσης ακεραίων όταν διαιρείτε τους δυαδικούς αριθμούς (διαιρετέος) και 0010 (διαιρέτης). Επαληθεύστε το αποτέλεσμα που πήρατε. Απάντηση: Το υλικό που χρησιμοποιείται για την υλοποίηση του επαναληπτικού αλγόριθμου διαίρεσης ακεραίων δίνεται στην επόμενη σελίδα. Ο καταχωρητής Υπόλοιπο/Πηλίκο περιέχει δύο α- ριθμούς που τελικά θα είναι τα δύο αποτελέσματα της διαίρεσης, το πηλίκο και το υπόλοιπο. Αρχικά, πριν από οποιαδήποτε πράξη μεταξύ διαιρετέου και διαιρέτη, το μερικό υπόλοιπο της πράξης είναι ίσο με το διαιρετέο. Διαδοχικές αφαιρέσεις του διαιρέτη μας δίνουν το υπό-

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Οργάνωση Η/Υ Ενότητα 2η: Αναπαράσταση Πληροφορίας - Σύνολα Εντολών Άσκηση 1: Να αποδείξετε ότι η μοναδική μη προσημασμένη ακέραια

Διαβάστε περισσότερα

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής. Εισαγωγή στους Η/Υ

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής. Εισαγωγή στους Η/Υ Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής Δεύτερη Σειρά Ασκήσεων 21 Απριλίου 2016 παράδοση: 9μμ 19 Μαΐου 2016 Άσκηση 1: Η κλασική αναπαράσταση συμπληρώματος ως προς βάση Β ενός προσημασμένου αριθμού σταθερής

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 2 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής Γιώργος Δημητρίου Μάθημα 2 ο Σύνολα Εντολών Οι εντολές που εκτελεί ο κάθε επεξεργαστής (ή οικογένεια επεξεργαστών) MIPS ARM SPARC PowerPC IA-32 Αρχιτεκτονικές συνόλου εντολών Βασικές Έννοιες Εντολές μηχανής

Διαβάστε περισσότερα

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής. Εισαγωγή στους Η/Υ

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής. Εισαγωγή στους Η/Υ Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής Δεύτερη Σειρά Ασκήσεων 9 Μαΐου 2017 παράδοση: 3μμ 25 Μαΐου Άσκηση 1: Να αποδειχτεί ότι για τη μετατροπή αριθμού από σύστημα με βάση p σε σύστημα με βάση q, όπου

Διαβάστε περισσότερα

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Οργάνωση Η/Υ Ενότητα 1η: Εισαγωγή στην Οργάνωση Η/Υ Άσκηση 1: Αναλύστε τη διαδοχική εκτέλεση των παρακάτω εντολών MIPS με βάση τις

Διαβάστε περισσότερα

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

Οργάνωση Υπολογιστών Οργάνωση Υπολογιστών Επιμέλεια: Γεώργιος Θεοδωρίδης, Επίκουρος Καθηγητής Ανδρέας Εμερετλής, Υποψήφιος Διδάκτορας Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών 1 Άδειες Χρήσης Το παρόν υλικό

Διαβάστε περισσότερα

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Αρχιτεκτονική Υπολογιστών Άσκηση 6: Ασκήσεις Εξαμήνου Μέρος Β Νοέμβριος 2016 Στην άσκηση αυτή θα μελετήσουμε την εκτέλεση ενός

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

1 η Ενδιάμεση Εξέταση Απαντήσεις/Λύσεις ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών (ΗΜΜΥ) HMΜY 212 Οργάνωση Η/Υ και Μικροεπεξεργαστές Εαρινό Εξάμηνο, 2007 1 η Ενδιάμεση Εξέταση Απαντήσεις/Λύσεις Άσκηση 1: Σωστό/Λάθος

Διαβάστε περισσότερα

Ελίνα Μακρή

Ελίνα Μακρή Ελίνα Μακρή elmak@unipi.gr Μετατροπή Αριθμητικών Συστημάτων Πράξεις στα Αριθμητικά Συστήματα Σχεδίαση Ψηφιακών Κυκλωμάτων με Logism Άλγεβρα Boole Λογικές Πύλες (AND, OR, NOT, NAND, XOR) Flip Flops (D,

Διαβάστε περισσότερα

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

Οργάνωση Η/Υ. Γιώργος Δημητρίου. Μάθημα 2 ο Σύντομη Επανάληψη. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής Γιώργος Δημητρίου Μάθημα 2 ο Σύντομη Επανάληψη Από την Εισαγωγή στους Η/Υ Γλώσσες Μηχανής Πεδία εντολής Μέθοδοι διευθυνσιοδότησης Αρχιτεκτονικές συνόλου εντολών Κύκλος εντολής Αλγόριθμοι/Υλικό Αριθμητικών

Διαβάστε περισσότερα

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

Αρχιτεκτονική Υπολογιστών Ι Αρχιτεκτονική Υπολογιστών Ι Επιλεγμένες εντολές και συναρτήσεις assembly Από το βιβλίο Αρχιτεκτονική Υπολογιστών & Προγραμματισμός Assembly (Συγγραφέας / Εκδότης : Παναγιώτης Παπάζογλου) Δρ. Παναγιώτης

Διαβάστε περισσότερα

ΕΘΝΙKΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Ονοματεπώνυμο: ΑΜ:

ΕΘΝΙKΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Ονοματεπώνυμο: ΑΜ: ΕΘΝΙKΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Ονοματεπώνυμο: ΑΜ: ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ (τμήμα Μ - Ω) Κανονική εξεταστική Φεβρουαρίου

Διαβάστε περισσότερα

Κεφάλαιο 2. Συστήματα Αρίθμησης και Αναπαράσταση Πληροφορίας. Περιεχόμενα. 2.1 Αριθμητικά Συστήματα. Εισαγωγή

Κεφάλαιο 2. Συστήματα Αρίθμησης και Αναπαράσταση Πληροφορίας. Περιεχόμενα. 2.1 Αριθμητικά Συστήματα. Εισαγωγή Κεφάλαιο. Συστήματα Αρίθμησης και Αναπαράσταση Πληροφορίας Περιεχόμενα. Αριθμητικά συστήματα. Μετατροπή αριθμών από ένα σύστημα σε άλλο.3 Πράξεις στο δυαδικό σύστημα.4 Πράξεις στο δεκαεξαδικό σύστημα.5

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΣΤΗ ΔΙΟΙΚΗΣΗ ΚΑΙ ΣΤΗΝ ΟΙΚΟΝΟΜΙΑ 7 Ο ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΟΣΤΟΛΙΑ ΠΑΓΓΕ Περιεχόμενα 2 Δυαδικό Σύστημα Προσημασμένοι δυαδικοί αριθμοί Αφαίρεση

Διαβάστε περισσότερα

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΣΤΑΘΕΡΕΣ είναι τα μεγέθη που δεν μεταβάλλονται κατά την εκτέλεση ενός αλγόριθμου. Εκτός από τις αριθμητικές σταθερές (7, 4, 3.5, 100 κλπ), τις λογικές σταθερές (αληθής και ψευδής)

Διαβάστε περισσότερα

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

Εντολές γλώσσας μηχανής Εντολές γλώσσας μηχανής Στον υπολογιστή MIPS η εντολή πρόσθεσε τα περιεχόμενα των καταχωρητών 17 και 20 και τοποθέτησε το αποτέλεσμα στον καταχωρητή 9 έχει την μορφή: 00000010001101000100100000100000 Πεδία

Διαβάστε περισσότερα

Εισαγωγή στην επιστήμη των υπολογιστών

Εισαγωγή στην επιστήμη των υπολογιστών Εισαγωγή στην επιστήμη των υπολογιστών Υπολογιστές και Δεδομένα Κεφάλαιο 3ο Αναπαράσταση Αριθμών www.di.uoa.gr/~organosi 1 Δεκαδικό και Δυαδικό Δεκαδικό σύστημα 2 3 Δεκαδικό και Δυαδικό Δυαδικό Σύστημα

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 3: Πίνακες, βρόχοι, συναρτήσεις 1 Ιουνίου 2017 Το σημερινό εργαστήριο

Διαβάστε περισσότερα

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Οργάνωση Η/Υ Ενότητα 4η: Μονάδα Ελέγχου Απλού Κύκλου Μηχανής Άσκηση 1: Θεωρήστε τη μονάδα επεξεργασίας δεδομένων της απλοποιημένης

Διαβάστε περισσότερα

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Παραδείγματα Ενοτήτων 7-9 Ενότητα 7: Ενδιάμεσος κώδικας Άσκηση 7-1: Θεωρήστε τη γλώσσα προγραμματισμού C με τη γνωστή γραμματική

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ Κ. Δεμέστιχας Εργαστήριο Πληροφορικής Γεωπονικό Πανεπιστήμιο Αθηνών Επικοινωνία μέσω e-mail: cdemest@aua.gr, cdemest@cn.ntua.gr 1 2. ΑΡΙΘΜΗΤΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ ΜΕΡΟΣ Α 2 Τεχνολογία

Διαβάστε περισσότερα

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Άσκηση 6: Ασκήσεις Χειμερινού Εξαμήνου 2017-2018 (μέρος Β ) Στην άσκηση αυτή θα μελετήσουμε την εκτέλεση

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΠΡΩΤΗ ΠΡΟΟΔΟΣ ΣΤΗΝ «ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Y» ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΠΡΩΤΗ ΠΡΟΟΔΟΣ ΣΤΗΝ «ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Y» Σάββατο, 31 Οκτωβρίου 2015 ΔΙΑΡΚΕΙΑ ΔΙΑΓΩΝΙΣΜΑΤΟΣ 150 ΛΕΠΤΑ ΘΕΜΑ 1.

Διαβάστε περισσότερα

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

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Συστήματα αρίθμησης. = α n-1 *b n-1 + a n-2 *b n-2 + +a 1 b 1 + a 0 όπου τα 0 a i b-1

Συστήματα αρίθμησης. = α n-1 *b n-1 + a n-2 *b n-2 + +a 1 b 1 + a 0 όπου τα 0 a i b-1 Συστήματα αρίθμησης Δεκαδικό σύστημα αρίθμησης 1402 = 1000 + 400 +2 =1*10 3 + 4*10 2 + 0*10 1 + 2*10 0 Γενικά σε ένα σύστημα αρίθμησης με βάση το b N, ένας ακέραιος αριθμός με n ψηφία παριστάνεται ως:

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Οργάνωση Υπολογιστών Οργάνωση Υπολογιστών Επιμέλεια: Γεώργιος Θεοδωρίδης, Επίκουρος Καθηγητής Ανδρέας Εμερετλής, Υποψήφιος Διδάκτορας Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών 1 Άδειες Χρήσης Το παρόν υλικό

Διαβάστε περισσότερα

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

Πανεπιστήµιο Θεσσαλίας Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ικτύων Πανεπιστήµιο Θεσσαλίας Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ικτύων Αρχιτεκτονική Υπολογιστών Εργασία Εξαµήνου: Προσοµοίωση ARM σε επίπεδο VHDL/Verilog 1. Μελέτη συνόλου εντολών και αρχιτεκτονικής ARM

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ I Ενότητα 6

ΠΛΗΡΟΦΟΡΙΚΗ I Ενότητα 6 ΠΛΗΡΟΦΟΡΙΚΗ I Ενότητα 6 ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ Bits & Bytes Bit: η μικρότερη μονάδα πληροφορίας μία από δύο πιθανές καταστάσεις (ναι / όχι, αληθές / ψευδές, n / ff) κωδικοποίηση σε 0 ή 1 δυαδικό σύστημα

Διαβάστε περισσότερα

Αριθμητικά Συστήματα

Αριθμητικά Συστήματα Αριθμητικά Συστήματα Σε οποιοδήποτε αριθμητικό σύστημα, με βάση τον αριθμό Β, ένας ακέραιος αριθμός με πλήθος ψηφίων ν, εκφράζεται ως ακολούθως: α ν-1 α ν-2 α 1 α 0 = α ν-1 Β ν-1 + α ν-2 Β ν-2 + + α 1

Διαβάστε περισσότερα

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της; 1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες (μορφές) της; Η δομή επανάληψης χρησιμοποιείται όταν μια σειρά εντολών πρέπει να εκτελεστεί σε ένα σύνολο περιπτώσεων, που έχουν κάτι

Διαβάστε περισσότερα

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;

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; Άσκηση 1 η Μέρος Α Ζητούμενο: Δίνεται το παρακάτω πρόγραμμα σε C καθώς και μια μετάφραση του σε assembly MIPS. Συμπληρώστε τα κενά. Σας υπενθυμίζουμε ότι ο καταχωρητής $0 (ή $zero) είναι πάντα μηδέν. int

Διαβάστε περισσότερα

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

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:

Διαβάστε περισσότερα

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

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

d k 10 k + d k 1 10 k d d = k i=0 d i 10 i.

d k 10 k + d k 1 10 k d d = k i=0 d i 10 i. Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων

Διαβάστε περισσότερα

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Εισαγωγή στην Πληροφορική & τον Προγραμματισμό Ενότητα 3 η : Κωδικοποίηση & Παράσταση Δεδομένων Ι. Ψαρομήλιγκος Χ. Κυτάγιας Τμήμα

Διαβάστε περισσότερα

ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Κεφάλαιο 3

ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Κεφάλαιο 3 ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 3 Κεντρική Μονάδα Επεξεργασίας Κεντρική Μονάδα Επεξεργασίας Μονάδα επεξεργασίας δεδομένων Μονάδα ελέγχου Μονάδα επεξεργασίας δεδομένων Δομή Αριθμητικής Λογικής Μονάδας

Διαβάστε περισσότερα

Δυαδικό Σύστημα Αρίθμησης

Δυαδικό Σύστημα Αρίθμησης Δυαδικό Σύστημα Αρίθμησης Το δυαδικό σύστημα αρίθμησης χρησιμοποιεί δύο ψηφία. Το 0 και το 1. Τα ψηφία ενός αριθμού στο δυαδικό σύστημα αρίθμησης αντιστοιχίζονται σε δυνάμεις του 2. Μονάδες, δυάδες, τετράδες,

Διαβάστε περισσότερα

1 Αριθμητική κινητής υποδιαστολής και σφάλματα στρογγύλευσης

1 Αριθμητική κινητής υποδιαστολής και σφάλματα στρογγύλευσης 1 Αριθμητική κινητής υποδιαστολής και σφάλματα στρογγύλευσης Στη συγκεκριμένη ενότητα εξετάζουμε θέματα σχετικά με την αριθμητική πεπερασμένης ακρίβειας που χρησιμοποιούν οι σημερινοί υπολογιστές και τα

Διαβάστε περισσότερα

2. ΑΡΙΘΜΗΤΙΚΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. 2.1 Αριθμητικά συστήματα

2. ΑΡΙΘΜΗΤΙΚΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. 2.1 Αριθμητικά συστήματα 2. ΑΡΙΘΜΗΤΙΚΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ 2.1 Αριθμητικά συστήματα Κάθε πραγματικός αριθμός χ μπορεί να παρασταθεί σε ένα αριθμητικό σύστημα με βάση β>1 με μια δυναμοσειρά της μορφής, -οο * = ± Σ ψ β " (2 1) η - ν

Διαβάστε περισσότερα

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ Θέμα Α ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ 2016-2017 Πάτρα 3/5/2017 Ονοματεπώνυμο:.. Α1. Να γράψετε στην κόλλα σας τον αριθμό

Διαβάστε περισσότερα

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ 1) Πότε χρησιμοποιείται η δομή επανάληψης

Διαβάστε περισσότερα

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

Οργάνωση Η/Υ. Ο Επεξεργαστής TRN. Τμήμα Εφαρμοσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Α. Χατζηγεωργίου-Η. Σακελλαρίου Οργάνωση Η/Υ Ο Επεξεργαστής TRN Τμήμα Εφαρμοσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Α. Χατζηγεωργίου-Η. Σακελλαρίου ΚMΕ Κυριότεροι Καταχωρητές της ΚΜΕ του υπολογιστή TRN IR (20 bits) X (20 bits) I

Διαβάστε περισσότερα

Πρόγραμμα Επικαιροποίησης Γνώσεων Αποφοίτων ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ

Πρόγραμμα Επικαιροποίησης Γνώσεων Αποφοίτων ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ Πρόγραμμα Επικαιροποίησης Γνώσεων Αποφοίτων ΕΝΟΤΗΤΑ Μ1 ΨΗΦΙΑΚΑ ΗΛΕΚΤΡΟΝΙΚΑ Εκπαιδευτής: Γ. Π. ΠΑΤΣΗΣ, Επικ. Καθηγητής, Τμήμα Ηλεκτρονικών Μηχανικών, ΤΕΙ Αθήνας ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ 1. Ποια είναι η βάση

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ 2013-2014

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ 2013-2014 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ 2013-2014 Επιμέλεια: Ομάδα Διαγωνισμάτων από το Στέκι των Πληροφορικών Θέμα Α A1. Να γράψετε στο τετράδιό σας τους

Διαβάστε περισσότερα

Αριθμητική Ανάλυση & Εφαρμογές

Αριθμητική Ανάλυση & Εφαρμογές Αριθμητική Ανάλυση & Εφαρμογές Διδάσκων: Δημήτριος Ι. Φωτιάδης Τμήμα Μηχανικών Επιστήμης Υλικών Ιωάννινα 2017-2018 Υπολογισμοί και Σφάλματα Παράσταση Πραγματικών Αριθμών Συστήματα Αριθμών Παράσταση Ακέραιου

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

Διαβάστε περισσότερα

1. ΣΥΣΤΗΜΑΤΑ ΑΡΙΘΜΩΝ. α i. (α i β i ) (1.3) όπου: η= το πλήθος ακεραίων ψηφίων του αριθμού Ν. n-1

1. ΣΥΣΤΗΜΑΤΑ ΑΡΙΘΜΩΝ. α i. (α i β i ) (1.3) όπου: η= το πλήθος ακεραίων ψηφίων του αριθμού Ν. n-1 1. ΣΥΣΤΗΜΑΤΑ ΑΡΙΘΜΩΝ 1.1 Εισαγωγή Το δεκαδικό σύστημα (Decimal System) αρίθμησης χρησιμοποιείται από τον άνθρωπο και είναι κατάλληλο βέβαια γι αυτόν, είναι όμως εντελώς ακατάλληλο για τις ηλεκτρονικές

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ I. 4 η ΔΙΑΛΕΞΗ Αριθμητικά Συστήματα

ΠΛΗΡΟΦΟΡΙΚΗ I. 4 η ΔΙΑΛΕΞΗ Αριθμητικά Συστήματα ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ - ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ ΕΙΣΑΓΩΓΙΚΗ ΚΑΤΕΥΘΥΝΣΗ ΤΟΥΡΙΣΤΙΚΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ ΚΑΙ ΕΠΙΧΕΙΡΗΣΕΩΝ ΦΙΛΟΞΕΝΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗ I 4 η ΔΙΑΛΕΞΗ Αριθμητικά Συστήματα ΧΑΣΑΝΗΣ ΒΑΣΙΛΕΙΟΣ

Διαβάστε περισσότερα

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

Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής. Οργάνωση Η/Υ. Γιώργος ηµητρίου. Μάθηµα 2 ο Σύντοµη Επανάληψη Γιώργος ηµητρίου Μάθηµα 2 ο Σύντοµη Επανάληψη Από την Εισαγωγή στους Η/Υ Γλώσσες Μηχανής n Πεδία εντολής n Μέθοδοι διευθυνσιοδότησης n Αρχιτεκτονικές συνόλου εντολών n Κύκλος εντολής Αλγόριθµοι/Υλικό Αριθµητικών

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ Κ. Δεμέστιχας Εργαστήριο Πληροφορικής Γεωπονικό Πανεπιστήμιο Αθηνών Επικοινωνία μέσω e-mail: cdemest@aua.gr, cdemest@cn.ntua.gr 3. ΑΡΙΘΜΗΤΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ ΜΕΡΟΣ Β Παράσταση Προσημασμένων

Διαβάστε περισσότερα

Εργαστήριο ΨΗΦΙΑΚΗ ΛΟΓΙΚΗ. Εισαγωγή

Εργαστήριο ΨΗΦΙΑΚΗ ΛΟΓΙΚΗ. Εισαγωγή Εισαγωγή Εργαστήριο ΨΗΦΙΑΚΗ ΛΟΓΙΚΗ Ξεκινάµε την εργαστηριακή µελέτη της Ψηφιακής Λογικής των Η/Υ εξετάζοντας αρχικά τη µορφή των δεδοµένων που αποθηκεύουν και επεξεργάζονται οι υπολογιστές και προχωρώντας

Διαβάστε περισσότερα

Λογική Σχεδίαση Ψηφιακών Συστημάτων

Λογική Σχεδίαση Ψηφιακών Συστημάτων Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής Λογική Σχεδίαση Ψηφιακών Συστημάτων Σταμούλης Γεώργιος georges@uth.gr Δαδαλιάρης Αντώνιος dadaliaris@uth.gr Δυαδικοί Αριθμοί Η γενική αναπαράσταση ενός οποιουδήποτε

Διαβάστε περισσότερα

Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Πληροφορική Ι. Αναπαράσταση αριθμών στο δυαδικό σύστημα. Δρ.

Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Πληροφορική Ι. Αναπαράσταση αριθμών στο δυαδικό σύστημα. Δρ. Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας Πληροφορική Ι Αναπαράσταση αριθμών στο δυαδικό σύστημα Δρ. Γκόγκος Χρήστος Δεκαδικό σύστημα αρίθμησης Ελληνικό - Ρωμαϊκό Σύστημα αρίθμησης

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Σύστημα Πλεονάσματος και Αναπαράσταση Αριθμών Κινητής Υποδιαστολής

Σύστημα Πλεονάσματος και Αναπαράσταση Αριθμών Κινητής Υποδιαστολής Σύστημα Πλεονάσματος και Αναπαράσταση Αριθμών Κινητής Υποδιαστολής Σύστημα Πλεονάσματος (Excess System) - 1 Είναι μια άλλη μια μορφή αναπαράστασης για αποθήκευση θετικών και αρνητικών ακεραίων σε έναν

Διαβάστε περισσότερα

Σύστημα Πλεονάσματος. Αναπαράσταση Πραγματικών Αριθμών. Αριθμητικές Πράξεις σε Αριθμούς Κινητής Υποδιαστολής

Σύστημα Πλεονάσματος. Αναπαράσταση Πραγματικών Αριθμών. Αριθμητικές Πράξεις σε Αριθμούς Κινητής Υποδιαστολής Σύστημα Πλεονάσματος Αναπαράσταση Πραγματικών Αριθμών Αριθμητικές Πράξεις σε Αριθμούς Κινητής Υποδιαστολής Σύστημα Πλεονάσματος (Excess System) - 1 Είναι μια άλλη μια μορφή αναπαράστασης για αποθήκευση

Διαβάστε περισσότερα

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

Αρχιτεκτονική Υπολογιστών Ι Αρχιτεκτονική Υπολογιστών Ι ΥΠΟΔΕΙΞΕΙΣ ΓΙΑ ΤΗ ΛΥΣΗ ΤΩΝ ΕΡΓΑΣΤΗΡΙΑΚΩΝ ΑΣΚΗΣΕΩΝ Από το βιβλίο Αρχιτεκτονική Υπολογιστών & Προγραμματισμός Assembly (Συγγραφέας / Εκδότης : Παναγιώτης Παπάζογλου) Δρ. Παναγιώτης

Διαβάστε περισσότερα

ΠΛΗ21 Κεφάλαιο 2. ΠΛΗ21 Ψηφιακά Συστήματα: Τόμος Α Κεφάλαιο: Παράσταση Προσημασμένων Αριθμών Συμπληρώματα

ΠΛΗ21 Κεφάλαιο 2. ΠΛΗ21 Ψηφιακά Συστήματα: Τόμος Α Κεφάλαιο: Παράσταση Προσημασμένων Αριθμών Συμπληρώματα Ψηφιακά Συστήματα: Τόμος Α Κεφάλαιο: 2 2.3.4 Παράσταση Προσημασμένων Αριθμών Συμπληρώματα Στόχοι του κεφαλαίου είναι να γνωρίσουμε: Τι είναι ένας Συμπλήρωμα ενός αριθμού πρακτικά Τι είναι Συμπλήρωμα ως

Διαβάστε περισσότερα

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

ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Υ ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Υ Γιώργος Δημητρίου Μάθημα 5 ο ΠΜΣ Εφαρμοσμένη Πληροφορική ΣΥΝΟΛΙΚΗ ΔΟΜΗ ΚΜΕ Μία ή περισσότερες μονάδες αριθμητικών και λογικών πράξεων Μονάδα ολίσθησης Φάκελος καταχωρητών γενικού

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα

Διαβάστε περισσότερα

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

Αρχιτεκτονική Υπολογιστών Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 5: Εντολές αλλαγής ροής. Διακλάδωση χωρίς συνθήκη. Διακλάδωση με συνθήκη. Δρ. Μηνάς Δασυγένης

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑ ΣΠΟΥ ΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΡΟΓΡΑΜΜΑ ΣΠΟΥ ΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥ ΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Θεµατική Ενότητα ΠΛΗ 21: Ψηφιακά Συστήµατα Ακαδηµαϊκό Έτος 2009 2010 Γραπτή Εργασία #3 Παράδοση: 28 Μαρτίου 2010 Άσκηση 1 (15 µονάδες) Ένας επεξεργαστής υποστηρίζει τόσο

Διαβάστε περισσότερα

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

ΕΠΛ605 Εργασία 1 Ημερομηνία Παράδοσης 12/9/2018 στην αρχή του μαθήματος ΕΠΛ605 Εργασία 1 Ημερομηνία Παράδοσης 12/9/2018 στην αρχή του μαθήματος Ε.1 Σας δίνεται ο πιο κάτω κώδικας. Ξαναγράψτε τον ώστε να μειωθεί ο αριθμός των εντολών του αλλά διατηρώντας την ίδια λειτουργιά

Διαβάστε περισσότερα

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

Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής. Οργάνωση Η/Υ. Γιώργος Δημητρίου. Μάθημα 3 ο ΜΕΔ απλού κύκλου Γιώργος Δημητρίου Μάθημα 3 ο ΜΕΔ απλού κύκλου Συνολική Δομή ΚΜΕ Μία ή περισσότερες μονάδες αριθμητικών και λογικών πράξεων Μονάδα ολίσθησης Φάκελος καταχωρητών γενικού σκοπού Κρυφή μνήμη (ενοποιημένη ή

Διαβάστε περισσότερα

1 η Θεµατική Ενότητα : Δυαδικά Συστήµατα

1 η Θεµατική Ενότητα : Δυαδικά Συστήµατα 1 η Θεµατική Ενότητα : Δυαδικά Συστήµατα Δεκαδικοί Αριθµοί Βάση : 10 Ψηφία : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Αριθµοί: Συντελεστές Χ δυνάµεις του 10 7392.25 = 7x10 3 + 3x10 2 + 9x10 1 + 2x10 0 + 2x10-1 + 5x10-2

Διαβάστε περισσότερα

! Εάν ο αριθμός διαθέτει περισσότερα bits, χρησιμοποιούμε μεγαλύτερες δυνάμεις του 2. ! Προσοχή στη θέση του περισσότερο σημαντικού bit!

! Εάν ο αριθμός διαθέτει περισσότερα bits, χρησιμοποιούμε μεγαλύτερες δυνάμεις του 2. ! Προσοχή στη θέση του περισσότερο σημαντικού bit! Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 25-6 Πράξεις με δυαδικούς αριθμούς (αριθμητικές ) http://di.ionio.gr/~mistral/tp/csintro/ Αριθμοί Πράξεις με δυαδικούς αριθμούς

Διαβάστε περισσότερα

ΑΕΠΠ Ερωτήσεις θεωρίας

ΑΕΠΠ Ερωτήσεις θεωρίας ΑΕΠΠ Ερωτήσεις θεωρίας Κεφάλαιο 1 1. Τα δεδομένα μπορούν να παρέχουν πληροφορίες όταν υποβάλλονται σε 2. Το πρόβλημα μεγιστοποίησης των κερδών μιας επιχείρησης είναι πρόβλημα 3. Για την επίλυση ενός προβλήματος

Διαβάστε περισσότερα

Πράξεις με δυαδικούς αριθμούς

Πράξεις με δυαδικούς αριθμούς Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 25-6 Πράξεις με δυαδικούς αριθμούς (αριθμητικές πράξεις) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Πράξεις με δυαδικούς

Διαβάστε περισσότερα

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

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. Τρίτη (3 η ) δίωρη διάλεξη. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή Τρίτη (3 η ) δίωρη διάλεξη. Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο

Διαβάστε περισσότερα

2η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ Ακ. έτος , 5ο Εξάμηνο Σχολή ΗΜ&ΜΥ

2η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ Ακ. έτος , 5ο Εξάμηνο Σχολή ΗΜ&ΜΥ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ Ε Ρ Γ Α Σ Τ ΗΡ ΙΟ Υ ΠΟΛΟΓΙΣ Τ Ι Κ Ω Ν Σ Υ Σ Τ ΗΜΑΤΩΝ w w w. c s l ab.

Διαβάστε περισσότερα

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

Αρχιτεκτονική υπολογιστών 1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Αρχιτεκτονική υπολογιστών Ενότητα 9 : Ομάδες Εντολών: Ιδιότητες και Λειτουργίες Ευάγγελος Καρβούνης Παρασκευή, 15/01/2016 Τι είναι ομάδα εντολών;

Διαβάστε περισσότερα

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

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Κώδικας μηχανής (E) Ο επεξεργαστής μπορεί να εκτελέσει το αρχιτεκτονικό σύνολο εντολών (instruction set architecture) Οι

Διαβάστε περισσότερα

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών ΠΜΣ Εφαρμοσμένη Πληροφορική Οργάνωση και Σχεδίαση Η/Υ Πρώτη Σειρά Ασκήσεων 7 Απριλίου 2017 ενδεικτική παράδοση: 5 Μαΐου Για

Διαβάστε περισσότερα

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

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 3 Εντολές του MIPS (2) ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών Διάλεξη 3 Εντολές του MIPS (2) Νίκος Μπέλλας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Y Παράδειγμα (συνέχεια από προηγ. διάλεξη) $s3 = &A[0] = 0x0001080 &A[8]

Διαβάστε περισσότερα

Αριθµητική υπολογιστών

Αριθµητική υπολογιστών Αριθµητική υπολογιστών Μιχάλης ρακόπουλος Υπολογιστική Επιστήµη & Τεχνολογία, #03 1 εκαδικό σύστηµα αρίθµησης Βάση το 10. 10 ψηφία: 0 1 2 3 4 5 6 7 8 9 1 δεκαδικό ψηφίο εκφράζει 1 από 10 πιθανές επιλογές

Διαβάστε περισσότερα

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

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ Νο 07 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και

Διαβάστε περισσότερα

Ψηφιακά Συστήματα. 1. Συστήματα Αριθμών

Ψηφιακά Συστήματα. 1. Συστήματα Αριθμών Ψηφιακά Συστήματα 1. Συστήματα Αριθμών Βιβλιογραφία 1. Φανουράκης Κ., Πάτσης Γ., Τσακιρίδης Ο., Θεωρία και Ασκήσεις Ψηφιακών Ηλεκτρονικών, ΜΑΡΙΑ ΠΑΡΙΚΟΥ & ΣΙΑ ΕΠΕ, 2016. [59382199] 2. Floyd Thomas L.,

Διαβάστε περισσότερα

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

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ: ΠΛΗ-21 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ: ΠΛΗ-2 ΨΗΦΙΑΚΗ ΣΧΕΔΙΑΣΗ ΑΣΚΗΣΕΙΙΣ ΓΡΑΠΤΩΝ ΕΡΓΑΣΙΙΩΝ & ΘΕΜΑΤΩΝ ΕΞΕΤΑΣΕΩΝ ΣΥΝΤΕΛΕΣΤΕΣ

Διαβάστε περισσότερα

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

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ 4 ο Εξάμηνο Μαδεμλής Ιωάννης ΕΡΓΑΣΤΗΡΙΟ 3 ΤΕΙ ΣΕΡΡΩΝ Η ΠΡΑΞΗ ΤΗΣ ΑΦΑΙΡΕΣΗΣ Πράξη 1 1 0 1-0 1 1 0 1 1 1 0 1-0 1 1 0 1Δ 1 1 1 1 0 1 0 1 1 0 1Δ 1 1 1 1 1 0 1 0 1 1 0 0 1 1 1

Διαβάστε περισσότερα

γρηγορότερα. Αν θέλουμε να μηδενίσουμε όλα τα υπόλοιπα bit μπορούμε να χρησιμοποιήσουμε την εντολή:

γρηγορότερα. Αν θέλουμε να μηδενίσουμε όλα τα υπόλοιπα bit μπορούμε να χρησιμοποιήσουμε την εντολή: A. Tips 1. Τοποθέτηση σημαίας ή bit ενός καταχωρητή ή μεταβλητής... 2 2. Καθάρισμα σημαίας ή bit ενός καταχωρητή ή μεταβλητής... 2 3. Σύγκριση μονοδιάστατων πινάκων (στο παράδειγμα 5 στοιχείων)... 2 4.

Διαβάστε περισσότερα

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Αρχιτεκτονική Υπολογιστών Άσκηση 11 (εργαστηριακή): Ασκήσεις Εξαμήνου Μέρος Γ Δεκέμβριος 2016 Γράψτε ένα πρόγραμμα προσομοίωσης

Διαβάστε περισσότερα

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Άσκηση : Λυμένες Ασκήσεις Έστω ένα σύστημα μνήμης, στο οποίο έχουμε προσθέσει μια κρυφή μνήμη θυμάτων 6 θέσεων

Διαβάστε περισσότερα

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 11 ο και 12 ο

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 11 ο και 12 ο Γιώργος Δημητρίου Μάθημα 11 ο και 12 ο Μονάδες ράξεων Αριθμητική/Λογική Μονάδα (ΑΛΜ - ALU): Βασικές αριθμητικές πράξεις ρόσθεση/αφαίρεση Λογικές πράξεις Μονάδες πολύπλοκων αριθμητικών πράξεων σταθερής

Διαβάστε περισσότερα

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

Εντολές του MIPS (2) ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι Διάλεξη 3 Εντολές του MIPS (2) Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων 1 Παράδειγμα (συνέχεια από προηγ. διάλεξη) $s3

Διαβάστε περισσότερα

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η Μονοδιάστατοι Πίνακες Τι είναι ο πίνακας γενικά : Πίνακας είναι μια Στατική Δομή Δεδομένων. Δηλαδή συνεχόμενες θέσεις μνήμης, όπου το πλήθος των θέσεων είναι συγκεκριμένο. Στις θέσεις αυτές καταχωρούμε

Διαβάστε περισσότερα

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

Διαδικασίες Ι. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 4 ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι Διάλεξη 4 Διαδικασίες Ι Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Εισαγωγή στους Η/Υ (ΗΥ134) 1 Διευθυνσιοδότηση διακλαδώσεων

Διαβάστε περισσότερα

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

1 η Άσκηση Στην Αρχιτεκτονική Υπολογιστών η Άσκηση Στην Αρχιτεκτονική Υπολογιστών Ακ. Έτος 203 204, 5 ο Εξάμηνο, Σχολή ΗΜ&ΜΥ Τμήμα Λ - Ω Ημερομηνία Παράδοσης: 20/2/203 Απορίες στο: ca203-204t2@cslab.ece.ntua.gr Μέρος Α Δίνονται τα παρακάτω δύο

Διαβάστε περισσότερα

4.4 Μετατροπή από μία μορφή δομής επανάληψης σε μία άλλη.

4.4 Μετατροπή από μία μορφή δομής επανάληψης σε μία άλλη. 4.4 Μετατροπή από μία μορφή δομής επανάληψης σε μία άλλη. Η μετατροπή μιας εντολής επανάληψης σε μία άλλη ή στις άλλες δύο εντολές επανάληψης, αποτελεί ένα θέμα που αρκετές φορές έχει εξεταστεί σε πανελλαδικό

Διαβάστε περισσότερα

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Μέρος Β (Οργάνωση Υπολογιστών)

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Μέρος Β (Οργάνωση Υπολογιστών) ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ και ΥΠΟΛΟΓΙΣΤΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Μέρος Β (Οργάνωση Υπολογιστών)

Διαβάστε περισσότερα

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ ) Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ. 25 48) Τι είναι αλγόριθμος; Γ ΛΥΚΕΙΟΥ Αλγόριθμος είναι μία πεπερασμένη σειρά ενεργειών, αυστηρά καθορισμένων και εκτελέσιμων σε πεπερασμένο χρονικό διάστημα,

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

Διαβάστε περισσότερα

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Φροντιστήριο: MIPS assembly

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Φροντιστήριο: MIPS assembly ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Φροντιστήριο: MIPS assembly Αρης Ευθυμίου Το σημερινό μάθημα! Σύνταξη εντολών! Θέματα σχετικά με τη προσπέλαση, οργάνωση μνήμης διευθύνση για κάθε byte διευθύνσεις λέξεων

Διαβάστε περισσότερα