Asembler/C_se pueden escribir juntos?

Orejuela18
23 de Diciembre del 2004
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!

Rev
23 de Diciembre del 2004
Según se desde C si puedes usar rutinas de ensamblador pero no se decirte si a la inversa funcione, yo creo que no.

Hiei
23 de Diciembre del 2004
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...

Hiei
23 de Diciembre del 2004
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....