ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών LAB 5 (04-07-17) Διδάσκων: Δρ. Γιώργος Ζάγγουλος Email: zaggoulos.george@ucy.ac.cy www.ece.ucy.ac.cy/courses/ece213
Εγκατάσταση και Λειτουργία QtSpim 9.1.17 Κατεβάστε το πρόγραμμα QtSpim9.1.17 από τον σύνδεσμο που υπάρχει στην ιστοσελίδα: http://spimsimulator.sourceforge.net/ Εγκαταστήστε το και στη συνέχεια ελέγξτε την ορθή του λειτουργία τρέχοντας το αρχείο hello wordκαι ως αποτέλεσμα δείτε αυτή τη φράση στο παράθυρο Console. Βοήθεια: File/load file (επιλέξτε το αρχείο) και μετά Simulator/Run-Continue (τρέξτε το αρχείο). Αν δεν βλέπετε το hello word επιλέξτε Window/Console. Τρέξτε επίσης τα 2 αρχεία add2numbers.s αρχικά με το Run και μετά με Single Stepsπαρατηρώντας τις τιμές των καταχωρητώνpc, v0, a0, t1, t2 και t3. 2
QtSpim 9.1.12 (for windows) 3
Από το Πρόβλημα στη Λύση! Κατά την επίλυση οποιουδήποτε προβλήματος, συνειδητά ή όχι, πάντοτε ακολουθούμε κάποια στάδια μέχρι που να φτάσουμε στην επιθυμητή λύση. Σε προβλήματα προγραμματισμού, συνήθως ακολουθούνται τα εξής στάδια: 1. Κατανόηση του προβλήματος 2. Ανάλυση προβλήματος (είσοδοι, έξοδοι, σταθερές, μεταβλητές) 3. Βήματα προς επίλυση του προβλήματος 4. Συγγραφή κώδικα για το κάθε βήμα 5. Έλεγχος κώδικα βήμα προς βήμα 6. Τελικός έλεγχος κώδικα 4
Διάγραμμα Ροής Προγράμματος Flow -Chart Το διάγραμμα ροής είναι πολύ βοηθητικό στην επίλυση ενός προβλήματος αφού μας βοηθά να δούμε και οπτικά την πορεία επίλυσης του προβλήματος και να κατανοήσουμε καλύτερα τον κώδικα που πρέπει να γράψουμε για το κάθε ένα από τα βήματα που πρέπει να ακολουθήσουμε. Η επιλογή του αριθμού των βημάτων εξαρτάται από το ίδιο το πρόβλημα αλλά και από το πόσο αναλυτικό επιθυμούμε εμείς να το σχεδιάσουμε. Πρέπει τουλάχιστο να περιέχει όλους τους ελέγχους (beq/bne/bhi) όπως και τυχόν αλληλεπίδραση με τον χρήστη. Ας σχεδιάσουμε το πρώτο μας Διάγραμμα Ροής βάσει του παραδείγματος add2numbers.s 5
Δημιουργία αρχείου add2numbers.s (Πρόσθεση 2 αριθμών και εκτύπωση αποτελέσματος) # your details with a description of the code.data result_is:.asciiz The result is:\n.text main: li $t1, 10 # load t1 with 10 li $t2, 7 # load t2 with 7 add $t3, $t1, $t2 # add t1 and t2 ->t3 6
Πρόσθεση 2 αριθμών και εκτύπωση αποτελέσματος (συνέχεια.) li$v0, 4 la $a0, result_is syscall li$v0, 1 move $a0, $t3 syscall li$v0, 10 syscall # syscall to print string # syscallto print an integer # syscall to exit programme # press enterto keep SPIM HAPPY! 7
Εκτέλεση Κώδικα 8
Εκτέλεση Κώδικα 9
Χρήση Εντολών Αssemblyγια λύση βασικών προβλημάτων 1. Πως επιτυγχάνεται η διαίρεση και ο πολλαπλασιασμός με δυνάμεις του 2 (χωρίς τη χρήση των εντολών mulκαι div) 2. Πως επιτυγχάνεται ο έλεγχος συγκεκριμένου μπιτ σε κάποιο καταχωρητή; 3. Με ποιο τρόπο μπορείσυγκεκριμένο μπιτ ενός καταχωρητή: (α) να μηδενιστεί (clear); (β)να τεθεί σε λογικό 1 (set) ; 4. Με ποια εντολή μπορεί να αλλάξει η τιμή (invert) συγκεκριμένου μπιτ σε κάποιο καταχωρητή; 5. Πως υλοποιείται ένας μετρητής στην Assembly; 10
Παράδειγμα week2.s Αυτό το αρχείο ζητά από τον χρήστη να δώσει ένα αριθμό από την κονσόλα. Αυτός ο αριθμός ορίζει και το πόσα γινόμενα θα προστεθούν. Τα γινόμενα είναι πάντοτε τα 1x2, 2x3, 3x4, 9x10 Με επιλογή του 3 λοιπόν από τον χρήστη, το πρόγραμμα θα υπολογίσει το άθροισμα των 3 πρώτων γινομένων [1x2+2x3+3x4]και θα τυπώσει το αποτέλεσμα [20]στην οθόνη. 11
Βρέστε στον κώδικα τα πιο κάτω: 1. Ποιος είναι ο μέγιστος αριθμός που μπορεί να δεχτεί το πρόγραμμα από τον χρήστη και να δώσει σωστό αποτέλεσμα; 2. Ποιος καταχωρητής χρησιμοποιείται στο πρόγραμμα ως μετρητής; 3. Ποια η διαφορά μεταξύ των εντολών: b loop1καιbgt $t1, $t2 loop1 A60, A62 Ας δούμε την εκτέλεση αυτού του κώδικα αναλυτικά! 12
Βελτίωση του κώδικα (μετονομάστε το week2 σε week2a) 1.Υπολογίστε ποιος είναι ο μέγιστος αριθμός για τον οποίο ο κώδικας δίνει το σωστό αποτέλεσμα. Στην συνέχεια τροποποιήστε τον κώδικα έτσι ώστε να δέχεται από τον χρήστη μόνοτους αριθμούς για τους οποίους δίνει το σωστό αποτέλεσμα. βοήθεια:τρέξτε τον κώδικα διαδοχικά δίνοντας ως είσοδο το 1858 και το 1862και παρατηρήστε τα μηνύματα στην οθόνη (επιλέγοντας ΟΚ σε κάθε νέο παράθυρο) 13
Βελτίωση του κώδικα (μετονομάστε το week2a σε week2b) 2.Τροποποιήστε το πρόγραμμα έτσι ώστε μετά από την εμφάνιση του αποτελέσματος να δίνεται η δυνατότητα στον χρήστη για υπολογισμό νέου αθροίσματος γινομένων ή έξοδο από το πρόγραμμα. βοήθεια:για έξοδο από το πρόγραμμα μπορείτε να χρησιμοποιήσετε κάποιον συγκεκριμένο αριθμό που δεν επηρεάζει τη λειτουργία του αρχικού κώδικα. 14
Βελτίωση του κώδικα (μετονομάστε το week2b σε week2c) 3.Τροποποιήστε το πρόγραμμα έτσι ώστενα ελέγχει αν το αποτέλεσμα (άθροισμα γινομένων) είναι πολλαπλάσιο του 4. Θα πρέπει να τυπώνεται κατάλληλο μήνυμα στην οθόνη που να λέει αν είναι ή όχι πολλαπλάσιο του 4. 15
Μαθησιακοί Στόχοι 1 ου Εργαστηρίου Εγκατάσταση και Εξοικείωση με το QtSPIM Δομή προγράμματος (.s file) και Κλήσεις συστήματος: 1, 4, 5, 10 Εντολές: li, la, add και move (σύνταξη και αποτέλεσμα εκτέλεσης της κάθε εντολής) Χρήση εντολών assembly για δημιουργία μετρητών, επαναλήψεων, ελέγχου και αριθμητικών πράξεων (πρόσθεσης/αφαίρεσης, πολλαπλασιασμού/ διαίρεσης) Χρήση εντολών assembly(shift, or, and, xor) Χρήση branch(conditional unconditional) 16
week2a Υπολογίστε ποιος είναι ο μέγιστος αριθμός για τον οποίο ο κώδικας δίνει το σωστό αποτέλεσμα. Στην συνέχεια τροποποιήστε τον κώδικα έτσι ώστε να δέχεται από τον χρήστη μόνοτους αριθμούς για τους οποίους δίνει το σωστό αποτέλεσμα. week2b Βελτιώσεις στον κώδικα week2 Τροποποιήστε το πρόγραμμα έτσι ώστε μετά από την εμφάνιση του αποτελέσματος να δίνεται η δυνατότητα στον χρήστη για υπολογισμό νέου αθροίσματος γινομένων ή έξοδο από το πρόγραμμα. week2c Τροποποιήστε το πρόγραμμα έτσι ώστενα ελέγχει αν το αποτέλεσμα (άθροισμα γινομένων) είναι πολλαπλάσιο του 4 και να τυπώνεται κατάλληλο μήνυμα στην οθόνη 17