Εχει κανεις ιδεα τι παει στραβα με τον κωδικα μου για το quiz 3b? Κανει compile και δουλευει μονο για την περιπτωση οπου ο πινακας εχει μεγεθος 0. Χρησιμοποιω κατευθειαν τους καταχωρητες που εχουν τα ορισματα και δεν κανω κατι load η store (γενικα δεν χρησιμοποιω μνημη).
Η εκφωνηση:
Quote
Στόχος της παρούσας εργασίας είναι να υλοποιηθεί συνάρτηση, σε MIPS Assembly, η οποία έχοντας ως είσοδο τον δείκτη (pointer -- θέση μνήμης) ενός διανύσματος και το μήκος του, θα βρίσκει την τιμή του μέγιστου στοιχείου και την θέση του στο διάνυσμα. Στην περίπτωση όπου το μέγιστο στοιχείο επαναλαμβάνεται, θα επιστρέφει την θέση της τελευταίας εμφάνισής του. Η αρίθμηση ξεκινάει από το 1 (1-based indexing). Στην περίπτωση όπου το διάνυσμα είναι κενό (μήκος μηδέν) θα επιστρέφεται ο μικρότερος προσημασμένος ακέραιος και η τιμή 0 στην θέση.
Ο κωδικας:
Code:
MaxAndArg:
li $v0, -2147483648 # $v0(MAX) is the smallest negative number
li $v1, 0 # $v1(POSITION) starts from zero
li $t3, 0 # $t3(i in a normal language) will be used to loop
li $t4, 0 # $t4 will be used to show the position in the array
L2:
beq $t3, $a1, EXIT # if (i = array size) goto EXIT
sll $t4, $t4, 2 # $t4 = $t4 * 4
add $a0, $t4, $a0 # $a0 = $a0 + $t4 (next element in the array)
blt $v0, $a0, L1 # if (max < a[j]) goto L1
addi $t3, $t3, 1 # i++
addi $t4, $t4, 1 # array_position++
j L2
L1:
addi $v0, $a0, 0 # $v0 = $a0
addi $v1, $t3, 1 # $v1 = i + 1 (probably works)
addi $t3, $t3, 1 # i++
addi $t4, $t4, 1 # array_position++
j L2
EXIT:
jr $ra #return
Ευχαριστω προκαταβολικα
edit: tag