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

x86 16-bits Assembleur Discussion :

Rapport instruction SHL AX,1 et Offset


Sujet :

x86 16-bits Assembleur

  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
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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 408
    Points : 23 803
    Points
    23 803
    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
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    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.

  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
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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 408
    Points : 23 803
    Points
    23 803
    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, 16h06
  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, 21h02
  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, 16h08
  4. Réponses: 1
    Dernier message: 29/01/2007, 11h41
  5. [Crystal Report][VB6] instruction PrintReport
    Par yyyeeeaaahhh dans le forum SDK
    Réponses: 4
    Dernier message: 29/07/2002, 15h58

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