Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Για όσους δεν ξέρουν το WinMIps64 βγάζει ένα bug στην εντολή jal όταν θέλουμε να τρέξουμε ένα πρόγραμμα με enable το Forwarding και το Branch Target Buffer(ταυτόχρονα). Αντί να επιστρέφει την διεύθυνση μνήμης της επόμενης στη σειρά εντολής επιστρέφει τη διεύθυνση μνήμης της επόμενης προς εκτέλεση εντολής.Έχουμε λοιπόν αυτό το κομμάτι  του προγράμματος  

 

factorial:
          
        slti r10,r1,2
        bnez r10,out      ; set r10=1 and return if r1=1


        sd r31,(r29)
        daddi r29,r29,8   ; push return address onto stack


        sd r1,(r29)
        daddi r29,r29,8   ; push r1 on stack


        daddi r1,r1,-1    ; r1 = r1-1
        jal factorial     ; recurse...
    
        


        dadd r4,r0,r10
        daddi r29,r29,-8
        ld r3,(r29)       ; pop n off the stack


        dmulu r3,r3,r4    ; multiply r1 x factorial(r1-1)
        dadd r10,r0,r3    ; move product r3 to r10


        daddi r29,r29,-8  ; pop return address
        ld r31,0(r29)
     
          out:    jr r31

Η "jal factorial"  αντί να επιστρέφει την διεύθυνση μνήμης της εντολής "dadd r4,r0,r10" επιστρέφει την διεύθυνση μνήμη της εντολής "slti r10,r1,2" και έτσι το πρόγραμμα μπαίνει σε έναν ατέρμων βρόχο.

 

Σκέφτηκα δύο λύσεις γι΄αυτό :

1)Να αλλάξω την "jal" με την  "j" αλλά δεν ξέρω πώς να αποθηκεύσω την διεύθυνση μνήμης της "dadd r4,r0,r10" προκειμένου να μπει στον καταχωρητή "r31"

2)Να βάλω την εντολή  "dadd r4,r0,r10" πριν την εντολή "slti r10,r1,2" ώστε να είναι ουσιαστικά η πρώτη  εκτελέσιμη εντολή μετά την jal.Αλλά δεν τρέχει.

Έχει κανένας καμία ιδέα;;

Αν κάποιος θέλει να δει όλο το πρόγραμμα ..είναι το πρόγραμμα factorial.s και είναι ένα από τα παραδείγματα-προγράμματα του WinMips64

Link.png Site: https://github.com/FMCalisto/ILP/blob/master/winmips64/factorial.s#L44

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...