Registrarse

ASM y C/C++

Estado
Cerrado para nuevas respuestas.

cosarara97

Dejad de cambiar de nick
Miembro de honor
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
 

Gut_Bro

Mega desarrollador
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
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
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...
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
LOL!

Si lo siguiente es thumb significa que ya se como hacer que arm-eabi-gcc compile thumb:
.cpu arm7tdmi
.fpu softvfp
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi_attribute 25, 1
.eabi_attribute 26, 1
.eabi_attribute 30, 2
.eabi_attribute 18, 4
.code 16
.file "asdf.c"
.text
.align 2
.global PlotPixel3
.code 16
.thumb_func
.type PlotPixel3, %function
PlotPixel3:
lsl r3, r1, #4
sub r1, r3, r1
lsl r1, r1, #4
add r0, r1, r0
mov r3, #192
lsl r3, r3, #19
lsl r0, r0, #1
add r0, r0, r3
strh r2, [r0]
@ sp needed for prologue
bx lr
.size PlotPixel3, .-PlotPixel3
.align 2
.global main
.code 16
.thumb_func
.type main, %function
main:
push {lr}
@ 15 "asdf.c" 1
@# using function
@ 0 "" 2
.code 16
mov r2, #248
ldr r3, .L10
ldr r1, .L10+4
lsl r2, r2, #2
.L3:
strh r2, [r3]
add r3, r3, #2
cmp r3, r1
bne .L3
@ 20 "asdf.c" 1
@# using inline
@ 0 "" 2
.code 16
ldr r3, .L10+8
ldr r2, .L10+12
mov r1, #31
.L4:
strh r1, [r3]
add r3, r3, #2
cmp r3, r2
bne .L4
.L8:
b .L8
.L11:
.align 2
.L10:
.word 100670976
.word 100671456
.word 100669056
.word 100669536
.size main, .-main
.ident "GCC: (devkitARM release 32) 4.5.1"
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...
 

Sonicarvalho

Tutorial Maker
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
 
Estado
Cerrado para nuevas respuestas.
Arriba