Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: SKaY9 en 2 Mayo 2013, 19:20 pm



Título: ENSABLADOR MIPS
Publicado por: SKaY9 en 2 Mayo 2013, 19:20 pm
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.

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?


Título: Re: ENSABLADOR MIPS
Publicado por: SKaY9 en 10 Mayo 2013, 14:24 pm
Ya esta solucionado.