Funcion de C asm("...")
Hola,
Cuando en un programa escrito en C quiero emplear sentencias en ensamblador creo que tengo que emplear la función asm(char*) pero lo que no sé es como indicarle los parametros del codigo C que quiero emplear en el fragmento en ensamblador.
Estoy empleando el IAR compiler y no he encontrado como se hace; en concreto, estoy portando un programa escrito para GCC compiler a IAR.
Cuando en un programa escrito en C quiero emplear sentencias en ensamblador creo que tengo que emplear la función asm(char*) pero lo que no sé es como indicarle los parametros del codigo C que quiero emplear en el fragmento en ensamblador.
Estoy empleando el IAR compiler y no he encontrado como se hace; en concreto, estoy portando un programa escrito para GCC compiler a IAR.
buenas. Para pasarle un parametro y q lo use el codigo ensamblador, se pasa automaticamente por la pila.
PILA
______________
Regs salvados
--------------
Var locales
--------------
BP anterior
--------------
IP
--------------
CS
--------------
Parametros
--------------
Se fija un enlace dinamico que sera el BP. Y a partir d ahi, acceder a los parametros ya es sencillo.
push bp
mov bp,sp
sub sp,x ; solo si necesitas usar variables locales
push registros ;por si tienes q salvarlos
y ya esta.
Por lo tanto tu parametro estara en la posicion BP+6. Para retornar el valor en las funciones (no en las acciones) se devuelve por el registro AL (8bits), AX (16 bits) o en DX AX si pasan d los 16.
Despues del codigo hay q recuperar los registros
pop registros (si se han modificado) y un mov sp,bp pop bp y un ret. (ret x por si hay q borrar parametros).
Creo q es asi. Weno pos na. Dew
PILA
______________
Regs salvados
--------------
Var locales
--------------
BP anterior
--------------
IP
--------------
CS
--------------
Parametros
--------------
Se fija un enlace dinamico que sera el BP. Y a partir d ahi, acceder a los parametros ya es sencillo.
push bp
mov bp,sp
sub sp,x ; solo si necesitas usar variables locales
push registros ;por si tienes q salvarlos
y ya esta.
Por lo tanto tu parametro estara en la posicion BP+6. Para retornar el valor en las funciones (no en las acciones) se devuelve por el registro AL (8bits), AX (16 bits) o en DX AX si pasan d los 16.
Despues del codigo hay q recuperar los registros
pop registros (si se han modificado) y un mov sp,bp pop bp y un ret. (ret x por si hay q borrar parametros).
Creo q es asi. Weno pos na. Dew