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 :

Soustraire un nombre 32 bits d'un nombre 64 bits


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre confirmé
    Soustraire un nombre 32 bits d'un nombre 64 bits
    pour additionner un nombre 32 bit a un nombre 64 bit je procède comme ça:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    add [nombre_64],eax
    adc dword[nombre_64+4],0


    je pense que j'ai juste besoin d'inverser eax pour effectuer une soustraction
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    neg eax
    add [nombre_64],eax
    adc dword[nombre_64+4],0


    mais j'ai un doute pour savoir si ça fonctionne réellement (et si c'est propre) comment procéderiez vous?

  2. #2
    Expert éminent
    Pour ton premier code , oui c'est comme ça que je fais d'additionner des nombres 16 bits sur un proc 8 bits !
    (ou des nombres 32 bits sur un proc 16 bits)
    Pour la soustraction j'utiliserai sub/sbc.

    Par contre ,ll faut bien penser à clear le carry pour l’addition (et le contraire mettre le bit du carry pour la soustraction).
    Je ne suis pas sur que add clear le carry si ?

    gosso modo chez moi ça donne ça :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ;additionne 1 à ma variable en 16 bits
    clc ;clear carry
    adc mavariable+0,#1
    adc mavariable+1,#0
     
    ;soustrait 1 à ma variable en 16 bits
    sec ;set carry
    sbc mavariable+0,#1
    sbc mavariable+1,#0

    (Bon dans cet exemple , c'est que certain vieux proc n'avait que le adc/sbc ).

  3. #3
    Membre confirmé
    j'avait cherché un peut trop vite un équivalent a adc mais pour sub, j'ai pensé que ça n'existait pas

    pour le x86 l'instruction c'est "sbb"(pour SuBstract with Borrow) et pas "sbc"