Description
Τμιμα Πλθροφορικισ
Μάκθμα: Οργάνωςη Συςτημάτων Υπολογιςτών
Χειμερινό Εξάμθνο 2017-18 Διδάςκων: Αν. Κακθγθτισ Ι. Κουτςόπουλοσ Υπεφκυνθ Εργαςιϊν:
Μαρία Τογαντηι
3θ Εργαςία Προγραμματιςμοφ ςε Assembly
Ειςαγωγή: Στον επεξεργαςτι MIPS32, θ δυναμικι παραχϊρθςθ μνιμθσ, γίνεται με τθν κλιςθ 9 του ςυςτιματοσ θ οποία επιςτρζφει ζνα δείκτθ προσ τθν περιοχι τθσ μνιμθσ που παραχωρεί το ςφςτθμα. Το μζγεκοσ ςε bytes τθσ περιοχισ μνιμθσ που παραχωρείται, δίνεται ωσ τιμι ςτον καταχωρθτι $a0. sbrk – Memory Allocation:
– system call 9,
– $a0 = number of bytes of storage desired,
– $v0 = address of block
Για παράδειγμα, το παραπάνω πρόγραμμα, διαβάηει δφο ακεραίουσ και τουσ αποκθκεφει ςτθ μνιμθ, ςε περιοχι που παραχωρείται δυναμικά, κατά τθ διάρκεια εκτζλεςθσ του προγράμματοσ, χωρίσ διλωςθ και αποκικευςθ ςε πίνακα ακεραίων ςτο τμιμα δεδομζνων του προγράμματοσ. Τζλοσ, εμφανίηει τουσ δφο ακεραίουσ.
Περιγραφή εργαςίασ: Στθν περίπτωςθ μιασ γραμμικισ ςυνδεδεμζνθσ λίςτασ, κάκε κόμβοσ τθσ κα μποροφςε να είναι μια περιοχι τθσ μνιμθσ που παραχωρείτε με τον παραπάνω τρόπο και αποτελείται από δφο ακεραίουσ. Ο πρϊτοσ αποτελεί το δεδομζνο (data) του κόμβου και ο δεφτεροσ το ςφνδεςμο (link) προσ τον επόμενο κόμβο. Ο τελευταίοσ κόμβοσ κα μποροφςε να ζχει ωσ link το μθδζν:
Γράψτε ζνα πρόγραμμα ςτθ ςυμβολικι γλϊςςα του επεξεργαςτι MIPS32, που δθμιουργεί και διαχειρίηεται μια δυναμικι λίςτα ακεραίων. Κάκε ακζραιοσ πρζπει να αποκθκεφεται ςε ζνα κόμβο τθσ λίςτασ. Η ειςαγωγι ι θ διαγραφι κόμβου ςτθ λίςτα κα πρζπει να γίνεται με τζτοιο τρόπο ϊςτε θ λίςτα να παραμζνει πάντα ταξινομθμζνθ ςε αφξουςα ςειρά:
Ειςαγωγι Κόμβου ςτθ λίςτα:
Διαγραφι Κόμβου από τθ λίςτα:
Η διεπαφι με το χριςτθ, πρζπει να γίνεται μζςω μιασ λίςτασ επιλογών (menu) που κα παρζχει ςτο χριςτθ τισ εξισ επιλογζσ:
1. Ειςαγωγι Κόμβου ςτθ Λίςτα ςτθ ςωςτι κζςθ, ζτςι ϊςτε θ λίςτα να είναι ταξινομθμζνθ ςε αφξουςα ςειρά.
2. Διαγραφι Κόμβου από τθ λίςτα, ζτςι ϊςτε θ λίςτα να παραμζνει ταξινομθμζνθ ςε αφξουςα ςειρά.
3. Εμφάνιςθ Λίςτασ με αφξουςα ςειρά (προβολι δεδομζνων από τον πρϊτο ωσ τον τελευταίο κόμβο).
4. Εμφάνιςθ Λίςτασ με φκίνουςα ςειρά (προβολι δεδομζνων από τον τελευταίο κόμβο ωσ τον πρϊτο κόμβο).
Παρατηρήςεισ ςχετικά με την υλοποίηςη:
• Η υλοποίθςθ πρζπει να γίνει όπωσ περιγράφεται παραπάνω μζςω κλιςεων δυναμικισ παραχϊρθςθσ μνιμθσ (sbrk) και όχι με πίνακα ακεραίων που ζχει δθλωκεί ςτο data segment.
• Όλεσ οι επιλογζσ του μενοφ κα πρζπει να γίνονται μζςω υποπρογραμμάτων. Γενικότερα ςχεδιάςτε το πρόγραμμα με τζτοιο τρόπο ϊςτε να μεγιςτοποιείται θ επαναχρθςιμοποίθςθ του κϊδικα μζςω υποπρογραμμάτων.
• Το υποπρόγραμμα που υλοποιεί τθν επιλογι (4) πρζπει να είναι αναδρομικό (recursive).
Οδηγίεσ Παράδοςησ:
• Η εργαςία είναι ομαδικι 2 ατόμων.
• Ονομάςτε το αρχείο που περιζχει το πρόγραμμα, με τουσ αρικμοφσ του φοιτθτικοφ ςασ μθτρϊου και κατάλθξθ .s (για παράδειγμα 3160000_3160010.s).
• Ακολουκείςτε τισ παρακάτω οδηγίεσ ςχετικά με τον τρόπο ςυγγραφισ του προγράμματοσ και τθν τεκμθρίωςι του:
α. Στθν αρχι του προγράμματοσ πρζπει να υπάρχει ςχόλιο με τισ παρακάτω πλθροφορίεσ:
# Authors:
β. Πριν από κάκε υποπρόγραμμα περιγράψτε με τθ μορφι ψευδοκϊδικα το υποπρόγραμμα που υλοποιείτε. Περιγράψτε τθν επικεφαλίδα του υποπρογράμματοσ, με τισ παραμζτρουσ και τα επιςτρεφόμενα αποτελζςματα κακϊσ και τον αλγόρικμο που υλοποιεί το υποπρόγραμμα.
# Pseudocode:
#
#
γ. Περιλάβετε επίςθσ ςφντομα ςχόλια ςε επιμζρουσ εντολζσ ή ομάδεσ εντολών, για παράδειγμα:
printQuestion:
li $v0, 4 la $a0, quest
syscall # print(quest)
• Εκτελζςτε το πρόγραμμά ςασ ςτον προςομοιωτι SPIM και βεβαιωκείτε ότι δεν ζχει ςυντακτικά ι άλλα ςφάλματα.
• Συμπιζςτε (.zip ι .rar) το αρχείο που περιζχει το πρόγραμμα και ανεβάςτε το ςτο eclass μζχρι τθν αναφερόμενθ θμερομθνία.
Reviews
There are no reviews yet.