IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

[NASM] Assembleur Intel avec syntaxe AT&T sous Windows : comment compiler ?


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 28
    Points
    28
    Par défaut [NASM] Assembleur Intel avec syntaxe AT&T sous Windows : comment compiler ?
    bonjour voilà j'aimerai pouvoir faire de l'assembleur Intel avec la syntaxe AT&T mais je ne sais pas comment faire pour compiler sous windows sur linux pas de problème
    mais j'aimerai le faire sous Windows mais je n'arrive pas à les complier , pouvez vous me dire comment faire s'il vous plait

    Merci ^^

    exemple de synthaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
            .section .data
    h:      .ascii "Bonjour !"
            .set l, .-h
     
    _start: movl $4, %eax # Affiche la chaine de caractère
            movl $1, %ebx #
            movl $h, %ecx #
            movl $l, %edx #
            int $0x80     #
     
            #exit
            movl $1, %eax
            movl $0, %ebx
            int $0x80               #
    merci
    ps : comment on fait avec nasm ?

  2. #2
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Un des premiers buts de NASM c'est de se débarrasser de la syntaxe AT&T, donc je ne crois pas qu'il la supporte. Il faut utiliser Gas (qui fait partie de binutils ou quelque chose comme ça).
    Tu as vraiment une bonne raison d'utiliser cette syntaxe-là ?
    :wq

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    oui car c'est cette syntaxe qu'on voit en cours

  4. #4
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    :wq

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    ha okii ba donc aucun programme sous windows
    ps : je sai mais il veut nous apprendre le langage assembleur de bas niveau

  6. #6
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Tu peux télécharger Binutils pour Windows ici : http://sourceforge.net/project/showf...?group_id=2435
    L'assembleur c'est as.exe.
    :wq

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    par contre je fait comment car il me met des erreurs :
    error no such instruction ??

    comment c'est possible ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    j'ai pu voir que dans un des tutos sur l'assembleur il y a EAX c'est quoi comme synthaxe ?, comme ça si il ny a que les %eax qui change je devrai pouvoir un peu m'en sortir, car je voudrai écrire un programme du même type que ce code source mais je comprend pas pour ce qui est de la récursivité
    code C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    #include<stdio.h>
     
    int recurse(int x,int y)
    {
      int a=0,b=0;
      if(x==y)
        {
        return x;
        }
      else
        {
          if(x>y)
            {
              return recurse(x,y+1)+recurse(x-1,y);
            }
     
          else if(x<y)
            {
              return x*recurse(x+1,y)-y*recurse(x,y-1);
            }
        }
    }
     
    int main(void)
    {
      int n;
      int i,j;
      printf("Entrez n : ");
      scanf("%d",&n);
     
        i=0;
        j=0;
     
        printf("\n");
     
        goto _boucle1;
     
    _boucle1:
             if(i>n) goto fin;
             if(j!=n){j=0;goto _boucle2;}
     
    _boucle2:
             if(j>n) {i=i+1; goto _boucle1;}
             printf("fonction(%d,%d)=%d\n",i,j,recurse(i,j));
             j=j+1;
             goto _boucle2;
     
     
    fin:
        return 0;
    }
    Merci de votre aide

  9. #9
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Citation Envoyé par Klaine Voir le message
    par contre je fait comment car il me met des erreurs :
    error no such instruction ??

    comment c'est possible ?
    J'ai seulement as indirectement en faisant de l'ASM inline avec GCC. Je viens d'essayer de mettre ton code en ASM inline et ça compile normalement, donc le problème doit être ailleurs.

    Citation Envoyé par Klaine Voir le message
    j'ai pu voir que dans un des tutos sur l'assembleur il y a EAX c'est quoi comme synthaxe ?, comme ça si il ny a que les %eax qui change je devrai pouvoir un peu m'en sortir,
    La syntaxe Intel ? C'est la même chose sans préfixes (les %, $, ...), sans suffixes (les l et les autres à la fin des instructions), avec les opérandes en sens inverse (à part pour le FPU) et avec un adressage "normal" (-0x20(%ebx,%ecx,0x4) devient [ebx+ecx*4h-20h], il n'y a pas de trucs à la mords-moi le nœud), et sûrement des trucs que j'ai oubliés.
    Pour la récursivité c'est un peu chaud, il faut se dire qu'à chaque fois qu'on rappelle la fonction elle peut modifier tout ce qui se trouve en registre, donc il faut mettre les variables qui doivent être gardées sur la pile.
    :wq

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    et donc dans qu'elle registre , je dois mettre les valeurs que je veux garder , par exemple ax, cx, dx, ah ... ?

  11. #11
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Par convention les registres que la fonction a le droit de modifier c'est EAX, ECX et EDX. Les autres doivent être sauvegardés et restaurés à la fin. Si tu prends l'exemple classique de la factorielle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    unsigned int factorielle (unsigned int n)
    {
       if (n <= 1)
       {
          return 1;
       }
       else
       {
          return n*factorielle (n - 1);
       }
    }
    Au départ ce code-là a l'air de faire pareil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    factorielle:
            mov edx, [esp+4]
            cmp edx, 1
            ja .appelRecursif
     
            mov eax, 1
            ret
     
    .appelRecursif:
            lea ecx, [edx-1]
            push ecx
            call factorielle
            pop ecx
     
            imul eax, edx
            ret
    Mais au moment où on fait la multiplication à la fin EDX a changé de valeur à cause de l'appel de factorielle(). Il faut trouver un autre moyen, par exemple rechercher l'argument sur la pile :
    :wq

Discussions similaires

  1. [Tutoriel] Découverte de l'assembleur Intel avec NASM
    Par Chevalier au taureau dans le forum Assembleur
    Réponses: 68
    Dernier message: 06/04/2024, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo