qna_rh
Thread Id: 11669
Thread Name: ASM y C/C++
#0
cosarara97 12296
Pufff, hace mucho que no posteo aquí...

Esto es para los que saben usar el ASM.
Bueno, es que he estado pensando, y se me ha ocurrido lo siguiente:
Si sabéis un poco como funciona un compilador sabréis que no transforma el código fuente de C/C++ a binario directamente, sino que primero pasa por el ASM. Personalmente se como hacer que el compilador me guarde el asm en un archivo (bueno, ahora no me acuerdo exactamente, pero una vez lo hice xD).
Entonces mi pregunta es:
¿Podemos usar C/C++ en lugar de ASM directamente?
Si es así me ahorraría aprender ASM y aprendería C++ directamente, que es mucho mas útil a nivel practico fuera del RH.

Gracias! =D
#1
Gut_Bro 14808
Siii!!

De hecho en una discusión contigo te envié un link a una pagina que era gbajunkie, y tú otra que era tonc, ambos "métodos" se basaban en utilizar C para programar un juego, y el compilador lo convertía a ASM, el problema era que lo hacía en modo ARM y no en thumb (lo cual no se en que pueda afectar xD).

Creo que sería "más fácil", pero como siempre he dicho, ASM no es difícil ni complicado, lo que sí es, es encontrar lo que deseas hacer con ello xD
#2
cosarara97 12296
Así que solo ARM...
Bueno, según hackmew el ARM ocupa más espacio y es mas lento en el ROM.

Tendría que buscar a ver si se puede hacer que compile thumb...
#3
cosarara97 12296
LOL!

Si lo siguiente es thumb significa que ya se como hacer que arm-eabi-gcc compile thumb:

Esta en plan cutre tal como ha salido del compilador, pero por eso de ".thumb_func" estoy bastante seguro de que es thumb =D

Bueno, a ver, el comando exacto que he usado:
$ /opt/devkitpro/devkitARM/bin/arm-eabi-gcc -I /opt/devkitpro/tonclib/include/ -O2 -mthumb -mthumb-interwork -S input.c -o output.s
Que generalmente sería:
$ arm-eabi-gcc -O2 -mthumb -mthumb-interwork -S input.c -o output.s
Donde input.c es el codigo en c que hemos escrito y output.s es el código en asm que se va a generar.
Lo que está en negrita es opcional. Si no lo ponemos el output se guardará en un archivo *.s llamado igual que el input (sin el ".c")
El "-O2" también es opcional, y sirve para optimizar.

El arm-eabi-gcc está en /opt/devkitpro/devkitARM/bin/arm-eabi-gcc siendo /opt/devkitpro/ el directorio donde está instalado devkitpro. Naturalmente esto es una ruta linux. En windows estará más o menos por una ruta así:
C:\devkitpro\devkitARM\bin\arm-eabi-gcc.exe


Aún así voy a aprender asm, pero está bien saberlo :D

Lo he sacado del tutorial de asm que hay en tonc. Recordad que el thumb en el fondo es un tipo de arm, porque funciona en el procesador ARM7TDMI.

EDIT: Lo siento por el doble post, espero que no pase nada...
#4
Sonicarvalho 17082
Eh, no se si seguiste este tutorial, pero hay aquí un ejemplo practico y todo!
http://www.pokecommunity.com/showthread.php?t=259502

Si siguieres ese tuto seguro que te pasaras bien.

:D

Saludos