Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Assembleur Intel syntaxe AT&T



  1. #1
    Jean_Luc

    Assembleur Intel syntaxe AT&T

    Bonjour à tous,

    Voici quelques jours que je n'arrive pas a résoudre ce problème. Lorsque je compile le programme suivant (gcc 3.4.4, Linux redhat), j'obtiens systématiquement l'erreur suivante (sur la ligne en gras):
    error: impossible constraint in `asm'
    Le seul registre qui ne génère pas d'erreur, c'est le registre ebx.
    Si quelqu'un a une idée, ce serait vraiment super.

    Merci.

    Code:
      
    void my_memcpy(void *d,void *s,int length) {
    
    __asm__ __volatile__ (
      " movl 	 %%ecx,%%edx\n"
      " andl         $3,%%ecx\n"
      " rep movsb\n"
      " movl         %%edx,%%ecx\n"
      " shrl         $2,%%ecx\n"
      " rep movsl\n"
    :          		            // ouput
    : "esi"(s),"edi"(d),"ecx"(length)  // input
    : "ecx","edx","edi","esi"          // modify
    
    );
    }

    -----

    L'Univers est fini. Ah bon déjà ?

  2. #2
    Towl

    Re : Assembleur Intel syntaxe AT&T

    Tes contraintes sur les registre m'ont pas l'air tres correctes. Un exemple du manuel de GCC inline (http://www.ibiblio.org/gferg/ldp/GCC...-HOWTO.html#s6 ) :
    Code:
    int main(void)
    {
            int foo = 10, bar = 15;
            __asm__ __volatile__("addl  %%ebx,%%eax"
                                 :"=a"(foo)
                                 :"a"(foo), "b"(bar)
                                 );
            printf("foo+bar=%d\n", foo);
            return 0;
    }
    ou
    Code:
     __asm__ __volatile__(
                          "   lock       ;\n"
                          "   addl %1,%0 ;\n"
                          : "=m"  (my_var)
                          : "ir"  (my_int), "m" (my_var)
                          :                                 /* no clobber-list */
                          );
    Sinon, tu peux aussi utiliser la syntax NASM avec gcc qui est un peu plus jolie je trouve, et aussi faire des fonction full asm dans un fichier à part, ca t'evite la syntaxe avec des \n et des " tout le temps

    Code:
    rattle@nana ~/asmtest$ cat sine.s
    .intel_syntax noprefix
    .globl _sine
    _sine:
      finit                          /* initialize FPU                */
      fld qword ptr [esp+4]          /* load x onto FPU stack         */
      fsin                           /* calculate sine                */
      lea eax, [esp+4]               /* get address of x              */
      fst qword ptr [eax]            /* store sine in x on the stack  */
      ret                            /* return                        */
    
    rattle@nana ~/asmtest$ cat main.c
    #include <stdio.h>
    double sine(double);
    
    int main() {
      double d = sine(.45);
      printf("%f\n",d);
    }
    
    rattle@nana ~/asmtest$ gcc -masm=intel -o sine sine.s main.c
    
    rattle@nana ~/asmtest$ ./sine
    0.434966
    The only limiting factor of the Linux operating system, is his user. - Linus Torvalds

  3. #3
    Jean_Luc

    Re : Assembleur Intel syntaxe AT&T

    OK merci, en fait j'ai déjà essayé avec les lettres et ça n'a rien donner.
    Mais je ressayerai demain ( J'suis pas sous Linux là ).
    Pour ce qui concerne NASM, justement je voudrais éviter d'avoir à m'embêter avec le passage de paramètres (le esp), de plus ç'est en fait pour un projet plus vaste qui doit impérativement se compiler en gcc natif et sur plusieurs release de Linux (et des veilles !). On aimerait bien éviter d'avoir à installer NASM.
    Ceci je suis d'accord avec toi, cette syntaxe AT&T, c'est galère....
    Je crois qu'il existe une directive .intel_syntax, je vais continuer mes recherches.

    Merci
    A+
    L'Univers est fini. Ah bon déjà ?

Sur le même thème :

Discussions similaires

  1. Question de syntaxe
    Par Bernouilly dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 25/10/2007, 11h30
  2. AMD/ Intel & nVIDIA/ATI
    Par Tibérium dans le forum Matériel - Hardware
    Réponses: 3
    Dernier message: 25/09/2007, 22h57
  3. Syntaxe programme C++
    Par Paulochon dans le forum Électronique
    Réponses: 6
    Dernier message: 06/07/2007, 09h50
  4. Syntaxe mutation
    Par brunop dans le forum Biologie
    Réponses: 4
    Dernier message: 11/04/2006, 15h53
  5. Syntaxe
    Par brunop dans le forum Chimie
    Réponses: 1
    Dernier message: 17/01/2006, 15h33