gon1332 Δημοσ. 19 Μαΐου 2015 Δημοσ. 19 Μαΐου 2015 Να εκτελέσεις στο χαρτί τον κώδικα που σου δίνεται και να μετρήσεις πόσους κύκλους μηχανής ξοδεύει. Hint: Επειδή όλες οι εντολές κοστίζουν 4 κύκλους μηχανής, εκτός από τις lw, απλά κατά την εκτέλεση του κώδικα κράτα το πλήθος εκτέλεσης των lw. Για παράδειγμα έστω ότι έχουμε τον παρακάτω κώδικα: add $8, $18, $8 sub $8, $8, $9 lw $9, 12($8) Ο επεξεργαστής εκτελεί 3 εντολές. Η μία είναι lw, ενώ οι άλλες όχι. Άρα συνολικά το πρόγραμμα "τρώει" 2*4 + 1*5 = 13 κύκλους μηχανής. Στη συνέχεια με το δεδομένο που σου δίνει μπορείς να βρεις πόση ώρα τρέχει το πρόγραμμα σε seconds. f = 100MHz => 1/T = 100MHz => T = 1/100MHz = 1/100 ns = 10^-2 ns ο ένας κύκλος. Άρα το πρόγραμμα εκτελείται για 13*10^-2 ns.
Επισκέπτης Δημοσ. 19 Μαΐου 2015 Δημοσ. 19 Μαΐου 2015 Ωραία , ευχαριστώ θα την δω και θα γραψω το αποτέλεσμα για να μου πεις !
Επισκέπτης Δημοσ. 19 Μαΐου 2015 Δημοσ. 19 Μαΐου 2015 Δηλαδη εδω πως γίνεται ? main: addi $8, $0, 12 (1) addi $9, $0, 0 (2) addi $10, $0, 0 (3) loop1: la $11, mat (4) lw $12, 0($11) (5) addi $9, $9, 9 (6) beq $8, $9, L1 (7) addi $10, $10, 3 (8) beq $8, $10, L2 (9) j loop1 L1: addi $13, $0, 1 j end L2: addi $13, $0, 2 end: με το beq ?
gon1332 Δημοσ. 21 Μαΐου 2015 Δημοσ. 21 Μαΐου 2015 Κάποιες εντολές δίνουν τη δυνατότητα άλματος σε κάποια άλλη εντολή. Λογικά προγραμματισμό έχεις κάνει στο πρώτο έτος. Καταλαβαίνεις έτσι, που μπορεί να χρειάζονται τέτοιες εντολές. Τέτοιες εντολές MIPS είναι οι beq, bne, j, jal, jr και άλλες. Οι δύο πρώτες είναι εντολές άλματος υπό συνθήκη. Δηλαδή θα εκτελεστεί το άλμα μόνο αν ισχύει η συνθήκη, διαφορετικά θα εκτελεστεί η αμέσως επόμε- νη εντολή. Οι τρεις τελευταίες είναι εντολές άλματος χωρίς συνθήκη. Δηλαδή το άλμα θα εκτελεστεί χωρίς να ελεχθεί κάποια συνθήκη. Πάμε να δούμε ένα μικρό παράδειγμα: # reg $s0 contains the integer 10 add $s1, $0, $0 add $t0, $0, $0 loop: bge $t0, $s0, end: add $s1, $s1, $t0 addi $t0, $t0, 1 j loop end: Στον παραπάνω κώδικα ο $t0 αρχικά είναι 0, ενώ ο $s0 είναι 10. Με το που φτάνει ο PC στο bge, ελέγχεται αν η τιμή του $t0 ξεπέρασε αυτή του $s0. Αυτό δεν ισχύει, οπότε προχωράμε με την αμέσως επόμενη εντολή. Αυτή η εντολή, προσθέτει την τιμή του $t0 στην $s1. Τέλος αυξάνουμε την τιμή του $t0 κατά ένα και στη συνέχεια πραγματοποι- είται άλμα στο label loop, οπότε και συνεχίζεται η εκτέλεση; Μέχρι πότε; Μέχρι η τιμή του $t0 να γίνει ίση ή να ξεπεράσει την τιμή του $s0. Και κάπως έτσι υλοποιείται ένα for loop statement σε assembly MIPS. Στη συγκεκριμένη περίπτωση το loop θα εκτελεστεί 10 φορές. Στην 11τη το $t0 θα είναι ίσο με το 10, οπότε η συνθήκη της bge θα είναι αληθής, οπότε και ο PC θα "δείχνει" στο label end. Άρα μέσα στο loop εκτελούνται συνολικά 10*3+1 εντολές. Το +1 για την τελευταία εκτέλεση της bge. Οπότε κάπως έτσι θα δουλέψεις.
Επισκέπτης Δημοσ. 22 Μαΐου 2015 Δημοσ. 22 Μαΐου 2015 main: addi $8, $0, 12 1 addi $9, $0, 0 1 addi $10, $0, 0 1 loop1: la $11, mat 1111 lw $12, 0($11) 1111 addi $9, $9, 9 1111 beq $8, $9, L1 1111 addi $10, $10, 3 1111 beq $8, $10, L2 1111 j loop1 111 L1: addi $13, $0, 1 j end L2: addi $13, $0, 2 1 end: συνολο εντωλων που εκτελουνται : 31 οποτε 27*4+4*5 = 128 100Mhz=100000000Hz οποτε 128/100000000 = 0,00000128s (τους άσσους τους χρησημοποιω σαν μετρητες )
gon1332 Δημοσ. 24 Μαΐου 2015 Δημοσ. 24 Μαΐου 2015 Πως κατάφερες να μεταβείς στο label L1; Ο $8 αρχικοποιείται μία φορά και δεν αλλάζει σε 12. Ο $8 συγκρίνεται μόνο με τον $9 για άλμα στην L1, αλλά ο $9 αρχικοποιείται με 0 και αυξάνεται ανά 9άδες(0, 9, 18,...), άρα ποτέ δε συναντά το 12 και άρα ποτέ δεν πραγματοποιείται άλμα εκεί. Εγώ έβγαλα αυτό: main: addi $8, $0, 12 # 1 addi $9, $0, 0 # 1 addi $10, $0, 0 # 1 loop1: la $11, mat # 1+1+1+1 lw $12, 0($11) # 1+1+1+1 addi $9, $9, 9 # 1+1+1+1 beq $8, $9, L1 # 1+1+1+1 addi $10, $10, 3 # 1+1+1+1 beq $8, $10, L2 # 1+1+1+1 j loop1 # 1+1+1 L1: addi $13, $0, 1 j end L2: addi $13, $0, 2 # 1 end: ## Τιμές ###################################### # $8 = 12 # $9 = 0, 9, 18, 27, 36 # $10 = 0, 3, 6, 9, 12 # $11 = &mat # $12 = *mat
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα