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

Adolfo Cárdenas adocardenas en gmail.com
Mie Mar 26 17:37:31 CET 2008


El 25/03/08, Programante <programante en gmail.com> escribió:
> Adolfo Cárdenas escribió:
> > 2008/2/11, Programante <programante en gmail.com>:
> >
> >> int ensamblador() {
> >> asm(".intel_syntax noprefix\n"
> >>       "mov eax, 5\n"
> >>       "add eax, 7\n"
> >>      ".att_syuntax");
> >> }
> >>
> >> #include <iostream>
> >>
> >> int main() {
> >>  std::cout << "Este es un programa en C++ que devuelve 12 a través de
> >> ensamblador: " << ensamblador() << std::endl;
> >>  return 0;
> >> }
> >>
> >>
> > Hola, gracias, pero tuve el problema de exceso de mensajes al colocar el codigo
> >
> >  asm(".intel_syntax noprefix\n"
> >        "mov eax, 5\n"
> >        "add eax, 7\n"
> >       ".att_syuntax");
> >
> >   Assembler messages:
> >   `.att_syuntax'
> >     `incl %edx'
> >   `pushl %ebp'
> > ....
> >   Unrecognized token ''
> >   [General Error] Too many messages; abort.
> "Too many messages" te lo da cuando te ha mostrado anteriormente tantos
> errores que decide no seguir adelante.
> El problema está en que cometí un fallo al escribir la última directiva.
> No es .att_syuntax sino .att_syntax por lo
> que detecta como erróneo todo el código en AT&T generado por gcc.
>
> Me alegra ver que alguien hace buen uso de los archivos de la lista :-)
>
> Otra opción que no comenté en ese mensaje es compilar con la opción
> -masm=intel con lo que todo el código asm
> pasa a estar en sintaxis de intel y no necesitas incluir los
> .intel_syntax / .att_syntax
>
Gracias.
Ahora no envia mensajes de error pero la función me devuelve cero

int ensamblador() {
 asm(".intel_syntax noprefix\n"
       "mov eax, 5\n"
       "add eax, 7\n"
      ".att_syntax");
 }
talvez eax no es compatible con el int de devc++ para windows

¿cómo puede un código en ensamblador recoger variables del programa?

por ej:int ensamblador() {
 int variable = 12
 asm(".intel_syntax noprefix\n"
        "mov eax, variable\n"
        ".att_syntax");
 }




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