ΤΠ 2108 Αρχιτεκτονική Υπολογιστών (Εργαστήριο) ΑΝΩΤΑΤΟ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ Ι ΡΥΜΑ ΚΡΗΤΗΣ. Σειρά Ασκήσεων 2



Σχετικά έγγραφα
Οργάνωση Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ασκήσεις 2: Βρόχοι και Επικοινωνία Κονσόλας στον SPIM. Μανόλης Γ.Η.

ΤΠ 2108 Αρχιτεκτονική Υπολογιστών (Εργαστήριο) ΑΝΩΤΑΤΟ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ Ι ΡΥΜΑ ΚΡΗΤΗΣ. Σειρά Ασκήσεων 1

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

Τ.Ε.Ι. Κρήτης Τμ. Μηχανικών Πληροφορικής. Αρχιτεκτονική Υπολογιστών. 3ο Μάθημα

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

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

Σειρά Ασκήσεων 1: Γνωριμία με τον Προσομοιωτή SPIM

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

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

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

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

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

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

Οργάνωση Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ασκήσεις 3: Προσπελάσεις Μνήμης στον MIPS. Μανόλης Γ.Η. Κατεβαίνης

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

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

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

Σειρά Ασκήσεων 3: Προσπελάσεις Μνήµης στον MIPS

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

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

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

SMPcache. Ένα εργαλείο για προσομοίωση-οπτικοποίηση κρυφής μνήμης (Cache)

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

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

MIPS Interactive Learning Environment. MILE Simulator. Version 1.0. User's Manual

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ProcSim οδηγίες χρήσης.

MIPS functions and procedures

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

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

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

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

Τελική Εξέταση, Απαντήσεις/Λύσεις

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

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

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

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

ProcSim οδηγίες χρήσης.

ProcSim οδηγίες χρήσης.

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

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

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

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

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

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

και η µονάδα ελέγχου (control) O επεξεργαστής: Η δίοδος δεδοµένων (datapath) Εντολές διακλάδωσης (branch beq, bne) I Type Σχεδίαση datapath

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

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

Αρχιτεκτονική Επεξεργαστών Ψ.Ε.Σ

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

ΕΡΓΑΣΤΗΡΙΟ 16. Χρησιμοποιώντας τον Αποσφαλματιστή (Debugger) του Eclipse

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

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

Spim Cache. Εισαγωγή στη χρήση του προσοµοιωτή. Αρχιτεκτονική Υπολογιστών ΙΙ. Σπύρος Ξεργιάς, ηµήτρης Γκιζόπουλος, Πανεπιστήµιο Αθηνών

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

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

O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control)

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

for for for for( . */

O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control)

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

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

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

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

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

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

ProcSim οδηγίες χρήσης.

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

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Διάλεξη 12 Καθυστερήσεις (Stalls) Εκκενώσεις Εντολών (Flushing)

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

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

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

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

Προγραμματισμός Ι (HY120)

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

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

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

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

Transcript:

Σειρά Ασκήσεων 2 Εντολές µεταφοράς δεδοµένων και βρόχοι στον MIPS. Οι γλώσσες προγραµµατισµού εκτός από απλές µεταβλητές που περιέχουν κάποια δεδοµένα, έχουν όπως γνωρίζετε και περισσότερο σύνθετες δοµές δεδοµένων όπως π.χ. οι πίνακες. Αυτοί περιέχουν πολύ µεγαλύτερο αριθµό θέσεων δεδοµένων, από τους registers που µπορεί να περιέχει µια µηχανή. Έτσι για να µπορέσει η µηχανή να προσπελάσει αυτά τα δεδοµένα που βρίσκονται σε κάποιο χώρο στη µνήµη, χρειάζεται και ένα άλλο είδος εντολών που ονοµάζονται εντολές µεταφοράς δεδοµένων data transfer instructions. Την µνήµη µπορούµε να την αναπαραστήσουµε σαν έναν µονοδιάστατο πίνακα, όπου η διεύθυνση χρησιµοποιείται σαν δείκτης που µας δείχνει το δεδοµένο. Έτσι αυτές οι εντολές χρειάζεται να τους παρέχουµε την διεύθυνση στη µνήµης, των δεδοµένων που πρέπει να µεταφέρουν. H εντολή που φέρνει δεδοµένα στον επεξεργαστή από την µνήµη, παραδοσιακά ονοµάζεται εντολή φόρτωσης (load). Η εντολή που µεταφέρει (αποθηκεύει) δεδοµένα από τον επεξεργαστή στη µνήµη, ονοµάζεται εντολή αποθήκευσης (store). Ο επεξεργαστή (MIPS), την εντολή Load την ονοµάζει lw και την Store sw. Αναπαράσταση εντολών στον υπολογιστή. Όπως γνωρίζουµε οι αριθµοί αποθηκεύονται στη µνήµη του υπολογιστή Η/Υ σαν µια ακολουθία από high and low ηλεκτρικά σήµατα. Για παράδειγµα, ο αριθµός 67 στο δεκαδικό, που οι άνθρωποι καλλίτερα αντιλαµβάνονται, στο δυαδικό αναπαριστάνεται σαν 1000011, που ο υπολογιστής ευκολότερα καταλαβαίνει. Όπως και οι αριθµοί, έτσι και οι εντολές στον Η/Υ µπορούν επίσης να αναπαρασταθούν σαν ακολουθία από bits. Και έτσι ακόµη και οι εντολές φαίνονται στον Η/Υ σαν αριθµοί. Στο εργαστήριο µιλήσαµε για τα πεδία των εντολών του MIPS. Εντολές ιακλάδωσης υπό Συνθήκη στον MIPS Όπως λέγαµε και στην άσκηση 1, για να εκτελεστεί ένα πρόγραµµα, οι εντολές του γράφονται στην κεντρική µνήµη η µία "κάτω" από την άλλη, δηλαδή σε συνεχόµενες θέσεις (διευθύνσεις) µνήµης. Μετά την ανάγνωση και εκτέλεση µιας εντολής, ο επεξεργαστής αυξάνει τον PC κατά το µέγεθος της εντολής που εκτελέστηκε, οπότε αυτός (ο PC) δείχνει στην επόµενη (την "από κάτω") εντολή. Η σειριακή αυτή εκτέλεση εντολών διακόπτεται όταν εκτελείται µια εντολή µεταφοράς ελέγχου (CTI - control transfer instruction). Είδαµε ήδη µία τέτοια, την εντολή άλµατος j label ("jump" to label), που κάνει ώστε η επόµενη εντολή που θα εκτελεστεί να είναι η εντολή στη διεύθυνση µνήµης label, αντί να είναι η "από κάτω" εντολή. Με άλλα λόγια, η εντολή j label φορτώνει τη διεύθυνση label στον καταχωρητή PC. Χρησιµοποιώντας αυτή την εντολή άλµατος στην άσκηση 1 φτιάξαµε έναν "άπειρο βρόχο", δηλαδή κάναµε τον υπό προσοµοίωση υπολογιστή να εκτελεί συνεχώς το ίδιο "µπλοκ" εντολών. 1

Για να φτιάξουµε ένα κανονικό (όχι άπειρο) βρόχο χρειαζόµαστε µιαν εντολή διακλάδωσης υπό συνθήκη (conditional branch), δηλαδή µιαν εντολή που µερικές φορές προκαλεί διακλάδωση και µερικές φορές όχι, ανάλογα µε το αν ισχύει ή δεν ισχύει κάποια κατάλληλη συνθήκη. Η βασική τέτοια εντολή είναι η beq (branch if equal): Η εντολή "beq $16, $17, label" διαβάζει τους καταχωρητές 16 και 17, και τους συγκρίνει. Εάν τους βρει ίσους (equal) διακλαδίζεται στη θέση label, δηλαδή κάνει τον επεξεργαστή να διαβάσει και εκτελέσει την εντολή από εκείνη τη διεύθυνση σαν επόµενη εντολή. Αλλιώς, δεν κάνει τίποτα, οπότε επόµενη εντολή θα διαβαστεί και εκτελεστεί η "από κάτω" εντολή. Η εντολή bne (branch if not equal) κάνει τα ανάποδα, δηλαδή διακλαδίζεται εάν βρει τους καταχωρητές άνισους (not equal), αλλιώς συνεχίζει "από κάτω". Ασκ2.1. Στον ακόλουθο κώδικα C οι x, y, z, i, και j, είναι µεταβλητές. L1: x=0; if ( i = = j) goto L1; x = y + z ; x = x i ; Υποθέτοντας ότι οι µεταβλητές από το x έως το ι αντιστοιχούν στους registers του MIPS από τον $t2 έως τον $t6 ποια είναι η έξοδος του C compiler για τον MIPS. Κώδικας Βρόχου και Εισόδου / Εξόδου Κονσόλας Γιά να επικοινωνούν τα προγράµµατα που τρέχουµε στον SPIM µε τον έξω κόσµο, ο SPIM προσοµοιώνει µερικές υποτυπώδεις υπηρεσίες λειτουργικού συστήµατος για είσοδο / έξοδο (I/O) στην "κονσόλα" (ένα απλό τερµατικό ASCII). εν είναι ανάγκη προς στιγµήν να καταλάβετε όλες τις λεπτοµέρειες του πώς γίνεται η κλήση αυτών των λειτουργιών (system call) --αρκεί να µιµηθείτε το παρακάτω παράδειγµα και να καταλάβετε τις εξηγήσεις που δίνονται κάτω από αυτό. Μελετήστε και αντιγράψτε σε ένα αρχείο (π.χ. "ask2.s") τον παρακάτω κώδικα --ή διάφορες παραλλαγές του που προτιµάτε-- και τρέξτε τον στον SPIM. # compute s = 1+2+3+...+(n-1), for n>=2 # register $16: n # register $17: s # register $18: i.data # init. data memory with the strings needed: str_n:.asciiz "n = " str_s:.asciiz " s = " str_nl:.asciiz "\n".text.globl main # program memory: # label "main" must be global; 2

.globl loop # default trap.handler calls main. # global symbols can be specified # symbolically as breakpoints. main: loop: # (1) PRINT A PROMPT: la $4, str_n # pseudo-instruction: address of string # print the string from str_n # (2) READ n (MUST be n>=2 --not checked!): addi $2, $0, 5 # system call code for read_int # read a line containing an integer add $16, $2, $0 # copy returned int from $2 to n # (3) INITIALIZE s and i: add $17, $0, $0 # s=0; addi $18, $0, 1 # i=1; # (4) LOOP starts here add $17, $17, $18 # s=s+i; addi $18, $18, 1 # i=i+1; bne $18, $16, loop # repeat while (i!=n) # LOOP ENDS HERE # (5) PRINT THE ANSWER: la $4, str_s # pseudo-instruction: address of string # print the string from str_s addi $2, $0, 1 # system call code for print_int add $4, $17, $0 # copy argument s to $4 # print the integer in $4 (s) la $4, str_nl # pseudo-instruction: address of string # print a new-line # (6) START ALL OVER AGAIN (infinite loop) j main # unconditionally jump back to main Ο κώδικας αυτός υπολογίζει το άθροισµα s=1+2+3+...+(n-1), για n µεγαλύτερο ή ίσο του 2 --προσοχή: αν δοθεί n µικρότερο του 2, ο κώδικας θα µπει σε (σχεδόν) άπειρο βρόγχο! Η "καρδιά" του κώδικα είναι τα κοµµάτια (3) --αρχικοποιήσεις-- και (4) --βρόγχος υπολογισµού. Προσέξτε τις παρακάτω εξηγήσεις: Το κοµµάτι κάθε γραµµής µετά το # είναι σχόλια, όπως είπαµε και στην άσκηση 1. Οι γραµµές που αρχίζουν µε τελεία (".") είναι οδηγίες (directives) προς τον Assembler, και όχι εντολές Assembly του MIPS. Ο πλήρης κατάλογος των οδηγιών που δέχεται ο SPIM βρίσκεται στις σελίδες Α-51 έως Α-53 του Παραρτήµατος Α, σε περίπτωση που θέλετε να τον συµβουλευθείτε. Η οδηγία.data σηµαίνει ότι ό,τι ακολουθεί είναι δεδοµένα (και όχι εντολές), και πρέπει να τοποθετηθούν στο κοµµάτι της µνήµης που προορίζεται για αυτά (data segments) (στον SPIM αυτό αρχίζει από τη διεύθυνση 10000000 δεκαεξαδικό). Η οδηγία.asciiz σηµαίνει να αρχικοποιήσει ο Assembler τις επόµενες θέσεις (bytes) µνήµης µε το ASCII string που ακολουθεί, τερµατισµένο µε ένα NULL byte όπως και στην C. Οι ετικέτες (labels) str_n, str_s, και str_nl, ακολουθούµενες από άνω-κάτω τελεία ":", ορίζουν την κάθε ετικέτα σαν την διεύθυνση µνήµης όπου ο Assembler βάζει το αντίστοιχο string (τη διεύθυνση µνήµης του πρώτου byte του string). Η οδηγία.text σηµαίνει, όπως είπαµε και στην άσκηση 1, ότι ό,τι ακολουθεί είναι εντολές (και όχι δεδοµένα), και πρέπει να τοποθετηθούν στο κοµµάτι της µνήµης που προορίζεται για αυτές (text segments). 3

Οι οδηγίες.globl λένε στον Assembler να βάλει τις ετικέτες (labels) main και loop στον πίνακα καθολικών (global) συµβόλων. Για την ετικέτα main, είπαµε στην άσκηση 1 γιατί χρειάζεται αυτό. Για την ετικέτα loop (που είναι η αρχή του βρόχου µας), µε το να την κάνουµε global, µπορούµε να την δίνουµε και συµβολικά --όχι µόνο αριθµητικά-- σαν διεύθυνση breakpoint στον SPIM. Το κοµµάτι (1) του κώδικα είναι ένα κάλεσµα του λειτουργικού συστήµατος (system call) προκειµένου να τυπωθεί το string str_n στην κονσόλα (πρόκειται για το string "n = " που ορίστηκε παραπάνω). Για να καταλάβει το λειτουργικό σύστηµα ποιο από όλα τα system calls ζητάµε, βάζουµε στον καταχωρητή $2 σαν παράµετρο (argument) τον αριθµό 4, που σηµαίνει ότι ζητάµε το system call υπ' αριθµό 4, που είναι το print_string (τα system calls που υλοποιεί ο SPIM περιγράφονται στις σελίδες Α-48 και Α-49 του Παραρτήµατος Α). Επίσης, για να ξέρει το λειτουργικό σύστηµα ποιο string θέλουµε να τυπώσει στην κονσόλα, βάζουµε στον καταχωρητή $4 σαν παράµετρο (argument) τη διεύθυνση µνήµης αυτού του string (δηλ. έναν pointer σε αυτό το string), που στην περίπτωσή µας είναι η ετικέτα str_n που ορίσαµε παραπάνω (το "la" είναι ψεύδοεντολή (pseudoinstruction) του Assembler του SPIM, και όχι κανονική εντολή του MIPS, και λεει στον Assembler να γεννήσει µία ή δύο πραγµατικές εντολές που τοποθετούν τη διεύθυνση της ετικέτας str_n στον καταχωρητή $4, ανάλογα αν η διεύθυνση αυτή χωρά ή όχι στα 16 bits µίας σταθεράς "immediate" όπως θα δούµε αργότερα). Το κοµµάτι (2) του κώδικα είναι ένα ανάλογο κάλεσµα (το κάλεσµα υπ' αριθµό 5, δηλαδή read_int), που περιµένει να διαβάσει έναν ακέραιο από την κονσόλα: ο προσοµοιωτής θα περιµένει εκεί µέχρι να πληκτρολογήστε έναν ακέραιο και ένα RETURN στο παράθυρο "SPIM Console". Μέσω της επόµενης εντολής, add, ο ακέραιος που επιστρέφει το κάλεσµα (στον καταχωρητή $2) αρχικοποιεί τη µεταβλητή µας n (στον καταχωρητή $16). Το κοµµάτι (3) του κώδικα είναι η αρχικοποίηση των µεταβλητών s (καταχωρητής $17) και i (καταχωρητής $18) πριν µπούµε στο βρόχο. Το κοµµάτι (4) του κώδικα είναι ο κυρίως βρόχος υπολογισµού. Σε κάθε επανάληψή του αυξάνει το s κατά i και το i κατά 1, και στη συνέχεια συγκρίνει το i (καταχωρητής $18) µε το n (καταχωρητής $16) και διακλαδίζεται (πηγαίνει) πίσω στην ετικέτα loop, δηλαδή στην αρχή του βρόχου, όσο αυτές οι δύο µεταβλητές δεν είναι ίσες µεταξύ τους, δηλαδή όσο το i δεν έφτασε ακόµα το n. Αλλιώς, µόλις το (ήδη αυξηµένο) i γίνει ίσο µε n, δεν διακλαδιζόµαστε πίσω, αλλά συνεχίζουµε µε την επόµενη εντολή, δηλαδή το κοµµάτι (5) του κώδικα. Το κοµµάτι (5) του κώδικα είναι τρία καλέσµατα συστήµατος για να τυπωθούν το string str_s, η απάντηση s, και το string str_nl. Τέλος, η εντολή jump στο (6) µας επιστρέφει πάντα πίσω στο main, ώστε το πρόγραµµα να ξανατρέχει συνεχώς µέχρι να τερµατίσετε τον SPIM. Ασκήσεις Τρεξίµατος στον SPIM Ξεκινήστε το spim µε τον τρόπο που είπαµε στην άσκηση 1, και φορτώστε το αρχείο µε το παραπάνω πρόγραµµα που γράψατε µέσω του κουµπιού "load". Μέσω του κουµπιού "step" ζητήστε single-stepping, δηλαδή να εκτελούνται µία-µία οι εντολές και να τις βλέπετε. Η εκτέλεση αρχίζει στη διεύθυνση start (0x00400000) όπου υπάρχει κώδικας από το αρχείο trap.handler. Στη διεύθυνση 0x00400014 υπάρχει µία εντολή καλέσµατος διαδικασίας (jal --jump and link) η οποία καλεί τον κώδικά σας στο main, και η εκτέλεση πηγαίνει στη διεύθυνση 0x00400020. Όταν φτάστε στο δεύτερο κάλεσµα συστήµατος (0x00400030), µην ξεχάσετε να πληκτρολογήσετε έναν ακέραιο µεγαλύτερο ή ίσο του 2. 4

Αφού βαρεθείτε να βλέπετε τις εντολές να εκτελούνται µία-µία, χρησιµοποιήστε το κουµπί "breakpoints" για να ορίσετε ένα breakpoint στο πρόγραµµά σας, π.χ. τη διεύθυνση "loop. Μετά, πείτε στο πρόγραµµα να τρέξει, µέσω του κουµπιού "run", οπότε αυτό τρέχει "σιωπηλά" µέχρι να ξαναφθάσει στη διεύθυνση loop. Έτσι µπορείτε να επιταχύνετε την παρακολούθηση ενός προγράµµατος, και να το κάνετε να σταµατάει σε "ενδιαφέροντα" ή "ύποπτα" σηµεία. Τέλος, αφαιρέστε όλα τα breakpoints, και τρέξτε το πρόγραµµα κανονικά, οπότε θα βλέπετε µόνο τις εισόδους και εξόδους στην κονσόλα. Τρόπος παράδοσης: Θα παραδώσετε όλες τις ασκήσεις ηλεκτρονικά. Σε αυτήν του Spim όπως στην προηγούµενη άσκηση θα παραδώσετε ένα στιγµιότυπο της οθόνης καθώς τρέχετε το πρόγραµµα spim, και όταν αυτό βρίσκεται σε ένα ενδιαφέρον ενδιάµεσο σηµείο της επιλογής σας. Το στιγµιότυπο θα το πάρετε και θα το παραδώσετε ως εξής: Αφού βρίσκεστε στο ενδιαφέρον κοµµάτι της προσοµοίωσης πατήστε το κουµπί Print Screen. Μετά µπορείτε να ανοίξετε το πρόγραµµα Paint των Windows και να κάνετε εκεί paste, µετά θα σώστε αυτό το αρχείο µε όνοµα ask2.jpg. Έπειτα θα δηµιουργήστε ένα φάκελο µε όνοµα tp2108_ασκ2_student_ip, όπου student είναι το επίθετό σας, ip είναι ο αριθµός µητρώου σας στη σχολή. Μέσα σε αυτό το φάκελο θα τοποθετήσετε το ask2.pdf (που θα περιέχει την ask2.1.txt, και επίσης το αρχείο ask2.jpg. Την ώρα του επόµενου εργαστηρίου θα ανοίξει ένας ftp server µε τον οποίο θα συνδεθείτε και θα µεταφέρετε εκεί το φάκελο µε τη δουλειά σας. copyright University of Crete, Greece http://www.csd.uoc.gr/~hy225/ 5