
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:
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
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


0