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 :

Multiplication par décalage de bits


Sujet :

Assembleur

  1. #1
    Candidat au Club
    Inscrit en
    septembre 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : septembre 2005
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Multiplication par décalage de bits
    Salut à tous,

    Je suis nouveau sur ce forum et je voudrais avoir quelques renseignements...

    En effet, j'ai eu un cours d'archi cet ap et le prof nous a expliqué une methode pour la multiplication binaire qui etai plutot mal expliquée...Il s'agit de la multiplication par decalages successifs a droite puis gauche ou inversement...

    Quelqu'un pourrait il m'expliquer le principe fonctionnement et les differentes etapes de la multiplication...

    Mici d'avance

    TeK

  2. #2
    Membre du Club
    Inscrit en
    août 2005
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 62
    Points : 63
    Points
    63
    Par défaut
    Decalage binaire à gauche:
    Faire un décalage binaire à gauche consiste à prendre chaque bit et lui
    faire occuper la place de celui qui se trouve à sa gauche. Le bit qui se
    trouve complètement à droite (ou bit de poids faible) se retrouve avec 0, le
    bit qui se trouve complètement à gauche ou bit de poids fort est éjecté de
    l'octet, il disparaît donc.

    Exemple:
    A = %0 0 1 0 1 0 0 1
    B =<< A %0 1 0 1 0 0 1 0
    C =<< B %1 0 1 0 0 1 0 0

    Dans un premier temps nous supposerons que ces valeurs binaires sont
    des valeurs non signées.
    Si maintenant, nous évaluons la valeur décimale de A
    A = 0*128+0*64+1*32+0*16+1*8+0*4+0*2+1*1= 32+8+1= 41
    B = 0*128+1*64+0*32+1*16+0*8+0*4+1*2+0 = 64+16+2= 82
    C = 1*128+0*64+1*32+0*16+0*8+4*1+0*2+0*1 = 128+32+4= 164
    Nous remarquons que C=B*2 et que B=A*2 donc C=A*4, apparemment
    décaler une valeur binaire d'un bit vers la gauche, revient à la multiplier par
    2.
    Démonstration: Dans le cas général
    A = a7*2^7 + a6*2^6 + a5*2^5 + a4*2^4 + a3*2^3 + a2*2^2 + a1*2^1 + a0*2^0
    si maintenant nous multiplions par 2
    2*A =2*(a7*2^7 + a6*2^6 + a5*2^5 + a4*2^4 + a3*2^3 + a2*2^2 + a1*2^1 + a0*2^0)
    = 2*a7*2^7 + 2*a6*2^6 + 2*a5*2^5 + 2*a4*2^4 + 2*a3*2^3 + 2*a2*2^2 + 2*a1*2^1 + 2*a0*2^0
    comme 2*2^n = 2^(n+1)
    = a7*2^8 + a6*2^7 + a5*2^6 + a4*2^5 + a3*2^4 + a2*2^3 + a1*2^2 + a0*2^1
    si maintenant nous comparons le résultat à A en identifiant termes à
    termes.
    Même si vous n'avez pas bien suivis la démonstration, il faut retenir que:
    Effectuer un décalage binaire à gauche, revient à multiplier ce
    nombre par 2.
    Ce qui entraîne automatiquement
    Effectuer n décalages binaires à gauche, revient à multiplier le
    nombre par 2^n.

    Cela marche pour les nombres signés tous comme pour les nombres
    non signés. Il existe la dessus une certaine confusion dans le monde
    informatique, entraînée, je pense, par le fait qu'en assembleur il existe 2
    instructions différentes pour décaler à gauche un nombre signé ou non
    signé, alors que c'est exactement la même chose.
    Le décalage binaire droit:
    La marche à suivre pour réaliser un décalage binaire droit est similaire à
    celle utilisé pour décaler à gauche, à ceci prés que chaque bit ne prend
    plus la place du bit placé à sa gauche, mais celle du bit placé à sa droite.
    On injecte à gauche un bit toujours égal à 0, et le bit de poids faible est
    éjecté.
    Exemple:
    A = %0 1 0 0 1 0 1 0
    B =>> A %0 0 1 0 0 1 0 1
    C =>> B %0 0 0 1 0 0 1 0
    Vous l'aurez deviné, effectuer un décalage binaire à droite, revient à
    diviser le nombre par 2.
    Par conséquent:
    Effectuer n décalages binaires à droite, revient à diviser le nombre
    par 2^n.

    Attention! cette opération logique n'est pas valable pour les nombres
    signés, vous comprendrez facilement que si le bit de signe passe de 1 à 0,
    le nombre devient un nombre positif, ce qui n'a plus rien à voir avec une
    division par 2. Nous verrons avec l'assembleur, que les microprocesseurs
    ont une instruction dédiée au cas des nombres négatifs, on parlera alors
    de décalage arithmétique droit.

  3. #3
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 300
    Points : 229
    Points
    229
    Par défaut
    Bonjour,
    il s'agit de la multiplication dite à la Russe inventé par les anciens Égyptiens environ 2000 ans avant J.-C.
    http://www.recreomath.qc.ca/dict_rus...iplication.htm

    En binaire multiplié par deux revient a décallé d'un cran vers la gauche et
    diviser d'un cran vers la droite (SHL, SHR).

    Cordialement

    TRAX

Discussions similaires

  1. décalage de bit et insertion par la gauche
    Par m0ul3sh0t dans le forum Débuter
    Réponses: 7
    Dernier message: 11/12/2007, 17h16
  2. µC 8 bit => optimisation multiplication par 2.833
    Par Emcy dans le forum Mathématiques
    Réponses: 29
    Dernier message: 28/11/2007, 10h24
  3. Décalage de bits
    Par Kraz dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 21/10/2006, 18h09
  4. décalage de bits
    Par cedre22 dans le forum Langage
    Réponses: 13
    Dernier message: 17/01/2006, 09h33
  5. Décalage de bit sur unsigned char [8]
    Par dboulange dans le forum C++
    Réponses: 14
    Dernier message: 26/07/2005, 14h10

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