Δρ. Παναγιώτης Μ. Παπάζογλου Επίκουρος Καθηγητής ΤΕΙ Λαμίας. Διδακτικό βοήθημα γρήγορης μελέτης για τον προγραμματισμό του μικροεπεξεργαστή MIPS 32bit



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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εργαστήριο 2. Εαρινό Εξάμηνο Εντολές για είσοδο ακεραίων αριθμών από την κονσόλα:

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

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

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

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

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

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

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

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

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

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

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

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

9. Εντολές επανάληψηςκαι η εντολή

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ ΓΛΩΣΣΟΜΑΘΕΙΑ

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

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

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

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

Γλώσσα Προγραμματισμού C

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

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Κεφάλαιο : Επαναλήψεις (o βρόγχος While) (Διάλεξη 9) Δομές Έλεγχου Προγράμματος

Μάθημα 3.2: Κεντρική Μονάδα Επεξεργασίας

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

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

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

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

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

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

Μεθόδων Επίλυσης Προβλημάτων

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Πολλαπλασιασμός και Διαίρεση Ακεραίων

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

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

Chapter 3 Αριθμητική Υπολογιστών

Μάθημα 4: Κεντρική Μονάδα Επεξεργασίας

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

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

Ελίνα Μακρή

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

ΘΕΜΑ : ΣΥΣΤΗΜΑΤΑ ΑΡΙΘΜΗΣΗΣ. ΔΙΑΡΚΕΙΑ: 1 περιόδους. 22/1/ :11 Όνομα: Λεκάκης Κωνσταντίνος καθ. Τεχνολογίας

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

Εισαγωγή στον Προγραμματισμό

Η γλώσσα προγραμματισμού C

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

4. Επιλογή και Επανάληψη

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

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

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

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

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

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

Άσκηση 1 (α) Άσκηση 1 (γ) Άσκηση 1 (β) Παραδείγματα Assembly. Άρα με έλεγχο στον $t1 αποφασίζω αν είναι 0 ή 1.

Υπολογιστές Ι. Άδειες Χρήσης. Εισαγωγή. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης


Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

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

Pascal, απλοί τύποι, τελεστές και εκφράσεις

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

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ (ΟΜΑΔΑ ΘΕΜΑΤΩΝ A)

Chapter 3. Αριθμητική Υπολογιστών. Έβδομη (7 η ) δίωρη διάλεξη. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

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

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τα επιμέρους τμήματα Η ΟΜΗ TOY ΥΠΟΛΟΓΙΣΤΗ. Αναπαράσταση μεγεθών. Αναλογική αναπαράσταση ΚΕΝΤΡΙΚΗ ΜΝΗΜΗ ΜΟΝΑ Α ΕΛΕΓΧΟΥ

Τρόποι Διευθυνσιοδότησης

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

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

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

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

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

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

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

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

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

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

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

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

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

Η γλώσσα προγραμματισμού C

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

Transcript:

Δρ. Παναγιώτης Μ. Παπάζογλου Επίκουρος Καθηγητής ΤΕΙ Λαμίας Διδακτικό βοήθημα γρήγορης μελέτης για τον προγραμματισμό του μικροεπεξεργαστή MIPS 32bit Το υλικό του οδηγού έχει αντικατασταθεί από το βιβλίο του μαθήματος ενώ παρόμοιος οδηγός γρήγορης μελέτης υπάρχει στο αντίστοιχο DVD.

Εισαγωγικό σημείωμα Αυτός ο οδηγός περιέχει βοηθητικό εκπαιδευτικό υλικό το οποίο μπορεί να χρησιμοποιηθεί συμπληρωματικά ως προς τις αντίστοιχες σημειώσεις του εργαστηρίου. Ο στόχος του είναι να βοηθήσει στην οργάνωση της μελέτης του υλικού των σημειώσεων ειδικά για όσους θεωρούν ότι βρίσκονται αντιμέτωποι με ένα εκτεταμένο εκπαιδευτικό υλικό. Αυτός ο οδηγός είναι το αποτέλεσμα επίπονων προσπαθειών προκειμένου να προσαρμόσω τις διαδικασίες μεταφοράς γνώσης σύμφωνα με τις πραγματικές ανάγκες των σημερινών σπουδαστών. Στο υλικό που περιέχεται υπάρχει το ενδεχόμενο να εντοπίσετε και λάθη εκ παραδρομής αφού το υλικό οργανώθηκε γρήγορα προκειμένου να προλάβουμε τις επερχόμενες γραπτές εξετάσεις του εργαστηρίου. Κάθε δική σας παρατήρηση είναι ευπρόσδεκτη για συζήτηση προκειμένου να βελτιωθεί το εκπαιδευτικό υλικό και να μεγιστοποιηθεί το εκπαιδευτικό αποτέλεσμα. Μη διστάσετε να επικοινωνήσετε μαζί μου για οποιοδήποτε θέμα έχει προκύψει και σχετίζεται με τα μαθήματα που διδάσκω. Δρ. Παναγιώτης Μ. Παπάζογλου Επίκουρος Καθηγητής Πρώτη έκδοση Νοέμβριος 2009 Email: p.m.papazoglou@hotmail.com Web: http://www.papaz.gr Προσοχή Αυτός ο οδηγός είναι βοηθητικός και δεν αντικαθιστά τις σημειώσεις ή το βιβλίο του μαθήματος

ΕΝΟΤΗΤΑ 1 1.1 Η γενική δομή του μικροεπεξεργαστή ΑΛΜ Μονάδα Ελέγχου Μνήμη Καταχωρητές Γενικής & Ειδικής Χρήσης Είσοδος / Έξοδος ΚΜΕ ΑΛΜ : Αριθμητική και Λογική μονάδα. Εκτελεί αριθμητικές (π.χ. 1+1=2) και λογικές (1 AND 1=1) πράξεις. Μονάδα ελέγχου : Συγχρονίζει τις λειτουργίες του μικροεπεξεργαστή (π.χ. για αποκωδικοποίηση εντολών, μεταφορά δεδομένων από καταχωρητές στην ΑΛΜ, κλπ). Καταχωρητές : περιοχές περιορισμένης και προσωρινής αποθήκευσης εντός του μικροεπεξεργαστή με συγκεκριμένη ονομασία και υλοποιημένες με συγκεκριμένα ψηφιακά κυκλώματα. 3 Παναγιώτης Μ. Παπάζογλου

1.2 Εύρος καταχωρητών Ο μικροεπεξεργαστής MIPS διαθέτει 32 καταχωρητές γενικής χρήσης των 32bit. Τι σημαίνει καταχωρητής 32bit ; (μη προσημασμένοι αριθμοί) Πλήθος τιμών που μπορεί να φιλοξενήσει : 2 32 =4294967296 Ελάχιστη τιμή : 0000000000 Μέγιστη τιμή : 4294967295 (2 32-1) (προσημασμένοι αριθμοί) Αν το περισσότερο σημαντικό bit χρησιμοποιηθεί για την αναπαράσταση του προσήμου (0=θετικός, 1=αρνητικός) τότε από τα αρχικά n bit απομένουν (n-1) bit για το μέτρο του αριθμού (μέγιστος θετικός 2 (n-1) -1 ή 2 (32-1) -1 για καταχωρητή 32bit). 4 Παναγιώτης Μ. Παπάζογλου

1.3 Μοντέλο οργάνωση μνήμης 7FFFFFFFH Τμήμα σωρού (Stack Segment) Το τμήμα text φιλοξενεί τις εντολές των προγραμμάτων, ενώ το τμήμα data τα αντίστοιχα δεδομένα. Αξίζει να σημειωθεί επίσης, ότι το τμήμα data χωρίζεται στη 10000000H Δυναμική περιοχή Στατική περιοχή Τμήμα δεδομένων (Data segment) στατική και τη δυναμική περιοχή. Όταν ο όγκος των δεδομένων υπερβεί τα όρια της στατικής 4000000H 0 Τμήμα προγράμματος (Text segment) Δεσμευμένο περιοχής, τότε η αποθήκευση συνεχίζεται στη δυναμική περιοχή η οποία αυξάνεται κατά τέτοιο τρόπο ώστε να υπάρχουν πολύ μικρές πιθανότητες να προκύψει σύγκρουση με το τμήμα του σωρού (stack). Τέλος, στις πρώτες διευθύνσεις της μνήμης υπάρχει ένα δεσμευμένο τμήμα για τη λειτουργία του ίδιου του συστήματος. 5 Παναγιώτης Μ. Παπάζογλου

1.4 Μερικοί καταχωρητές Βασική ονομασία t0, t1, t2 a0, a1 v0,v1 Χρήση μέσα στο πρόγραμμα $t0,$t1,$t2 $a0,$a1 $v0,$v1 6 Παναγιώτης Μ. Παπάζογλου

ΕΝΟΤΗΤΑ 2Α 2Α.1 Μερικές εντολές 1 Φόρτωση ακέραιης τιμής σε καταχωρητή li καταχωρητής, τιμή π.χ. li $v0,4 #$v0=4 2 Φόρτωση τιμής από καταχωρητή σε καταχωρητή move καταχωρητής1, καταχωρητής2 π.χ. move $t1,$v0 #$t1=$v0 3 Φόρτωση διεύθυνσης σε καταχωρητή la καταχωρητής, ετικέτα π.χ. la $a0,panayotis #$a0=[panayotis] 4 Κλήση συνάρτησης Το σύμβολο # δηλώνει ότι αυτό που ακολουθεί είναι σχόλιο και δεν παίζει κανένα ρόλο στην εκτέλεση του προγράμματος. 7 Παναγιώτης Μ. Παπάζογλου

2Α.2 Βασικές συναρτήσεις συστήματος Το περιβάλλον PC-SPIM υποστηρίζει ορισμένες συναρτήσεις για την είσοδο και έξοδο δεδομένων. Η κλήση κάθε συνάρτησης γίνεται πάντα με τον ίδιο τρόπο. Ο τρόπος κλήσης καθορίζεται από σχετικό πίνακα του κατασκευαστή. Λειτουργία συνάρτησης Εμφάνιση μηνύματος Διάβασμα ακέραιου αριθμού Εμφάνιση ακέραιου αριθμού Τερματισμός προγράμματος Αριθμός συνάρτησης ($v0) Ορίσματα (Είσοδος) Αποτέλεσμα (έξοδος) $a0=διεύθυνση 4 (ετικέτα) μηνύματος που θα - εμφανιστεί 5 - Αριθμός που διαβάστηκε ($v0) $a0=ο ακέραιος 1 αριθμός που θα - εμφανιστεί 10 - - Κάθε συνάρτηση αντί για όνομα, έχει ένα μοναδικό αριθμό. Η επιλογή της συνάρτησης γίνεται τοποθετώντας αυτό τον αριθμό στον καταχωρητή $v0. Ανάλογα τη συνάρτηση, μπορεί να απαιτηθεί και καθορισμός πρόσθετων παραμέτρων (πάντα μέσω καταχωρητών). 8 Παναγιώτης Μ. Παπάζογλου

2Α.3 Χρήση συναρτήσεων (1) Εμφάνιση μηνύματος στην οθόνη Αριθμός συνάρτησης : 4 (στο $v0) Καθορισμός διεύθυνσης μηνύματος (στο $a0) Κλήση συνάρτησης li $v0,4 la $a0,ετικέτα Ολοκληρωμένο παράδειγμα.text main: li $v0,4 la $a0,panayotis.data panayotis:.asciiz Hello 9 Παναγιώτης Μ. Παπάζογλου

(2) Ανάγνωση ακέραιου αριθμού από το πληκτρολόγιο Αριθμός συνάρτησης : 5 (στο $v0) Κλήση συνάρτησης li $v0,5 Ο αριθμός που θα διαβαστεί αποθηκεύεται αυτόματα από τη συνάρτηση στο $v0. Παράδειγμα li $v0,5 move $t1,$v0 Σε αυτό το παράδειγμα ο αριθμός που διαβάστηκε (στο $v0 μετά την κλήση της συνάρτησης) αποθηκεύεται προσωρινά στον καταχωρητή $t1, επειδή το $v0 μπορεί να χρησιμοποιηθεί σε κλήση άλλης συνάρτησης με αποτέλεσμα να χάσει το περιεχόμενό του. (3) Εμφάνιση ακέραιου αριθμού στην οθόνη Αριθμός συνάρτησης : 1 (στο $v0) Αριθμός που θα εμφανιστεί (στο $a0) Κλήση συνάρτησης li $v0,1 move $a0,καταχωρητής 10 Παναγιώτης Μ. Παπάζογλου

Παράδειγμα li $v0,1 move $a0,$t1 Σε αυτό το παράδειγμα, θα εμφανιστεί στην οθόνη το περιεχόμενο του $t1. 11 Παναγιώτης Μ. Παπάζογλου

2Α.4 Ασκήσεις (1) Να γραφεί πρόγραμμα που να διαβάζει δύο αριθμούς από το πληκτρολόγιο και στη συνέχεια να τους εμφανίζει στην οθόνη..text 0x00400000 main: #Διάβασε αριθμό Α li $v0,5 move $t1,$v0 ΑΡΧΗ #Διάβασε αριθμό Β li $v0,5 move $t2,$v0 #------------------------------------------------------------------------------------- Διάβασε αριθμούς Εμφάνισε αριθμούς ΤΕΛΟΣ #Εμφάνισε αριθμό Α move $a0,$t1 li $v0,1 #Εμφάνισε αριθμό Β move $a0,$t2 li $v0,1 #------------------------------------------------------------------------------------- #Έξοδος li $v0,10 (2) Να ενσωματωθούν βοηθητικά μηνύματα στο πρόγραμμα της άσκησης (1). 12 Παναγιώτης Μ. Παπάζογλου

ΕΝΟΤΗΤΑ 2Β 2Β.1 Εντολές βασικών αριθμητικών υπολογισμών Πρόσθεση 1 add καταχωρητής1, καταχωρητής2, πηγή π.χ. add $t0,$t1,1 # $t0=$t1+1 add $t0,$t1,$t2 # $t0=$t1+$t2 2 3 4 Αφαίρεση sub καταχωρητής1, καταχωρητής2, πηγή π.χ. sub $t0,$t1,1 # $t0=$t1-1 sub $t0,$t1,$t2 # $t0=$t1-$t2 Πολλαπλασιασμός mul καταχωρητής1, καταχωρητής2, πηγή π.χ. mul $t0,$t1,1 # $t0=$t1*1 mul $t0,$t1,$t2 # $t0=$t1*$t2 Διαίρεση* (πηλίκο), μορφή τριών ορισμάτων) div καταχωρητής1, καταχωρητής2, πηγή π.χ. div $t0,$t1,1 # $t0=$t1/1 div $t0,$t1,$t2 # $t0=$t1/$t2 * μορφή εντολής με τρία ορίσματα 13 Παναγιώτης Μ. Παπάζογλου

2Β.2 Ασκήσεις Παραδείγματα (1) Να γραφεί πρόγραμμα που να προσθέτει δύο αριθμούς (που θα εισάγονται από το πληκτρολόγιο) και να εμφανίζει το αποτέλεσμα στην οθόνη. (2) Να τροποποιηθεί το πρόγραμμα της άσκησης (1) ώστε το αποτέλεσμα να εμφανίζεται στη μορφή (A+B)=Ν (όπου Ν το άθροισμα των δύο αριθμών). (3) Να τροποποιηθεί το πρόγραμμα της άσκησης (2) ώστε το αποτέλεσμα να τυπώνεται παραμετρικά. Για παράδειγμα, αν γίνει εισαγωγή των αριθμών 5 και 2 το πρόγραμμα να εμφανίζει (5+2)=7. Για να εμφανιστεί το άθροισμα στην παραπάνω μορφή θα πρέπει να συνδυαστούν τόσο αλφαριθμητικά όσο και αριθμητικά δεδομένα. Αν για παράδειγμα οι αριθμοί είναι αποθηκευμένοι στους καταχωρητές $t1 και $t2 αντίστοιχα, θα πρέπει να γίνει εμφάνιση με την ακόλουθη σειρά: Αλφαριθμητικό ( Περιεχόμενο $t1 Αλφαριθμητικό + Περιεχόμενο $t2 Αλφαριθμητικό )= Περιεχόμενο $t0 (το οποίο θεωρούμε ότι περιέχει το αποτέλεσμα της πρόσθεσης) 14 Παναγιώτης Μ. Παπάζογλου

Έστω $t1=5, $t2=2 και $t0=7 (μέσω της add $t0,$t1,$t2). Το τμήμα του κώδικα που σχετίζεται με την παραμετρική εμφάνιση είναι: li $v0,4 la $a0,par Κώδικας Αποτέλεσμα στην οθόνη ( li $v0,1 move $a0,$t1 5 li $v0,4 la $a0,syn + li $v0,1 move $a0,$t2 2 li $v0,4 la $a0,kp )= li $v0,1 move $a0,$t0 7 Δήλωση μηνυμάτων.data par:.asciiz ( syn:.asciiz + kp:.asciiz )= 15 Παναγιώτης Μ. Παπάζογλου

(4) Να γραφεί πρόγραμμα που να διαβάζει από το πληκτρολόγιο τρεις αριθμούς (A,B,C) και να εμφανίζει στην οθόνη το αποτέλεσμα των ακόλουθων πράξεων: X1=A+B+C X2=A-B+C X3=A/C X4=(A+B)*C Δεδομένου ότι οι αριθμητικές πράξεις γίνονται μεταξύ δύο μόνο αριθμών, μπορεί να απαιτηθεί η χρήση πολλαπλών εντολών για την υλοποίηση μιας πράξης. Για τον υπολογισμό του X1 θα απαιτηθούν οι εντολές: add $t0,$t1,$t2 add $t0,$t0,$t3 (εφόσον οι αριθμοί A,B,C είναι αποθηκευμένοι στους καταχωρητές $t1, $t2 και $t3 αντίστοιχα). Τα αποτελέσματα να τυπώνονται στη μορφή X1=N, όπου Ν το αποτέλεσμα της αντίστοιχης αριθμητικής πράξης. (5) Να τροποποιηθεί το πρόγραμμα της άσκησης (4) ώστε τα αποτελέσματα να εμφανίζονται παραμετρικά (βλέπε άσκηση (3). 16 Παναγιώτης Μ. Παπάζογλου

ΕΝΟΤΗΤΑ 3 3.1 Εντολές αλλαγής ροής εκτέλεσης (διακλάδωση) μετά από έλεγχο συνθήκης 1 Σύγκριση με το μηδέν (μορφή εντολής) <εντολή> καταχωρητής, ετικέτα beqz Rsrc, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc == 0 bgez Rsrc, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc >= 0 bgtz Rsrc, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc > 0 blez Rsrc, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc <= 0 bltz Rsrc, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc < 0 bnez Rsrc, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc <> 0 2 Σύγκριση με ακέραιο αριθμό (ή με το μηδέν) <εντολή> καταχωρητής, καταχωρητής ή τιμή, ετικέτα beq Rsrc1, Src2, label bge Rsrc1, Src2, label bgt Rsrc1, Src2, label ble Rsrc1, Src2, label blt Rsrc1, Src2, label bne Rsrc1, Src2, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc1 == Src2 Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc1 >= Src2 Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc1 > Src2 Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc1 <= Src2l Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc1 < Src2 Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc1 <> Src2 17 Παναγιώτης Μ. Παπάζογλου

3.2 Παραδείγματα υλοποίησης κλασικών δομών Διπλός έλεγχος στη γλώσσα C Διπλός έλεγχος στην assembly { } if (sum>0) printf("\nsum > 0"); else if (sum<0) printf("\nsum < 0"); else printf("\nsum = 0"); #$t0=sum bgtz $t0,l1 bltz $t0,l2 L3: #sum=0 #τύπωσε Sum=0 j L4 L1: #τύπωσε Sum>0 j L4 L2: #τύπωσε Sum<0 L4: Επανάληψη στη γλώσσα C (έλεγχος στο τέλος) int i=1; do { /* εντολές */ i++; } while (i<=10) Επανάληψη στην assembly (έλεγχος στο τέλος) #$t0=i li $t0,1 #i=1 L0: #do #εντολές addi $t0,$t0,1 ble $t0,10,l0 #i++ #while (i<=10) L1: * Η εντολή j ετικέτα, οδηγεί τη ροή εκτέλεσης στο σημείο που οριοθετείται από την ετικέτα (διακλάδωση χωρίς συνθήκη). 18 Παναγιώτης Μ. Παπάζογλου

3.3 Ασκήσεις Παραδείγματα (1) Να γραφεί πρόγραμμα που να υπολογίζει το άθροισμα τριών αριθμών και να τυπώνει σχετικό μήνυμα αν SUM=0, SUM>0 και SUM<0. Το τμήμα του κώδικα που σχετίζεται με τον έλεγχο και την αντίστοιχη εμφάνιση μηνύματος, είναι: beqz $t0,iso bgtz $t0,meg #Τύπωσε SUM<0 j exodos iso: #Τύπωσε SUM=0 j exodos meg: #Τύπωσε SUM>0 exodos: li $v0,10 ΠΡΟΣΟΧΗ : Η εμφάνιση των μηνυμάτων έχει μπει ως σχόλιο για να επικεντρωθούμε μόνο στη δομή του προγράμματος. Αυτό σημαίνει ότι στην υλοποίηση του κώδικα θα πρέπει να αντικατασταθούν τα σχόλια με τις κατάλληλες εντολές. 19 Παναγιώτης Μ. Παπάζογλου

(2) Να γραφεί πρόγραμμα που να υπολογίζει το άθροισμα τριών αριθμών (SUM=A+B+C) και να ελέγχει αν αυτό βρίσκεται στο διάστημα [0,10]. Έλεγχος αν το άθροισμα (έστω στο $t0) δεν ανήκει στο [0,10]. bltz $t0,exodos bgt $t0,10,exodos # εμφάνισε το μήνυμα ότι ανήκει στο διάστημα περίπτωση else των παραπάνω # ελέγχων. Έλεγχος αν το άθροισμα (έστω στο $t0) ανήκει στο [0,10]. bgez $t0,next1 j exodοs next1: ble $t0,10,next2 j exodοs next2: # εμφάνισε το μήνυμα ότι ανήκει στο διάστημα * Θεωρούμε ότι από την ετικέτα exodos ξεκινά η κλήση της συνάρτησης τερματισμού προγράμματος. (3) Να γραφεί πρόγραμμα που να διαβάζει τρεις αριθμούς A,B,C και ανάλογα με την τιμή του Α να κάνει τους ακόλουθους υπολογισμούς: Αν A>0 A+B-C Αν A=0 A-B-C Αν A<0 A*B*C 20 Παναγιώτης Μ. Παπάζογλου

(4) Να γραφεί πρόγραμμα που να υπολογίζει τη διακρίνουσα (Δ=B 2-4AC) και να εμφανίζει κατάλληλο μήνυμα για το είδος των ριζών που προκύπτουν. (5) Να γραφεί πρόγραμμα που να κάνει επιλεγμένους υπολογισμούς ανάλογα με την τιμή του αθροίσματος τριών αριθμών (SUM=A+B+C). 10 Αν SUM>0 i i= 1 10 Αν SUM<0 2i i= 1 2 Αν SUM=0 θα τυπώνει απλά ένα μήνυμα Υλοποίηση loop στο επιθυμητό διάστημα τιμών π.χ. από 10 προς 1 li $t1,10 xana: #εντολές που θα επαναλαμβάνονται add $t1,$t1,-1 bgtz $t1,xana #επιστροφή στο xana αν $t1>0 21 Παναγιώτης Μ. Παπάζογλου

2 Υλοποίηση υπολογισμού i στο loop 10 i= 1 xana: li $t0,0 #SUM=0 li $t1,10 #μετρητής i=10 mul $t2,$t1,$t1 #υπολογισμός τετραγώνου μετρητή, i 2 add $t0,$t0,$t2 #ενημέρωση αθροίσματος, SUM=SUM+i 2 add $t1,$t1,-1 #ενημέρωση μετρητή bgtz $t1,xana #συνθήκη loop 22 Παναγιώτης Μ. Παπάζογλου

3.4 Εντολή διαίρεσης με δύο ορίσματα Διαίρεση (υπολογισμός πηλίκου και υπόλοιπου) div Rsrc1,Rsrc2 π.χ. div $t1,$t2 Η εντολή αυτή διαιρεί τα περιεχόμενα των Rsrc1 και Rsrc2 (Rsrc1/Rsrc2). Το αποτέλεσμα της διαίρεσης αποθηκεύεται στους καταχωρητές LO (πηλίκο) και ΗΙ (υπόλοιπο). Αν ο διαιρέτης είναι μηδέν, το αποτέλεσμα είναι απροσδιόριστο. Επειδή οι καταχωρητές LO και HI είναι ειδικής χρήσης, δεν μπορεί να χρησιμοποιηθεί άμεσα το περιεχόμενό τους για αριθμητικές πράξεις. Έτσι, θα πρέπει να γίνει μεταφορά του περιεχομένου τους σε απλούς καταχωρητές. π.χ. mfhi Rdest mflo Rdest mfhi $t1 mflo $t1 #δηλαδή $t1=hi #δηλαδή $t1=lo 23 Παναγιώτης Μ. Παπάζογλου

3.5 Ασκήσεις (1) Να γραφεί πρόγραμμα που να υπολογίζει: f( x) = f( x) = f( x) = f( x) = f( x) ( x 3)( x 4) x 2 3 ( x 1) x 2 + x + 1 2 ( x mod 2) x 2 1 2 ( x + 1) ( x ) 2 = x + mod 3 + 1 x x 4 3 2 Θα πρέπει να χρησιμοποιήσετε αμυντικό προγραμματισμό (έλεγχος επιτρεπόμενων δεδομένων εισόδου και αποφυγή σφαλμάτων υπολογισμού). Το Χ είναι ακέραιος αριθμός ο οποίος εισάγεται από το πληκτρολόγιο. Για τον υπολογισμό του mod, χρησιμοποιήστε την εντολή div με δύο ορίσματα. (2) Να γραφεί πρόγραμμα που να εμφανίζει το ακόλουθο αποτέλεσμα : ***** **** *** ** * π.χ για Ν=5 24 Παναγιώτης Μ. Παπάζογλου

(3) Να γραφεί πρόγραμμα που να κάνει μετατροπή ενός δεκαδικού αριθμού στον αντίστοιχο δυαδικό (ημιτελής προσέγγιση). Υπόδειξη : (α) δεν απαιτείται η αντίστροφη εκτύπωση των υπολοίπων που έχουν προκύψει, (β) να χρησιμοποιηθεί η εντολή div με δύο ορίσματα, (γ) να χρησιμοποιηθούν κατάλληλες εντολές για τη μεταφορά δεδομένων από τους καταχωρητές HI και LO σε καταχωρητές γενικής χρήσης. (4) Να γραφούν κατάλληλα προγράμματα assembly για την υλοποίηση των ακόλουθων υπολογισμών και ελέγχων: (α) (1-10) 2 +(2-9) 2 + +(10-1) 2 (β) Αν (Α>=5 και Α ε [8,15]) τύπωσε το μήνυμα Hello. Γενικές ασκήσεις (1) Βρείτε το λάθος και διορθώστε το 1: move $v0,4 2: la $a0,mes 3: 4:.data 5: mes:.asciix hello Γραμμή λάθους ( ), διόρθωση ( ) (2) Βρείτε το λάθος και διορθώστε το 1: L1: 2: li $t1,10 3: #print message 4: addi $t1,$t1,1 5: ble $t1,10,l1 Γραμμή λάθους ( ), διόρθωση ( ) 25 Παναγιώτης Μ. Παπάζογλου

(3) Τι θα τυπώσει το πρόγραμμα αν $t1=1, $t2=2,$t0=4? add $t0,$t1,$t2 mul $t0,t0,$t2 sub $t0,$t1,$t0 bgtz $t2,l2 blt $t1,-1,l3 L1: # τύπωσε μήνυμα AAA L2: # τύπωσε μήνυμα BBB J exodos L3: # τύπωσε μήνυμα CCC exodos: li $v0,10 Απάντηση (4) Το ακόλουθο πρόγραμμα : li $t1,2 li $t2,1 L1: div $t1,$t2 mfhi $t1 add $t1,$t1,$t2 bnez $t1,l1 (a) Θα κάνει ατέρμονο loop (b) Θα σταματήσει όταν $t1=0 (c) Θα σταματήσει όταν $t2=0 (d) Τίποτα από τα παραπάνω (5) Τι θα τυπώσει το ακόλουθο πρόγραμμα? move $a0,mes li $v0,1.data mes:.asciiz hello Απάντηση 26 Παναγιώτης Μ. Παπάζογλου

(6) Γράψτε τις αντίστοιχες εντολές assembly (MIPS) I=1 do { printf( hello ); I=I+1; } while (I<=10) ---------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- #print hello ---------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- (7) Πόσα * θα τυπώσει το ακόλουθο πρόγραμμα? li $t1,3 again: move $t2,$t1 again2: #print * addi $t2,$t2,-1 bnez $t2,again2 addi $t1,$t1,-1 bnez $t1,again (a) 7 (b) 6 (c) 2 (d) 8 (e) Τίποτα από τα παραπάνω (8) Πότε πρέπει να καταφεύγουμε σε χρήση θέσεων μνήμης? (a) ποτέ (b) πάντα (c) Σε περίπτωση ομαδοποιημένων υπολογισμών που απαιτούν περισσότερους καταχωρητές από τους διαθέσιμους. (d) τίποτα από τα παραπάνω 9) Για να εμφανίσουμε παραμετρικά το ((A+B)*C/D)-E θα πρέπει να χρησιμοποιήσουμε (βέλτιστη περίπτωση) (a) 5 εμφανίσεις αριθμών, 5 εμφανίσεις αλφαριθμητικών (b) 4 εμφανίσεις αριθμών, 8 εμφανίσεις αλφαριθμητικών (c) 7 εμφανίσεις αλφαριθμητικών (d) 5 εμφανίσεις αριθμών, 4 εμφανίσεις αλφαριθμητικών 27 Παναγιώτης Μ. Παπάζογλου