1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2012
    Messages : 3
    Points : 1
    Points
    1

    Par défaut Rapport instruction SHL AX,1 et Offset

    Bonjour, je débute en assembleur.
    J'ai un livre pour m'aider : ASSEMBLEUR Facile (de Philippe Mercier) qui commence à dater.
    Ci-dessous, le programme écrit à la page 256 du livre (je n'ai pas reproduit tous les commentaires).

    Ma question : je ne comprends pas pourquoi on fait un SHL AX,1



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    MonProg SEGMENT                         
                ORG 100h
                ASSUME CS:MonProg
    Start:    JMP debut
     
    Table     DW mess0
                DW mess1
                DW mess2
                DW mess3
    mess0    DB 'Ceci est le premier message...$'
    mess1    DB 'Bonjour, comment allez-vous ?$'
    mess2    DB 'bienvenue en France...','$'
    mess3    DB 'ce message émet un beep', 07h,'$'
     
    WRITEMNO PROC NEAR
    PUSH BX,
    PUSH AX,
    MOV AH,0
     
    SHL AX,1                          ;multiplie le num. de message par 2                                ; pour obtenir un offset dans la table
     
    MOVE BX, OFFSET Table
    ADD BX,AX
    MOV DX, [BX]
    MOV AH,09
    INT 21h
    POP AX
    POP BX
    RET
    WRITEMNO ENDP
     
    Debut: MOV AL,0
              CALL WRITEMNO
     
              MOV AL,1
              CALL WRITEMNO
              INT 20h
     
    MonProg ENDS
                END Start
    Merci d'avance,

    Jean-Marc

  2. #2
    Responsable Modération
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    6 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : septembre 2007
    Messages : 6 374
    Points : 18 767
    Points
    18 767

    Par défaut

    Bonjour,

    « SHL » signifie « (arithmetical or logical) Shift to the Left ». Il s'agit donc de décaler les bits de AX d'une position vers la gauche. Un zéro est inséré à droite et le bit sortant à gauche est perdu.

    Or, décaler un nombre binaire d'un bit vers la gauche revient à le multiplier par deux, de la même façon que décaler un nombre décimal dans le même sens le multiplie par dix : par exemple, « 15 » → « 150 ».

    En binaire, ça donne par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     1011 -> 11
    10110 -> 22
    Et cette propriété est valable dans toutes les bases.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2012
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    Merci pour ces infos.
    Ma question porte sur l'offset:
    Si on part de l'hypothèse que AX=0.
    Si AX=0, l'offset sera de 0 (SHL AX=1 donnera AX=0 et le ADD BX,AX fera pointer l'offset de Table à 0.
    Puis le MOV AL,1
    SHL AX,1 et donc AX=2
    On ajoute 2 à BX
    Où se trouve l'offset à ce moment là ?
    À offset+2 ?
    Pouvez-vous me donner un exemple vu de la mémoire ?

    Merci,
    Jean-Marc

  4. #4
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 225
    Points : 2 336
    Points
    2 336

    Par défaut

    Salut,

    Les offsets des différents messages sont mémorisées dans des mots (mess0, mess1, ...) à partir de l'emplacement Table.

     DW mess0 ; Ici est placé l'offset du message mess0
     DW mess1 ; Ici est placé l'offset du message mess1
     etc...
    Etant donné qu'un mot represente deux octets, il est normal de multiplié par deux.
    Soutenez le système publicitaire sain et non intrusif sur Developpez.com

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2012
    Messages : 3
    Points : 1
    Points
    1

    Par défaut Merci

    Merci pour toutes ces informations très utiles !

    Jean-Marc

  6. #6
    Responsable Modération
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    6 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : septembre 2007
    Messages : 6 374
    Points : 18 767
    Points
    18 767

    Par défaut

    De rien mais la prochaine fois, n'oublie pas le bouton en bas de page.
    Bonne chance.

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

Discussions similaires

  1. [XL-2007] Instruction Offset et tab
    Par pascal4782 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/05/2011, 15h06
  2. Précision sur une instruction : push offset
    Par lirycs78 dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 28/06/2010, 20h02
  3. [AC-2003] Calcul en rapport avec l'instruction Count
    Par Thotho-Maxime dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 16/07/2009, 15h08
  4. Réponses: 1
    Dernier message: 29/01/2007, 10h41
  5. [Crystal Report][VB6] instruction PrintReport
    Par yyyeeeaaahhh dans le forum SDK
    Réponses: 4
    Dernier message: 29/07/2002, 14h58

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