Foros del Web » Programación para mayores de 30 ;) » Programación General »

[SOLUCIONADO] Ensamblador MIPS

Estas en el tema de Ensamblador MIPS en el foro de Programación General en Foros del Web. Buenas, tengo que hacer lo siguiente: implementar en lenguaje ensamblador del MIPS el producto escalar de 2 vectores. data # Segmento de datos tvector: .word ...
  #1 (permalink)  
Antiguo 26/04/2013, 06:48
 
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
  #2 (permalink)  
Antiguo 26/04/2013, 08:13
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Ensamblador MIPS

Bueno, yo he tocado mas el ensamblador de intel y del z80 pero intentaré echarte una mano.

Yo lo veo todo muy bien excepto dos lineas

Código:
		lw $t0, 0($a0) 				# $t0 <-- a0[i] 
 		lw $t1, 0($a1) 				# $t1 <-- a1[i]
Corrigeme si me equivoco en algun momento, vale? :)

Tu usas como variable "i" al registro $t0 y $a0 e $a1 son punteros a los vectores a tratar. Yo, lo que veo en tu codigo es que aumentas el valor de "i" ($t0) pero siempre accedes a la misma posición del vector, puesto que no mueves el puntero $a0/$a1.

No se si me he explicado :)
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 27/04/2013, 04:21
 
Fecha de Ingreso: julio-2006
Ubicación: Alicante
Mensajes: 281
Antigüedad: 17 años, 9 meses
Puntos: 1
Respuesta: Ensamblador MIPS

Correcto, siempre accedo a la misma posicion, y como puedo cambiar eso para que llegue hasta 140 o el valor que ponga?
  #4 (permalink)  
Antiguo 29/04/2013, 08:33
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Ensamblador MIPS

Para cambiarlo, digo yo, tendrás que aumentar la posición del puntero que apunta a los vectores, no?
__________________
Aviso: No se resuelven dudas por MP!
  #5 (permalink)  
Antiguo 30/04/2013, 01:54
 
Fecha de Ingreso: julio-2006
Ubicación: Alicante
Mensajes: 281
Antigüedad: 17 años, 9 meses
Puntos: 1
Respuesta: Ensamblador MIPS

Y como la aumento?
  #6 (permalink)  
Antiguo 01/05/2013, 08:53
 
Fecha de Ingreso: julio-2006
Ubicación: Alicante
Mensajes: 281
Antigüedad: 17 años, 9 meses
Puntos: 1
Respuesta: Ensamblador MIPS

Y como lo puedo hacer para aumentarlo?
Que alguien responda please es urgente

Última edición por Danico; 02/05/2013 a las 03:31

Etiquetas: ensamblador, lenguaje, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:59.