Asembler/C_se pueden escribir juntos?
Estoy haciendo un programa de transmision y recepcion de señales via radio y el programa que estoy desarrollando lo estoy aciendo en Asembler y me gustaria saber si entre medio del programa puedo escribir una rutina en C, es decir mezclar en el mismo programa C y asembler.
Uso el MPLAB de microchip, gracias!
Uso el MPLAB de microchip, gracias!
Según se desde C si puedes usar rutinas de ensamblador pero no se decirte si a la inversa funcione, yo creo que no.
Claro que si... desde ensamblador TODO se puede...
Los compiladores le agregan un "_" delante del conbre de la funcion y los parametros se pasan en la pila de izquierda a derecha con push susecivos para que queden en orden (lo que esta mas cerca de lo que pone el CALL es el primer parametro)
De forma inversa se puede escrivir la rutina en ensamblador con la convencion de llamadas en C (lo parametros de izquierda a derecha, el etorno en los registros, liveracion del stack de parametros a cargo de la funbcion, etc.)
Es muy simple llamar a una funcion de C en ensamblador. Por ejemplo una que se llama printf... ;-)
pushw %ax
pushl %ecx
pushb %dh
pushl StrFormat
call _printf
...resto del programa...
Aviso esto esta en sintaxis AT&T (la del GCC y el AS) pero es perfectamente transportable a la sintaxis INTEL de NASM o TASM...
Los compiladores le agregan un "_" delante del conbre de la funcion y los parametros se pasan en la pila de izquierda a derecha con push susecivos para que queden en orden (lo que esta mas cerca de lo que pone el CALL es el primer parametro)
De forma inversa se puede escrivir la rutina en ensamblador con la convencion de llamadas en C (lo parametros de izquierda a derecha, el etorno en los registros, liveracion del stack de parametros a cargo de la funbcion, etc.)
Es muy simple llamar a una funcion de C en ensamblador. Por ejemplo una que se llama printf... ;-)
pushw %ax
pushl %ecx
pushb %dh
pushl StrFormat
call _printf
...resto del programa...
Aviso esto esta en sintaxis AT&T (la del GCC y el AS) pero es perfectamente transportable a la sintaxis INTEL de NASM o TASM...
PD: No mire lo ultimo de MPASM...
Solo hace falta mirar como pasa los parametros porque el PIC no puede implementar una pila por HARDWARE (lo hace por software)
Lo recomendable es que haga que el compilador de C genere el codigo ASM y te fijes de que registros lee la rutina. Lo logico es que la pila este implementada al final de la memoria del PIC, pero esto de lo logico... mmmm....
Solo hace falta mirar como pasa los parametros porque el PIC no puede implementar una pila por HARDWARE (lo hace por software)
Lo recomendable es que haga que el compilador de C genere el codigo ASM y te fijes de que registros lee la rutina. Lo logico es que la pila este implementada al final de la memoria del PIC, pero esto de lo logico... mmmm....
