Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/04/2013, 06:48
Danico
 
Fecha de Ingreso: julio-2006
Ubicación: Alicante
Mensajes: 281
Antigüedad: 17 años, 9 meses
Puntos: 1
Ensamblador MIPS

Buenas, tengo que hacer lo siguiente:
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.

Por ahora tengo esto, pero no me llega funcionar, si alguien sabe que tengo mal o que me falta se lo agradecería:

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, 0				# 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, $v0, $a3 			# res <-- res + a0[i] * a1[i] 

 		addi $t3, $t3, 1 			# i++ 
		b ip1 					# cierra bucle (salto incond. a ip1)		
ipx:		jr $ra 					# retorna al invocador