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 :

[Syntaxe] Traduction AT&T vers intel


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Invité
    Invité(e)
    Par défaut [Syntaxe] Traduction AT&T vers intel, gcc -masm=intel
    Bonjour a tous !
    Je suis sous linux et j'utilise gcc. Je regarde l'assembleur produit par gcc pour essayer de le modifier. Malheureusement tous les bouquins d'assembleurs qu'il y a à la bibliothèque traitent de la syntaxe Intel ...

    Donc il faut que je traduise l'assembleur produit par gcc en syntaxe Intel pour pouvoir m'exercer. En ce moment j'essaye d'afficher à l'écran "hello : 545454". Voici la version AT&T qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    .att_syntax noprefix
    chaine: .string "hello"
    format: .string "%s : %d\n"
     
    .global main
    main:
       sub    $12,       esp
       movl   $format,   (esp)
       movl   $chaine,   4(esp)
       movl   $545454,   8(esp)
       call   printf
       add    $12,       esp
    $ gcc hello.s ; ./a.out
    hello : 545454

    Et voici ma version Intel qui foire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    .intel_syntax noprefix
    chaine:   .string      "hello"
    format:   .string      "%d : %s\n"
     
    .global main
    main:
       sub    esp,         12
       mov    [esp],       dword ptr format
       mov    [esp + 4],   dword ptr 5454
       mov    [esp + 8],   dword ptr chaine
       call   printf
       add    esp,         12
    $ gcc hello.s
    hello.s: Assembler messages:
    hello.s:8: Error: too many memory references for 'mov'
    hello.s:10: Error: too many memory references for 'mov'


    Et la j'ai cette erreur qui me dit que j'utilise mov pour un déplacement mémoire - mémoire.
    Si c'est le cas, pourquoi ça a marché le premier coup ?

    Je pense que la réponse doit se trouver dans la faq (ou ici en anglais) mais c'est vraiment confus et je m'embrouille avec les deux syntaxes :S
    Dernière modification par Invité ; 21/03/2009 à 10h45.

  2. #2
    Membre actif

    Inscrit en
    Février 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 200
    Points : 235
    Points
    235
    Par défaut
    Le problème avec ce genre de syntaxe (dont je ne suis ni spécialiste ni particulièrement attiré), c'est qu'il peut y avoir confusion entre Lp, contenu de Lp:

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut et merci de ta réponse. Je ne suit pas très expérimenté et je ne sait pas ce qu'est Lp.

  4. #4
    Membre actif

    Inscrit en
    Février 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 200
    Points : 235
    Points
    235
    Par défaut
    Désolé:

    Long pointer

    En fait, la confusion se fait avec ce genre de syntaxe, entre l'adresse ou le contenu de l'adresse (indépendamment du fait que la taille n'est pas indiquée). C'est une syntaxe de type implicite, elle comporte donc de nombreux pièges de ce genre.

    Verifie tes déclarations et tes évocations de datas, je ne suis pas sûr que tu respectes la syntaxe, justement...

  5. #5
    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
    Bonjour,

    Tu peux faire générer du code qui ressemble à la syntaxe MASM par GCC en ajoutant l'option -masm=intel.
    Tu as une raison particulière pour utiliser as ?
    :wq

  6. #6
    Invité
    Invité(e)
    Par défaut
    ... merci ... je croyait avoir déjà utilisé cette option et il me semblait avoir obtenu une erreur d'option inconnue ... et la ça marche

    J'utilise as sans raison particulière, peut être parceque j'ai l'habitude de gcc et puis il est déjà installé. C'est vrai que je pourrait chercher un autre compilateur mais maintenant que tu m'as donné la bonne option c'est bon

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Logiciel de traduction de sites anglais vers le français ?
    Par vargas dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 21/05/2006, 22h34
  2. Problème de traduction de SQL Oracle vers PostgreSQL
    Par Montaigne dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/04/2006, 11h15
  3. Traduction de code Oracle vers SQL Server
    Par randomcl dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/11/2005, 23h43
  4. Traduction du code oracle vers SQL - suite
    Par randomcl dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/11/2005, 14h40

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