Escritos por los mejores hackers para compartir y difundir sus técnicas o explicar el uso de herramientas. Síguelos y practica hasta que consigas dominar la técnica que explican.
El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del código máquina específico para cada arquitectura de computadoras legible por un programador.
Fue usado ampliamente en el pasado para el desarrollo de software, pero actualmente sólo se utiliza en contadas ocasiones, especialmente cuando se requiere la manipulación directa del hardware o se pretenden rendimientos inusuales de los equipos.
Cuando vamos a referirnos al ASM en GBA nos referimos a aquel lenguaje que nos permite trabajar de una forma eficaz y directa los datos internos de un rom, aquellos que no podemos modificar con las herramientas, que hasta el momento, utilizamos para la edición de los ROMS de GBA. Con el ASM podemos realizar infinidad de aplicaciones en nuestros ROMS.
Ahora explicaremos que son los registros, que en base a ellos podremos generar nuestras rutinas.
Los registros son empiezan desde r0 hasta r15:
En este tutorial les explicaré las instrucciones (Comandos, como se llamaría en scripts) necesarias para poder generar una rutina.
En este tutorial usaré el Advance Gold Road 2.1 que lo pueden descargar de Pokehacking (Pagina italiana).
El Advance Gold Road 2.1 te permite cargar los valores asignados a las variables desde el inicio de tu rutina de la forma:
@define Offset = 0xOffset @define Valore = 0xValore Y todas las demás que necesitemos….
Esto nos permite cargar valores a las variables.
Ejemplo: @define var1 = 0x02020202
De esta forma asignamos el valor “02020202” a “var1”
Después de haber asignado todas las variables que necesitemos vamos a empezar nuestra rutina con:
@thumb: Esto es tan similar como nuestro famoso #org que usamos en nuestros scripts.
Ahora necesitamos definir los registros que deseamos utilizar, y hay dos formas de realizar esto por medio de la instrucción:
Ahora que ya tenemos claro como inicia una rutina en ASM utilizando el AGR 2.1, aprenderemos como terminarla:
@define Offset = 0xOffset
@define Valore = 0xValore
@thumb
push {r0,r1,lr}
Acá estará nuestra rutina
pop {r0,r1,pc}
Ahora como nos dimos cuenta, la instrucción “pop” maneja la misma escritura que la instrucción “thumb”, es decir debemos poner al final los registros utilizados, pero esta vez cambiamos “lr” por “pc”. También si deseamos usar nuestra rutina sin asignar unos registros específicos.
@define Offset = 0xOffset
>@define Valore = 0xValore
@thumb
push {lr}
Aca estará nuestra rutina
pop {pc}
Simplemente solo dejamos en “thumb” “lr” y en “pop” “pc”.
Cuando usamos una instrucción, sea la que sea, debemos asignarle un registro, y si es el caso una variable o un valor que deseamos que escriba el registro.
LDR
Esta instrucción es multipropósito, pero su principal propósito es cargar (leer) una dirección
Ejemplo:
Cuando queremos que nos cargue un byte que está en cierta dirección, y que NO nos cargue la dirección como tal hacemos lo siguiente:
STR
Esta instrucción nos permite, guardar en un registro el valor de otro registro para ser utilizado posteriormente.
Mov
Esta instrucción nos permite escribir en un registro un valor, una dirección o lo que queramos.
Add
Esta instrucción nos permite “sumar” en un registro.
Sub
Esta instrucción nos permite “restar” en un registro.
Cmp
Esta instrucción nos compara valores entre registros, o entre un registro y un valor.
b (Parecido a un goto en nuestros scripts)
Esta instrucción nos permite saltar a otra instancia de nuestra rutina, ya sea con una condición o no
La instrucción “b” maneja las siguientes siglas
Sigla |
Significado |
EQ |
igual |
NE |
distinto |
LT |
menor |
GT |
mayor |
GE |
Mayor o igual |
LE |
Menor o igual |
Tabla tomada de Pokehacking.
Para usarlo usamos la siguiente formulación.
Cpm r0,r1
bEQ parte2
parte2:
bla bla bla
pop {pc}
Si la condición nos muestra que nos da igual nos envía a la parte dos de nuestra rutina.
Nuestra Primer Rutina
@define lapices = 0x1
@define cuaderno = 0x2
@define dinero = 0x3
@thumb
push {lr}
str r0, lápices ‘ Se carga en r0 el valor de los lápices “1”
str r1, cuaderno ‘Se carga en r1 el valor del cuaderno “2”
str r2, dinero ‘Carga en r2 la cantidad de dinero que tenemos “3”
add r0, r0, r1 ‘Se suman los costos de los lápices y el cuaderno y se guarda en r0”
cmp r0, r2 ‘ compara el costo total con el dinero disponible (r0 y r2)
bEQ comprar ‘Si el costo total es igual al dinero disponible entonces vamos a comprar
comprar:
mov r4, r0 ‘Compramos los productos en la tienda y quedan registrados (r4)
pop { pc}
Tutorial escrito por Peyi.
Web diseñada por Serg!o. Alojada por SupportivHost
Pokémon y todos sus respectivos nombres son marcas registradas y © de Nintendo Nintendo 1996-2008.
Para más información véase el aviso legal.