implementar en lenguaje ensamblador del MIPS el producto escalar de 2 vectores.
data # Segmento de datos
tvector: .word 6 # Tamaño de los vectores
res: .space 4 # Resultado del producto escalar
vector1: .word 6,7,8,9,4,1 # Vector 1
vector2: .word 2,3,5,4,6,7 # Vector 2
Después de la ejecución del programa ejemplo, el resultado
debe ser res=140
También se debe de poder modificar el resultador res.
Código:
.data # Segmento de datos
res: .space 4 # Resultado del producto escalar
tvector: .word 6 # Tamaño de los vectores
vector1: .word 6,7,8,9,4,1 # Vector 1
vector2: .word 2,3,5,4,6,7 # Vector 2
main:
la $a0,vector1 # $a0 <-- dirección base del array vector1
la $a1,vector2 # $a1 <-- dirección base del array vector2
lw $a2,tvector # $a2 <-- tamaño del array = n
li $a3,140 # $a3 <-- valor que le daremos a res
sw $a3,res # $a3 <-- carga el contenido de la memoria en la dirección especificada de 32 bits en res
jal ip # invoca rutina ip, guarda en $ra la dir. de vuelta
move $a0, $v0 # escribe en consola el resultado (que ip dejó en $v0)
li $v0, 1
syscall
li $v0, 10
syscall
ip: li $v0, # inicializa sum a 0. $v0 guardará el resultado que devuelve la rutina
li $t3, 0 # $t3: índice de los elementos del array (i)
ip1: bge $t3, $a3, res # sale cuando i >= res
lw $t0, 0($a0) # $t0 <-- a0[i]
lw $t1, 0($a1) # $t1 <-- a1[i]
mul $a3, $t0, $t1
add $v0, $v1, $a3 # res <-- res + a0[i] * a1[i]
addi $a0,$a0, 4 #incrementa los punteros $a0
addi $a1,$a1, 4 #incrementa los punteros $a1
addi $t3, $t3, 1 # i++
b ip1 # cierra bucle (salto incond. a ip1)
ipx: jr $ra # retorna al invocador
como puedo aumentar la posicion del puntero que apunta a los vectores, esque no se me mueve?