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 16-bits Assembleur Discussion :

[Débutant] Instruction SBB


Sujet :

x86 16-bits Assembleur

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 26
    Points : 20
    Points
    20
    Par défaut [Débutant] Instruction SBB
    Salut,
    je suis débutant en asm et j'ai écris un petit programme en asm sous debug qui fait la soustraction de 3 cases mémoires avec l'instruction SBB.
    Le problème est le résultat n'est pas juste :
    si je dois trouver F6, je trouve F5
    Code ASM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MOV     AX,[0150]
    SBB     AL,AH
    MOV     AH,[0152]
    SBB     AL,AH
    MOV     [0153],AL
    INT     20
    donc si :
    150 contient 15
    151 contient 17
    152 contient 02

    le résultat doit être FC

    mon programme affiche FB

    aider svp

  2. #2
    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
    SBB soustrait trois termes : les deux opérandes et le carry flag. J'ai l'impression que tu as seulement besoin de SUB.
    :wq

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Cie,

    +1 sur dapounet

    et plus :

    - SBB prenant en compte le Carry Flag (CF), s'il est positionné quand tu arrives dans ta fonction,
    le calcul AL - AH sera déjà faux

    - Admettons que ce soit ok à ce niveau là, comme avec ton exemple
    tu fais 15H - 17H, le CF est positionné à 1

    - Donc, lors du 2ème appel à SBB AL, AH, comme AH =02H,
    tu soustrais en fait 03H (02H + CF), d'où ton résultat "faux", qui est parfaitement normal
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Salut,
    merci pour votre attention
    Donc je peux pas soustraire 3 valeurs contenues dans trois cases mémoire avec l'instruction SBB et avoir une résultat juste ou je peux.

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Fio,
    Citation Envoyé par rxjmo Voir le message
    Salut,
    merci pour votre attention
    Donc je peux pas soustraire 3 valeurs contenues dans trois cases mémoire avec l'instruction SBB et avoir une résultat juste ou je peux.
    Tu peux, si tu tiens compte du fonctionnement des instructions que tu utilises, ce que tu n'as pas fait dans ton code.
    Si les cons volaient, il ferait nuit à midi.

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Salut,
    Enfin, merci.
    Pour ceux qui sont intéressés :
    Pour la soustraction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SUB     AX,AX
    SUB     BX,BX
    MOV     AL,[0150]
    MOV     BL,[0151]
    SUB     AL,BL
    SBB     AH,BH
    MOV     BL,[0152]
    SUB     AL,BL
    SBB     AH,BH
    MOV     [0153],AX
    INT     20
    Pour l'addition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SUB     AX,AX
    SUB     BX,BX
    MOV     AL,[0150]
    MOV     BL,[0151]
    ADD     AL,BL
    ADC     AH,BH
    MOV     BL,[0152]
    ADD     AL,BL
    ADC     AH,BH
    MOV     [0153],AX
    INT     20
    @++

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

Discussions similaires

  1. [Débutant] Instruction IF sans les "{}" (accolades)
    Par danouvrs dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 05/09/2008, 12h40
  2. [Débutant] Instruction goto
    Par feynman dans le forum Fortran
    Réponses: 6
    Dernier message: 11/09/2007, 16h18
  3. [Débutant] Instruction : Assigned
    Par colocolo dans le forum Delphi
    Réponses: 4
    Dernier message: 18/02/2007, 14h15
  4. [Débutant - XSLT] instructions serveurs possibles ?
    Par sempire dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 06/10/2005, 11h06
  5. Aide débutant instruction VBA tableau Excell
    Par damien33 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/09/2005, 10h31

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