Registrarse

[RH - ASM] Clase 2

Estado
Cerrado para nuevas respuestas.

Ancer

Usuario de Oro
Respuesta: Re: Clase 2

Como no quería quedarme sin mostrar mi tarea voy a entregar la rutina, intente hacer una rutina en la que al utilizarse se reiniciara el el tiempo jugando. Les presento mi rutina:

Código:
.text
.align 2
.thumb

main:
        push {r0-r1, lr}
		ldr r0, lastresult
		ldr r0, [r0]
		sub r0, r0, r1
		ldr r1, var_8000
		strh r0, [r1]
		pop {r0-r1, pc}

.align 2
	lastresult:	.word 0x0300500C
	varnumber_8000: .word 0x20370B8
Aun no la he probado en mi rom,aunque dudo que funcione así que probablemente halla un error, si es así por favor corrijan me porque esto del ASM se me hace bastante complicado así que quiero aprender bien. :p Por cierto disculpa por la demora ya que he estado bastante ocupado estos días y me cuesta a veces entender algunas cosas.
Hola tiene un error en
Código:
sub r0,r1,r0
Ya que le pusiste ningún valor a r1 si le resta a r0 no hará nada
Y la variable 8000 no se necesita
Asignarle el valor 0 a r1 con mov
Y después pon los con strh r1,[r0,#xxxx] eso para la hora si es minuto o segundo strb y en xxxx pon los espacios en la lista sale cuales son E=hora 10= minuto 11= segundo
 

L!no

GBA Developer
ups, me habia olvidado como romhackear XD
Código:
.text
.align 2
.thumb

main:
	push {r0-r1, lr} //push
	eor r0, r0, r0 //limpiamos r0
	eor r1, r1, r1 //limpiamos r1
	ldr r0, var_8000 //cargamos la variable 8000
	ldr r1, var_8001 //cargamos la variable 8001
	add r0, r1, r0 //sumamos
	strb r1, [r1] //guardamos
	pop {r0-r1, pc} //pop


.align 2
	var_8000:	   .word 0x20370B8
	var_8001:	   .word 0x20370BA
 

DrakoVinyl

Profesional de WaH
Hasta aquí todo bien, creo.
Hay una cosa que no sé si entendí bien;

Cuando hago un "str" (o sus "derivados"), tal que así

Código:
.text
.align 2
.thumb

main:
	push {r0-r1, lr}
	ldr r0, lastresult
	ldrh r0, [r0]
	[B]ldr r1, varnumber_8000
	strh r0, [r1][/B]
        ...
¿Estoy "guardando" en r1 los datos que haya en otro registro?

Pero ese no es lo que más me interesa, creo que lo pillo.

Lo que si, ¿En el str, necesariamente tiene que emplearse el r1?
¿Es eso una regla propia de dicho comando/instrucción?

Eso nunca lo acabé de comprender, puesto que de donde aprendí (lo poco que aprendí), no lo especificaba.
 

Kaiser de Emperana

Called in hand
Hasta aquí todo bien, creo.
Hay una cosa que no sé si entendí bien;

Cuando hago un "str" (o sus "derivados"), tal que así

Código:
.text
.align 2
.thumb

main:
	push {r0-r1, lr}
	ldr r0, lastresult
	ldrh r0, [r0]
	[B]ldr r1, varnumber_8000
	strh r0, [r1][/B]
        ...
¿Estoy "guardando" en r1 los datos que haya en otro registro?

Pero ese no es lo que más me interesa, creo que lo pillo.

Lo que si, ¿En el str, necesariamente tiene que emplearse el r1?
¿Es eso una regla propia de dicho comando/instrucción?

Eso nunca lo acabé de comprender, puesto que de donde aprendí (lo poco que aprendí), no lo especificaba.
Haciendo "str rX, [rY]" estás escribiendo el valor guardado en el registro rX en la dirección a la que apunta rY. Si rX tiene el numero 0x11223344, va a escribir ese número; si tiene un puntero, digamos 0x08800000, va a escribir el número 0x08800000, no lo que haya en escrito en el offset. Siempre el primer registro tiene un valor y el segundo un puntero.

Y no importan los registros que uses, podés usar "strh r7, [r4]" sin problemas. Que la mayoría de los tutoriales usan r0 y r1 es una casualidad.
 
Estado
Cerrado para nuevas respuestas.
Arriba