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 :

[Delphi][ASM] aide sur JE


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut [Delphi][ASM] aide sur JE
    bonjour,

    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
    procedure Sup;
    begin
     ShowMessage('SUP');
    end;
     
    procedure Inf;
    begin
     ShowMessage('INF');
    end;
     
    procedure compare(Val1, Val2: Integer);
    begin
    asm
      mov eax, val1
      cmp eax, val2
      jl @Label1
      call sup
      @Label1: call Inf
    end;
    end;
    Je souhaite appeler inf si val1 < val2 sinon appeler sup.
    Actuellement la procedure inf est toujours executée.


    Merci.

  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
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure compare(Val1, Val2: Integer);
    begin
    asm
      mov eax, val1
      cmp eax, val2
      jl @Label1
      call sup
      @Label1: call Inf
    end;
    end;

    C'est bizarre, je ne vois apparemment rien qui cloche... (à part la différence entre l'argument "Val1" dans la signature de la fonction et dans le corps de celle ci "val1", mais peut être que Delphi n'est pas sensible à la casse...)

    Je ne connais pas Delphi, mais c'est un peut être un problème de type de passage d'argument (par valeur ou par référence ?)

    Dans le cas où le passage ce fait par référence, pil vaudrais mieux tenter quelque chose comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    mov eax, val1
    mov ebx, val2
     
    cmp eax, ebx
     
    jl @Label1
    P.S : Dans le cas ou "sup" devrait être appelé, tu fera attention car ton code appellerais aussi "inf" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      jl @Label1
      call sup ; appelle sup
      @Label1: call Inf ; continue sur inf
    Tu peux remédier à cela en mettant un label de sortie par exemple :

    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
     
    procedure compare(Val1, Val2: Integer);
    begin
    asm
        mov eax, val1
        mov ebx, val2
     
        cmp eax, ebx
     
        jl @inf
        call sup
        jmp @exit ; vers la sortie, n'appelle pas "inf"
    @inf:
        call inf
     
    @exit:
    end;
    end;
    J'espère que cela résoudra le problème, sinon ... je sèche (on pourrait peut être testé EFLAG si ce que je propose ne résout pas le problème... à voir par la suite).

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Bonjour,

    Oui le problème est résolu avec la dernière proposition et en particulier l'instruction jmp @exit ;

    C'est effectivement cela qu'il me manquait.

    Merci.



    Cordialement.

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

Discussions similaires

  1. Demande d'aide sur delphi 7 studio et Sql Server 2005
    Par malia1 dans le forum Bases de données
    Réponses: 5
    Dernier message: 27/06/2008, 14h39
  2. Aide sur les templates de codes de Delphi 2006
    Par vanquish dans le forum Delphi
    Réponses: 1
    Dernier message: 23/06/2006, 16h22
  3. Intégration de l'aide Delphi V7 FR sur une V7 US ?
    Par Laurent Dardenne dans le forum EDI
    Réponses: 5
    Dernier message: 03/10/2005, 20h45

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