[C con Clase] Ensamblador (sintaxis intel) en C usando gcc.

Programante programante en gmail.com
Mie Abr 9 16:35:43 CEST 2008


Adolfo Cárdenas escribió:
> Buenas
> Realicé esta función para efectuar una operación de rotación de bits y funcionó
>
> byte hhh;
> byte op1;
> byte op2;
> byte ensamblador(byte b1, byte b2)
> {
>   op1 = b1;
>   op2 = b2;
>   asm(".intel_syntax noprefix\n"
>        "mov ah, _op1\n"
>        "mov cl, _op2\n"
>        "rol ah, cl\n"
>        "mov _hhh, ah\n"
>       ".att_syntax");
>   return hhh;
> }
>
> ¿Cómo sería usando esp?
> Por otro lado, la opción -fno-leading-underscore no se como colocarla en
> el compilador dev c++ para window
>
> Muchas gracias
>   
Pues como hay dos parámetros en la pila, en [ESP] tendríamos el antiguo 
EBP/ESP, en [ESP+4] la dirección de retorno, en [ESP+8] b1 y en [ESP+12] b2
Las opciones las añades en Propiedades del proyecto, Opciones 
adicionales en la línea de comandos, Compilador.
Si vas a usar pocos parámetros, puede usar la convenciónd de llamadas 
_fastcall, con lo que b1 y b2 estaría ya cada uno en un registro. Luego 
no tienes más que dejar la salida en EAX (en este caso AL). No necesitas 
hacer "mov _hhh, ah" y return hhh; Puesto que sabemos que el retorno de 
las funciones está en el registro EAX (o sus componentes de menor 
tamaño) puedes diretamente dejar en ella el valor y no poner ningún return.




Más información sobre la lista de distribución Cconclase