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

Assembleur Discussion :

Peut-on fixer la valeur des flags ?


Sujet :

Assembleur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Peut-on fixer la valeur des flags ?
    Bonjour,
    j'aimerais savoir si on peut programmer les flags du registre d'état, c'est-à-dire programmer le ZF et Carry etc...

    Merci d'avance.

  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,

    On peut directement changer le contenu du registre de drapeaux (EFLAG) soit en l'extrayant et en changeant le(s) bit(s) souhaité(s) et en le remettant en place, soit en utilisant des instructions qui influent directement sur un bit particulier.

    Pour extraire le contenu d'EFLAG et le remettre en place on dispose des instructions suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LAHF, SAHF, PUSHF, PUSHFD, POPF, et POPFD.
    Un exemple (avec EFLAG = 0x247 ; donc CF = 1):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PUSHFD ; pousse EFLAG sur la pile
    POP EAX ; EAX = EFLAG = 0x247
    AND EAX, 3FEh ; (soit en binaire = 1111111110) => on ne garde pas CF. EAX = 0x246
    PUSH EAX ; eax (0x246) sur la pile.
    POPFD ; "pop" le double mot sur la pile et remplace EFLAG (EFLAG = 0x246)
    EFLAG = 0x246 ; donc Carry Flag = 0

    Pour les instructions affectant un drapeau en particulier on a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CF (Carry Flag) : STC, CLC, et CMC (et BT, BTS, BTR, BTC qui écrivent sur le CF)
    DF (Direction Flag): STD et CLD
    Et... je crois que c'est tout, mais je ne suis pas sûr...

    Voilà j'espère que ça répond à ta question. N'hésites pas si tu souhaites plus d'infos.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    je tiens a te remercier pour ces détails, j'apprécie beaucoup, et je dirais que pour le moment ça répond à mes besoins car c'était juste des questions que je me posais car je debute dans ce langage, c'est pour réunir un ensemble de données avant de commencer a programmer.
    Je ne veux pas aussi abuser de ton temps, seulement si tu connais un bon site là où je pourrais m'inspirer de quelques codes et exemples, ça serait vraiment sympa de ta part.

    Merci d'avance.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/11/2011, 15h24
  2. [Lazarus] TProcess : fixer la valeur des options
    Par yves.dhenain dans le forum Lazarus
    Réponses: 2
    Dernier message: 20/07/2011, 07h04
  3. Réponses: 2
    Dernier message: 27/08/2008, 11h32
  4. [XSD]fixer la valeur des attributs
    Par mamiberkof dans le forum Valider
    Réponses: 3
    Dernier message: 24/01/2007, 17h54
  5. Réponses: 10
    Dernier message: 23/10/2006, 09h43

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