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 :

AT&T: newbie tuesday [Débutant(e)]


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Invité
    Invité(e)
    Par défaut AT&T: newbie tuesday
    Bonjour,
    J'apprends une peu d'asm sur un cours pdf. Je voudrais avoir une précision sur le sens d'une ligne censée présenter les commandes inline. Le nom de la fonction "test" n'est pas pratique pour google.
    La voici (c'est très court)

    __asm__("test %%eax,%%eax", : /* no output */ : "a"(foo));

    Merci à vous

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Bonjour,

    Tu devrais trouver ton bonheur ici : http://www.ibiblio.org/gferg/ldp/GCC...bly-HOWTO.html

    « test » est une instruction x86 qui vérifie si certains des bits que tu as marqués sont bien à 1 dans le registre contrôlé. Autrement dit, le micro-processeur va se contenter de faire un ET logique entre les deux registres et positionner les flags, notamment Z. Si Z est à un, c'est que le résultat est nul et qu'aucun des bits marqués n'est à 1.

    Faire « test » sur soi-même comme dans le cas présent est donc un bon moyen de vérifier qu'un registre est nul ou pas.

    Ce qui suit sont des directives à l'intention du compilateur lui permettant de savoir, entre autres, où renvoyer le résultat et quels registres ont été modifiés dans l'opération, le cas échéant.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Je comprends maintenant, ça remplace une comparaison puis un jnz ou jz .
    Je vais quand même voir le tuto.
    Merci Obsidian

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Citation Envoyé par maxhazard Voir le message
    Je comprends maintenant, ça remplace une comparaison puis un jnz ou jz.
    Non, ça ne remplace pas le JZ/JNZ. Les flags sont positionnés de la même façon, et il t'appartient toujours de faire le saut correspondant en conséquence.

    TEST est à AND ce que CMP est à SUB. Dans chaque cas, c'est la seconde opération qui est en fait effectuée mais sans sauvegarder le résultat. Donc, CMP permet de vérifier si la configuration des bits d'un registre est exactement identique à celle d'un autre, et TEST permet de vérifier si un registre est non-nul en n'examinant que les bits qui nous intéressent.

    Merci Obsidian
    À ton service.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bien, c'est clair maintenant

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

Discussions similaires

  1. [QUESTION DE NEWBIE] et delphi la dedans?
    Par Wakko2k dans le forum CORBA
    Réponses: 3
    Dernier message: 01/07/2003, 15h58
  2. [newbie] date ...
    Par nawac dans le forum Débuter
    Réponses: 3
    Dernier message: 06/05/2003, 10h29
  3. Newbie......compilateur et table de caractères
    Par Cyberf dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 21/08/2002, 14h29

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