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 :

[MASM] Utiliser un .IF pour une comparaison de nombre signés


Sujet :

x86 32-bits / 64-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Par défaut [MASM] Utiliser un .IF pour une comparaison de nombre signés
    Bonjour à tous,
    J'utilise MASM mais le problème étant que lorsque je mets un (en imaginant qu'une des 2 var est un registre)
    il me traduit par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CMP Var1,Var2
    JBE xxxxxxx
    Ce que je voudrais c'est qu'il me fasse un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CMP Var1,Var2
    JLE xxxxxxx
    Je sais qu'il y a moyen de définir des types signés (SBYTE,SWORD,...) afin que le compilateur/assembleur sache qu'il a à faire à des nombres signés mais si par exemple je travaille avec des éléments d'une structure où le type est fixé, à moins de redéfinir la stucture je ne vois pas comment faire.
    Enfin lorsque je dis que je ne sais pas comment faire, je veux dire en gardant une syntaxe HLL. Est-ce que c'est possible? (faire une sorte de casting quoi)

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Salut Crisanar ,

    Question intéressante. Jusqu'à mainteant je n'utilisait pas la syntaxe de haut niveau pour ce genre de comparaison. Je me suis dit que c'était l'occasion pour chercher. J'y ai bien passer 3/4 d'heure en testant 50 trucs...

    Au début j'ai pensé à utiliser les opérateur de drapeaux (type SIGN? ou OVERFLOW?) mais je n'arrivais à rien...

    Je me suis souvenu que MASM posséde une opérateur de type permettant de faire un cast avec les signed!

    donc pour un JLE en HLL il faut faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    .IF SDWORD PTR Var1 > SDWORD PTR Var2 
     
    ; bla
     
    .ENDIF
    A la compile on a bien un JLE ! Enfin sous Olly il arrive que l'on voit un JNG mais d'après le manuel Intel :

    7E cb JLE rel8 Jump short if less or equal (ZF=1 or SF<>OF)
    7E cb JNG rel8 Jump short if not greater (ZF=1 or SF<>OF)
    c'est la même chose !

    Amicalement, Neitsa.

  3. #3
    Membre confirmé Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Par défaut
    Salut Neitsa ,
    Désolé que tu aies du chercher autant de temps pour moi, enfin j'ai bien passé autant de temps que toi à chercher aussi
    En fait moi je m'etais arreté à un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .IF SDWORD PTR var1 > var2
    mais il n'acceptait pas, je n'avais pas du tout pensé à faire un casting sur les 2 valeurs utilisées!
    Merci beaucoup,
    TTO® sera grandement intéressé aussi

    EDIT : apres essai il semblerai qu'en fait je m'etais trompé dans mon casting j'avais casté eax avec un SWORD

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Par défaut
    Oui, il semblerait, d'après quelques informations qui se sont échapées de chez intel, qu'être plus petit ou égal, c'est pareil que ne pas être plus grand. ^^


    Blustuff

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/08/2012, 14h24
  2. Réponses: 29
    Dernier message: 02/04/2007, 01h14
  3. Réponses: 1
    Dernier message: 27/09/2006, 16h21
  4. Utiliser un ascenseur pour une application MDI
    Par kurkaine dans le forum C++Builder
    Réponses: 6
    Dernier message: 27/09/2006, 13h54
  5. Réponses: 4
    Dernier message: 09/02/2006, 17h44

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