ΗΜΥ 213 Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών Παρουσίαση Εργαστηρίου 3 ιδάσκων: ρ. ρ. Γιώργος Ζάγγουλος Email: zaggoulos.george@ucy.ac.cy
Ορίσµατα από τη γραµµή εντολών (set parameters in QtSpim) Τα ορίσµατα στο QtSPIMµπορούν να δοθούν από την επιλογή run parameters που βρίσκεται στο µενού του simulator στον προσοµοιωτή. Το αποτέλεσµα της πιο πάνω ενέργειας είναι η αλλαγή στην τιµή του καταχωρητή $a0, ο οποίος θα πάρει το πλήθος των ορισµάτων που δώσαµε (διαχωρισµένα µεταξύ τους µε κενό). Μέσω του καταχωρητή $a1, µπορούµε να βρούµε τη διεύθυνση στην οποία έχει αποθηκευτεί το κάθε όρισµα (ως 32-µπιτος αριθµός) $a0 = 2έχει το πλήθος ορισµάτων $a1 = δείκτης µνήµης,έχει τη διεύθυνση όπου αποθηκεύτηκε το 1 ο όρισµα (όνοµα του αρχείου) 4($a1) =δείκτης µνήµηςέχει τη διεύθυνση όπου αποθηκεύτηκε το 2 ο όρισµα (1 ο όρισµα που δόθηκε στο run parameters) π.χ. για 5, αποθηκεύεται0x35 Πως µπορούµε να διαβάσουµε την τιµή που δόθηκε από τη γραµµή εντολών(set parameters) ως αριθµό; 2
Κώδικας ascii 3
Παράδειγµα Lab3.s Το πρόγραµµα θα τρέξει µόνο αν ο χρήστης έχει δώσει ένα αριθµό από το set run parameters του simulator. Ο αριθµός αυτός καθορίζει το γινόµενο (µόρια) που θα τυπωθεί στην οθόνη. Οι πολλαπλασιαστέοι έχουν δηλωθεί στο πεδίο.data του κώδικα και βρίσκονται αποθηκευµένοι στη µνήµη σε διευθύνσεις που µπορούν να εξευρεθούν χρησιµοποιώντας τα συµβολικά ονόµατα credits και grades Τα γινόµενα αυτά υπολογίζονται ως: credits(i) x grades(i) Το κάθε γινόµενο αποθηκεύεται σε θέσεις που έχουν δεσµευθεί στη µνήµη µε το συµβολικό όνοµα moria. Π.χ. Αν ο χρήστης εισάγει τον αριθµό 3, το πρόγραµµα θα υπολογίσει ξεχωριστά 3 γινόµενα µεταξύ credits(i) και grades(i) και θα εκτυπώσει µόνο το αποτέλεσµα του τελευταίου πολλαπλασιασµού. 4
Απαντήστε στα πιο κάτω ερωτήµατα µε βάση τον κώδικα Lab3.s 1. Ποια η διαφορά µεταξύ.byte,.word και.space; 2. Γιατί το συµβολικό όνοµα moria έχει δηλωθεί ως.word και όχι ως.byte; 3. Γιατί ο µετρητής ($t0) αρχικοποιήθηκε στο 0; 4. Πως µπορούµε να αποθηκεύουµε το κάθε γινόµενο στη µνήµη; 5. Πως µπορεί να υπολογιστεί ο µέσος όρος από τα πιο πάνω γινόµενα; 6. Τι θα συµβεί αν ο χρήστης δώσει µεγαλύτερο αριθµό από τον αριθµό των µαθηµάτων που είναι καταχωρηµένα στο πρόγραµµα (αν δεν υπήρχε ο έλεγχος); Ας δούµε τον κώδικα αναλυτικά! 5
Βελτίωση του κώδικα (µετονοµάστε σε Lab3a.s) Υλοποιήστε τις αλλαγές που απαιτούνται έτσι ώστε το αποτέλεσµα της πράξης του γινοµένου να αποθηκεύεται στη σωστή θέση που έχει κρατηθεί για αυτό τον σκοπό στη µνήµη (moria). βοήθεια: βοήθεια:ο ο δείκτης στη µνήµη θα πρέπει να αυξάνεται κατά 4 µετά από κάθε εντολή store 6
Βελτίωση του κώδικα (Lab3b.s) Υλοποιήστε τον υπολογισµό του µέσου όρου σε ξεχωριστό βρόχο (φορτώνοντας και πάλι τα δεδοµένα που χρειάζεστε από την µνήµη). Το αποτέλεσµα θα πρέπει να αποθηκευτεί πίσω στη θέση µνήµης που δεσµεύσαµε Εκτυπώστε το αποτέλεσµα στην οθόνη. 7
Πρόσθετα Ερωτήµατα Πως µπορούµε να δούµε σε πόσα µαθήµατα ο φοιτητής πήρε άρτια ή περιττή βαθµολογία; Βρέστε την διεύθυνση µνήµης που περιέχει βαθµολογία µαθήµατος 70! Βρέστε εάν στη λίστα µαθηµάτων υπάρχει καταχωρηµένο το µάθηµα ΗΜΥ213 και δηλώστε την αρχική διεύθυνση του µαθήµατος. 8
Μαθησιακοί Στόχοι Εργαστηρίου 3 Εξοικείωση µε το QtSpim Χρήση εντολών assembly για δηµιουργία µετρητών, επαναλήψεων, ελέγχου και αριθµητικών πράξεων Χρήση εντολών φόρτωσης και αποθήκευσης δεδοµένων από/προς τη µνήµη µε διάφορους τρόπους διευθυνσιοδότησης Χρήση της επιλογής run parameters για είσοδο στοιχείων 9