Decir que lo hemos desarrollado en forma de función para poder utilizarlo más adelante en otras funciones más complejas.
La función toma en $3 la dirección donde comienza el array, en $7 el tamaño del array y en $2 la dirección de memoria donde guardaremos el resultado (sería algo así como pasar un parámetro por referencia en C o C++).
He de decir, por último, que para que funcione bien con el primer elemento no hay que pasarle un [1], sino un [1, 1]. Ésto lo hemos hecho por temas de simplicidad, pero si hiciera falta cambiarlo, sería muy simple.
Dicho ésto, os dejo aquí el código ;)
.data array: .word 1 3 3 1 tam: .word 4 res: .word -1 .text lw $7, tam($0) #Tamaño la $3,array la $2,res jal Tar li $2,10 syscall Tar: add $8,$0,$2 #Indice Mem. Res add $5,$3,$0 #Índice Mem. Array addi $6,,$0,1 #Constante 1 sw $6,0($8) #res[0]=1 addi $10,$0,1 #i del For loop: slt $4,$10,$7 beq $4,$0,FinFor lw $12,0($5) #Array +$8 addi $5,$5,4 addi $8,$8,4 #Sumamos 4 al Índice lw $13,0($5) #Array +$8 add $21,$12,$13 #Guarda en $21 la suma $12+$13 sw $21,0($8) #Guarda en $21 en res $8 addi $10,$10,1 #i++ j loop #Bucle FinFor: addi $8,$8,4 #Suma 4 a lo que hay en $8 sw $6,0($8) jr $31
No es complicado, ¿verdad? Si no lo entendéis del todo escribidme y subo el código que se usaría en C++ o Java con la misma función, para que lo entendáis mejor.
Saludos;)