ΗΜΥ 213 Εργαστήριο Οργάνωσης Η.Y. και Μικροεπεξεργαστών Ασκήσεις: week3 και week4 Διδάσκων: Δρ. Γιώργος Ζάγγουλος Email: zaggoulos.george@ucy.ac.cy www.ece.ucy.ac.cy/courses/ece213
Ορίσματα στο QtSpim (set parameters in QtSpim) Τα ορίσματα στο QtSPIM μπορούν να δοθούν από την επιλογή Run Parameters που βρίσκεται στο μενού simulator στον προσομοιωτή QtSpim. Το αποτέλεσμα της πιο πάνω ενέργειας είναι η αλλαγή στην τιμή του καταχωρητή $a0, ο οποίος θα πάρει το πλήθος των ορισμάτων που δώσαμε (διαχωρισμένα μεταξύ τους με κενό). Μέσω του καταχωρητή $a1, μπορούμε να βρούμε τη διεύθυνση στην οποία έχει αποθηκευτεί το κάθε όρισμα (ως 32-μπιτος αριθμός) $a0 = 2 έχει το πλήθος ορισμάτων $a1 = δείκτης μνήμης, έχει την αρχική διεύθυνση όπου αποθηκεύτηκε το 1 ο όρισμα (όνομα του αρχείου) 4($a1) =δείκτης μνήμης έχει την αρχική διεύθυνση όπου αποθηκεύτηκε o ascii κώδικας του 2 ου ορίσματος (1 ο όρισμα που δόθηκε στο Run Parameters) π.χ. για 5, αποθηκεύεται 0x35 Πως μπορούμε να διαβάσουμε την τιμή που δόθηκε από το Run parameters ως αριθμό (και όχι ως κώδικα ascii); 2 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Κώδικας ascii 3 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Παράδειγμα week3.s Το πρόγραμμα θα τρέξει μόνο αν ο χρήστης έχει δηλώσει έναν αριθμό στο Run Parameters του simulator. Ο αριθμός αυτός καθορίζει πόσα γινόμενα (Π.Μ. x βαθμός) θα υπολογιστούν και τυπώνει απλά το τελευταίο γινόμενο στην οθόνη. Οι πολλαπλασιαστέοι έχουν δηλωθεί στο πεδίο.data του κώδικα και βρίσκονται αποθηκευμένοι στη μνήμη σε διευθύνσεις που μπορούν να εξευρεθούν χρησιμοποιώντας τις ετικέτες credits και grades Τα γινόμενα αυτά υπολογίζονται ως: credits(i) x grades(i) Το κάθε γινόμενο θα αποθηκεύεται σε θέσεις που έχουν δεσμευθεί στη μνήμη με όνομα moria. Π.χ. Αν ο χρήστης εισαγάγει τον αριθμό 3, το πρόγραμμα θα υπολογίσει ξεχωριστά 3 γινόμενα μεταξύ credits(i) και grades(i) και θα εκτυπώσει μόνο το αποτέλεσμα του τελευταίου πολλαπλασιασμού. 4 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Απαντήστε στα πιο κάτω ερωτήματα με βάση τον κώδικα week3.s 1. Ποια η διαφορά μεταξύ.byte,.word και.space; 2. Γιατί η μεταβλητή (μονοδιάστατος πίνακας) moria έχει δηλωθεί ως.word και όχι ως.byte; 3. Γιατί ο μετρητής ($t0) αρχικοποιήθηκε στο 0 και όχι στο 1; 4. Με ποιο τρόπο διευθυνσιοδότησης μπορούμε να αποθηκεύουμε το κάθε γινόμενο στη μνήμη; 5. Πως μπορεί να υπολογιστεί ο μέσος όρος από τα πιο πάνω γινόμενα; 6. Τι θα συμβεί αν ο χρήστης δώσει μεγαλύτερο αριθμό από τον αριθμό των μαθημάτων που είναι καταχωρημένα στο πρόγραμμα (αν δεν υπήρχε ο έλεγχος); Ας δούμε τον κώδικα αναλυτικά! 5 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Βελτίωση του κώδικα (μετονομάστε σε week3a.s) Υλοποιήστε τις αλλαγές που απαιτούνται (μέσα στον ήδη υλοποιημένο βρόχο) έτσι ώστε το κάθε υπολογισμένο γινόμενο να αποθηκεύεται στη σωστή θέση που έχει κρατηθεί για αυτό τον σκοπό στη μνήμη (moria). βοήθεια: ο δείκτης στη μνήμη θα πρέπει να αυξάνεται κατά 4 μετά από κάθε εντολή store (μιας και είναι τύπου:.word) 6 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Βελτίωση του κώδικα (μετονομάστε σε week3b.s) Υλοποιήστε τον υπολογισμό του μέσου όρου σε ξεχωριστό βρόχο (φορτώνοντας και πάλι τα δεδομένα που χρειάζεστε από την μνήμη). Το τελικό αποτέλεσμα (ο Μέσος Όρος) θα πρέπει να αποθηκευτεί και στη θέση μνήμης που δεσμεύσαμε Εκτυπώστε αναλυτικά το αποτέλεσμα στην οθόνη. βοήθεια: ο μέσος όρος δίνεται από τον λόγο του αθροίσματος των μορίων προς το άθροισμα των πιστωτικών μονάδων. (εδώ δεν λαμβάνεται υπόψη το αν έχετε πάρει προβιβάσιμο βαθμό στο μάθημα!) 7 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Πρόσθετα Ερωτήματα Πως μπορούμε να δούμε σε πόσα μαθήματα ο φοιτητής πήρε άρτια ή περιττή βαθμολογία; Βρέστε την διεύθυνση μνήμης που περιέχει βαθμολογία μαθήματος 70! Βρέστε εάν στη λίστα μαθημάτων υπάρχει καταχωρημένο το μάθημα ΗΜΥ213 και αν υπάρχει, εκτυπώστε τη σειρά του στη λίστα, τις Π.Μ και τον βαθμό που πήρατε στο μάθημα. 8 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Μαθησιακοί Στόχοι Εργαστηριακής άσκησης week3 Εξοικείωση με το QtSpim Χρήση εντολών assembly για δημιουργία μετρητών, επαναλήψεων, ελέγχου και αριθμητικών πράξεων Χρήση εντολών φόρτωσης και αποθήκευσης δεδομένων από/προς τη μνήμη με διάφορους τρόπους διευθυνσιοδότησης Χρήση της επιλογής Run Parameters για είσοδο στοιχείων 9 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Μαθησιακοί Στόχοι Εργαστηρίου 4 1. Εξοικείωση με το άνοιγμα, διάβασμα και κλείσιμο αρχείου μέσα από το SPIM 2. Υλοποίηση της συνάρτησης ΑΤΟΙ 3. Υλοποίηση συνάρτησης για εντοπισμό ακολουθίας αριθμητικών χαρακτήρων («0»,, «9») 4. Χρήση εντολών φόρτωσης και αποθήκευσης δεδομένων από/προς τη μνήμη 10 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Άνοιγμα, Διάβασμα και Κλείσιμο αρχείου μέσα από το Spim Άνοιγμα $v0 = 13 Διάβασμα $v0 = 14 Κλείσιμο $v0 = 16 Σημειώσεις: Αρχείο προς άνοιγμα = Πλήρες μονοπάτι (με δεξί κλικ στο αρχείο και επιλογή properies μπορείτε να το αντιγράψετε) filename:.asciiz C:\...?...\week4_list.txt Η επιστροφή ορισμάτων γίνεται μέσω του $v0 και όχι του $a0. 11 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Παράδειγμα week4.s Σας δίνεται πρόγραμμα το οποίο ανοίγει ένα αρχείο (text file) και αποθηκεύει το περιεχόμενο του στη μνήμη. Ο χαρακτήρας ; σηματοδοτεί το τέλος του αρχείου => θα πρέπει να κλείσει το αρχείο.txt. Μετά την αποθήκευση του περιεχομένου στη μνήμη του μικροεπεξεργαστή, το πρόγραμμα εκτυπώνει το περιεχόμενο της μνήμης (που αντιγράφηκε) στην οθόνη. 12 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Απαντήστε στα πιο κάτω ερωτήματα με βάση τον κώδικα week4.s 1. Πως αποθηκεύεται το κάθε στοιχείο του text file στη μνήμη; 2. Σε τι χρησιμεύει η συνάρτηση atoi; 3. Πως μπορεί να υπολογιστεί το μέγεθος του αρχείου σε χαρακτήρες; 4. Ποια system calls χρειάζονται για διαχείριση του text file; Ας δούμε τον κώδικα αναλυτικά! 13 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Βελτίωση του κώδικα (μετονομάστε σε week4a.s) 1. Υλοποιήστε την συνάρτηση atoi και αποθηκεύστε σε μια νέα λίστα (που θα δημιουργήσετε) τους αντίστοιχους αριθμούς που βρίσκονται στο text file. 2. Στη συνέχεια εκτυπώστε τους στην οθόνη (τον ένα δίπλα από τον άλλο, όπως στην αρχική λίστα), αφού πρώτα τους πολλαπλασιάσετε με το 8 (χωρίς τη χρήση της εντολής mul). 3. Τροποποιήστε το πρόγραμμα έτσι ώστε να επιτρέπεται στον χρήστη να ψάξει το περιεχόμενο του text file (το οποίο είναι αποθηκευμένο στη μνήμη) για να εντοπίσει ακολουθία με δύο όμοιους χαρακτήρες ascii. Εάν εντοπιστεί τέτοια ακολουθία, τυπώστε στην οθόνη ανάλογο αποτέλεσμα αλλά και τη διεύθυνση που περιέχει τον δεύτερο χαρακτήρα. 14 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.
Κώδικας ascii 15
Μαθησιακοί Στόχοι Εργαστηριακής άσκησης week4 Μετατροπή χαρακτήρων ASCII σε αριθμό Άνοιγμα αρχείου (.txt) από το QtSpim Διάβασμα αρχείου και μεταφορά του περιεχομένου στη μνήμη. Επεξεργασία περιεχομένου (χαρακτήρες/ αριθμοί) 16 Εργαστήριο Οργάνωσης Η.Υ. και Μικροεπεξεργαστών Γ. Ζ.