Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité
    Invité(e)

    Par défaut Nasm : Shl ?

    Bonjour

    Ces commandes là :

    Code :
    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
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    5 375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 5 375
    Points : 12 630
    Points
    12 630

    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 :
    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
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    5 375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 5 375
    Points : 12 630
    Points
    12 630

    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.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •