Ensamblador - Recorrer vector en ensamblador y para saber máximo y mínimo.

 
Vista:
sin imagen de perfil

Recorrer vector en ensamblador y para saber máximo y mínimo.

Publicado por David (2 intervenciones) el 27/08/2012 19:17:11
Intento recorrer un vector de enteros de 128 posiciones, y calcular el valor mínimo y máximo.
Mi código es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
vector:
	.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
	.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
	.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
	.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
	.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
	.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
	.word 1,2,3,4,5,6,7,8,9,10,11,34,13,14,15,16
	.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
	.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
 
.global _max
_max:
	.word 0
 
.global _min
_min:
	.word 0
 
.global main
main:
	add r1,r0,_vector	;inicio del vector
	add r2,r1,#512		;posición final del array 128 posiciones * 4
 
	lw r3, 0(r1)		; inicializamos maximo (r1) al primer elemento
	lw r4, 0(r1)		; inicializamos minimo (r2) al primer elemento
 
	addi r1,r1,#4		; pasamos a la segunda posición. Aquí empieza el bucle.
 
bucle:
	lw r5, 0(r1)	; cargamos x[i]
	sgt r6, r5, r3	; if (x[i] >= max) r6=1 else r6=0
	bnez r6, maximo	; si es mayor salta a maximo donde se actualiza el valor de max.
 
			; en otro casi comprueba si es menor
 
	slt r8, r5, r4	; if (x[i] < min) r8=1 else r8=0
	bnez r8, minimo	; si es menor salta a minimo donde se actualiza el valor de min
 
	jal fin		; si no es ni mayor que el maximo, ni menor que el minimo, no se hace nada.
 
maximo:
	sw 0(r3), r5	; max = x[i] y a continuación siguiente iteración
	jal fin		; Hace la operación y vuelve al procedimiento principal, comprobar si hay más numeros en el vector o terminar.
 
minimo:
	sw 0(r4), r5	; max = x[i] y a continuación siguiente iteración
			; Hace la operación y vuelve al procedimiento principal, comprobar si hay más numeros en el vector o terminar.
 
fin:
	addi r1,r1,#4 	; incrementamos el índice, siguiente posición en el vector.
	seq r9, r1, r2	        ; si hemos llegado a 128 se acaba (r2=512 -> declarado en el inicio)
	beqz r9, bucle	; si i es menor que 128 sigue iterando
 
	add r10,r0, _max	; cargamos la direccion en memoria de _max
	sw 0(r10), r3		; y guardamos
 
	add r11,r0, _min
	sw 0(r11), r4
	trap #0



El problema es que cuando lo ejecuto me devuelve:

return bad code: -1077375420



A ver si alguien tiene alguna idea del problema en código, no tengo mucha experiencia y puede haber una barbaridad en cualquier sitio :S
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Recorrer vector en ensamblador y para saber máximo y mínimo.

Publicado por David (2 intervenciones) el 27/08/2012 19:18:55
Perdón por la errata en el titulo: Recorrer vector en ensamblador para saber valor máximo y mínimo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar