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 :

Nasm : Shl ?


Sujet :

Assembleur

  1. #1
    Invité
    Invité(e)
    Par défaut Nasm : Shl ?
    Bonjour

    Ces commandes là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    shl ebx,1
    sub eax,48
    add ebx,eax
    Dans le programme en entier , j'écris une suite de chiffre en binaire et ça le transforme en décimal .

    Avec les commandes ci-dessus , on peu transformer 100 en 4 a la fin du programme .

    Cependant , je comprends le -48 , mais je ne vois pas , ou du moins je n'arrive pas à visualiser ce que fais shl . Je sais qu'il décale vers la gauche , mais comment passer de 100 à 4 ..
    Dernière modification par Obsidian ; 11/01/2013 à 17h20.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Bonjour,

    Tu passes de 100 à 4 parce que « 4 » s'écrit « 100 » en binaire, tout simplement.

    On effectue « -48 » parce que « 48 » est le code ASCII du caractère « 0 » (zéro) et 49 celui du « 1 ». En effectuant la soustraction, on passe de 48 ou 49 à 0 ou 1, donc on récupère la valeur exacte du bit noté dans ta chaîne. Ensuite, on va les insérer un par un dans ton registre par la droite.

    « SHL » signifie « Logical SHift to the Left », donc effectivement, cela sert à décaler la valeur en cours d'une position vers la gauche pour ajouter, dans le bit de poids faible, la valeur du bit qu'on vient de lire.

    C'est un peu lorsque tu saisis un nombre sur une calculatrice. Quand tu le composes, chaque chiffre saisi « pousse » les autres vers la gauche. Par exemple, si je saisis le nombre 158605, je verrai successivement sur mon écran :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           1
          15
         158
        1586
       15860
      158605

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir

    J'ai bien saisis cela , et que 4 s'écrit 100 en binaires , mais j'aimerais comprendre ce qui fait que 1 , puis 0 puis le dernier 0 font 4 au final ?

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Si d'une part tu sais que 4 s'écrit 100 en binaire, et que d'autre part tu insères explicitement « 1 0 0 » dans ton registre, pourquoi t'étonnes-tu de retrouver « 4 » en sortie ?

    Dans un ordinateur, au niveau électronique, TOUT est enregistré en binaire. Quand tu écris « MOV EAX,48 », c'est bien la combinaison binaire « 110000 » qui va être chargée dans EAX. Le fait de l'écrire en décimal ou en hexadécimal dans ton programme n'est qu'une facilité offerte au programmeur pour des raisons de confort. Au moment de sa lecture et de son assemblage, ton programme source sera de toutes façon converti en binaire. Donc, quand tu demandes ensuite d'afficher le contenu d'un registre à l'écran, sa valeur binaire sera convertie en décimal. À ce stade, le convertisseur ne peut absolument plus savoir si la valeur convertie provient initialement d'un code source ou si tu l'as composée en insérant un à un les bits à la main.

Discussions similaires

  1. Recherche tutorial NASM Linux
    Par camje_lemon dans le forum Assembleur
    Réponses: 2
    Dernier message: 19/11/2004, 23h42
  2. [NASM] Utiliser des fichiers ressources
    Par trax44 dans le forum Assembleur
    Réponses: 8
    Dernier message: 26/09/2004, 18h42
  3. [NASM] Ligne de commande
    Par sirozz dans le forum Assembleur
    Réponses: 1
    Dernier message: 23/08/2004, 19h31
  4. [Linux] [NASM] Entrée de chaines
    Par vi4ever dans le forum Assembleur
    Réponses: 4
    Dernier message: 27/07/2004, 21h28
  5. [NASM] Redirection de l'interruption 09h
    Par sirozz dans le forum Assembleur
    Réponses: 2
    Dernier message: 16/07/2004, 17h32

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