Ver Mensaje Individual
  #1  
14/12/2018
Predeterminado Problema con comparaciones (cmp)
Buenas tardes! Estoy desarrollando una que recorre una serie de listas para llegar a un valor concreto y almacenarlo en la variable 8007 (lo explico de manera escueta porque prefiero ser lo mas objetivo posible, si alguien le interesa saber para que es que lo diga y lo ponga en los comentarios sin ningun problema )

El problema es el siguiente:

Necesito que me devuelva un valor =<4 en la variable 8007, y para ello realizo una resta de -4 sobre el valor actual de un registro en forma de bucle. El fallo esta en que al realizar el comando cmp para comparar dicho valor, no lo compara y evidentemente sigue adelante con la siguiente orden de la rutina.

El valor que contiene R2 en el momento de realizar la comparacion es correcto (lo he comprobado, y en los casos de prueba era 31), pero no consigo que entre el bucle por la comparación.

Dejo aqui dicha rutina por si alguien me puede echar una mano:

Código:
.align 2
.thumb

Cargar_Banco:
	push {lr}
	ldr r0, .banco_actual @;Carga en r0 el offset del banco actual
	ldrb r0, [r0] @;Almacena en r0 el primer byte (numero del banco actual)
	mov r1, #0x4 @;Inserta el valor 0x4 en r1
	mul r1, r0		@;Multiplica el valor de r0 por r1 y lo inserta en r1 para obtener el numero de entrada del banco
	ldr r2, .cabezal_banco @;Carga Tabla de cabezales en r2
	add r1, r2, r1 @;Añade desplazamiento sobre el offset cabezal_banco y lo sobrescribe en r1
	
Cargar_Mapa:	
	ldr r1, [r1] @; Carga el pointer correspondiente del Cabezal_Banco
	ldr r0, .mapa_actual @;Carga en r0 el offset del mapa actual
	ldrb r0, [r0] @;Almacena en r0 el primer byte (numero del mapa actual)
	mov r2, #0x4 @;Inserta el valor 0x4 en r2
	mul r2, r0 @;Multiplica el valor de r0 por r2 y lo inserta en r2 para obtener el numero de entrada del mapa
	add r2, r1, r2 @;Añade desplazamiento sobre el offset banco y lo sobrescribe en r2
	ldr r2, [r2] ;@Carga puntero del cabezal del mapa
	ldr r2, [r2] @; Carga puntero de offset del mapa
	
	
Cargar_Info:	
	mov r1, #0xC @;Inserta el valor 0xC (12) en r1
	add r1, r2, r1 @;Añade desplazamiento sobre el offset actual y lo sobrescribe en r1
	ldr r1, [r1] @; Carga puntero del Data del mapa r1
	@; INSERTAR AQUI LAS VARIABLES PARA POSICION DE GETPLAYERPOS()
	mov r2, #0x1 @; Desplazamiento para cargar segundo byte de la halfword
	add r2, r1, r2
	ldr r2, [r2] @; Carga contenido del puntero en r2
	@; HASTA AQUI FUNCIONA!
	mov r1, #0x0 @; Contador
	@; EL PROBLEMA ESTA AQUI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NO COMPARA LAS VARIABLES?
	cmp r2, #0x4
	bgt Bucle @;Si no va al bucle
	b Estado @;Si es menor o igual a 3 sale del bucle
	
Bucle:
	add r1, r1, #0x1 @; Sumar 1 al valor actual del contador
	sub r2, r2, #0x4 @; Restar 1 al valor actual del valor de la variable a comparar
	cmp r2, #0x4
	bgt Bucle
	b Estado
	
Estado:
	ldr r3, .var_8007
	strb r1, [r3] @;////// PONER R2 SI NO FUNCIONA
	pop {pc}	
	
.align 2
.var_8007: .word 0x20375E6
.var_8008: .word 0x20375E8
.var_8009: .word 0x20375EA
.cabezal_banco: .word 0x0886BBE4
.banco_actual: .word 0x03015E59
.mapa_actual: .word 0x03015E58
.facing_heroe: .word 0x0202065A
De antemano muchas gracias a cualquiera que este leyendo esto por su atención, y mas a quien intente ayudarme de alguna forma jejeje

Un saludo!

PD: hay algunos nombres de variables (entiendase por var_8008, .facing_heroe, etc) que no se han utilizado todavia debido a que la rutina esta en fase de desarrollo. Tambien puede que haya algún comentario mal explicado o errado.

Última edición por Rasputin; 14/12/2018 a las 17:40