[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