Έχω μια ερώτηση σχετικά με το effective address calculation. Έστω ο παρακάτω κώδικας (της άσκησης)
S.D F10 8 R1 DADDI R1 R1 #16
Η store θα κάνει το effective address calculation (memory[R1+8]) κατά το EX στάδιό της σύμφωνα με την εκφώνηση. Έστω τώρα ότι η store περιμένει όρισμα (F10), οπότε δεν μπορεί να αρχίσει να εκτελείται. Επίσης, έστω ότι δεν υπάρχει εξάρτηση στον R1.
Η add δεν μπορεί να αρχίσει να εκτελείται, γιατί αν τελειώσει (WB) πριν τη store, η store θα αποτύχει στο σωστό calculation του effective address (R1+8). Σωστά ως εδώ;
Όμως, στις περσινές λύσεις της άσκησης tomasulo (πρώτο μέρος, χωρίς ROB), αυτό δε γίνεται. Στον κύκλο 10, η DADDUI γράφει αποτελέσμα στον R2, ενώ η store που είναι πριν από αυτήν εκτελείται (EX) στον κύκλο 27. Αν σε εκείνον τον κύκλο γίνει το effective address calculation (για το lea της store), η σημασιολογία του προγράμματος δεν είναι ορθή. Από ότι καταλαβαίνω, το effective address calculation (ο υπολογισμός R2+0 για αυτήν τη store) έγινε κατά το IS. Έτσι δε δημιουργείται πρόβλημα με εντολές που ακολουθούν και πειράζουν την τιμή του R2. Κατάλαβα λάθος;
Ζητώ προκαταβολικά συγγνώμη για την παιδαριώδη ερώτηση. Ευχαριστώ για τυχόν διευκρίνηση