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 :

Afficher le contenu d'un registre [FAQ]


Sujet :

Assembleur

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 42
    Points : 12
    Points
    12
    Par défaut Afficher le contenu d'un registre
    Voilà j'aimerais pouvoir afficher le contenu d'un registre exemple AH et de la pile avec les fonctions bios et version du dos. (je tourne sous nasm pour dos)

    Merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 29
    Points : 35
    Points
    35
    Par défaut
    Salut Mikevador02,
    Ma première question serait : en quelle notation voudrais tu afficher ces valeurs ? (Héxadécimal,décimal,binaire...)

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 42
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par AznOod
    Salut Mikevador02,
    Ma première question serait : en quelle notation voudrais tu afficher ces valeurs ? (Héxadécimal,décimal,binaire...)
    Salut, ha effectivement ben en hexadecimal sa me suffit , je veux bien connaitre les autres methodes pour apprendre. Sinon je dois convertir avec la calculette windows

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 29
    Points : 35
    Points
    35
    Par défaut
    Pour un affichage en héxadécimal:

    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
     
    A4BITS  PROC NEAR       ; convertit les 4 bits de AL en ASCII et affiche
     
    push    ax
    push    dx
     
    cmp     al,10           ; si < 10 c'est un chiffre
    jb      chiffre
     
    lettre:
    add     al,'A'-10       ; convertie en code ASCII d'une lettre
    jmp     affiche
     
    chiffre:
    add     al,'0'          ; convertie en code ASCII d'un chiffre
     
    affiche:
    mov     dl,al
    mov     ah,2
    int     21h             ; affiche le code ASCII
     
    pop     dx
    pop     ax
    ret
     
    A4BITS  ENDP
    Pour un affichage en binaire :

    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
     
    AFFBIN  PROC NEAR       ; affiche un nombre dans AL sous forme binaire
     
    pushf
    push    bx
    push    cx
     
    mov     bl,al
    mov     cx,8            ; 8 bits
     
    affiche:
    rcl     bl,1            ; bit de gauche de BL dans CF
    xor     al,al
    adc     al,48           ; 48 et CF pour obtenir le code ASCII
     
    mov     dl,al
    mov     ah,2
    int     21h             ; affiche le code ASCII
     
    loop    affiche
     
    pop     cx
    pop     bx
    popf
    ret
     
    AFFBIN  ENDP
    Je suis pas à l'abris d'une erreur

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 42
    Points : 12
    Points
    12
    Par défaut
    merci c'est super cool

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 29
    Points : 35
    Points
    35
    Par défaut
    De rien
    J'ai oublier de préciser que pour la procédure en héxadécimal, il faut que tu appliques un masque sur AL du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    A4BITS  PROC NEAR       ; convertit les 4 bits de AL en ASCII et affiche 
     
    push    ax 
    push    dx 
     
    and     al,0fh     
     
    cmp     al,10           ; si < 10 c'est un chiffre
    sinon ca risque de ne pas fonctionner si AL>15
    En effet, la procédure ne convertit que les 4 bits de poids faible de AL.

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 42
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par AznOod
    De rien
    J'ai oublier de préciser que pour la procédure en héxadécimal, il faut que tu appliques un masque sur AL du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    A4BITS   PROC NEAR   ; convertit les 4 bits de AL en ASCII et affiche 
     
    push   ax 
    push   dx 
     
    and    al,$0f     
     
    cmp   al,10      ; si < 10 c'est un chiffre
    sinon ca risque de ne pas fonctionner si AL>15
    En effet, la procédure ne convertit que les 4 bits de poids faible de AL.
    -Voilà je vois pas trop comment le masque agit surtout qu'il correspond a 36 en dec. et aussi $0f pourqoi en fait il y a F et pas h ?
    -Mais si je comprend bien on masque les 4 bits de poid lourd donc cette instuction serai aussi bonne je pense:
    and al,0Fh

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 29
    Points : 35
    Points
    35
    Par défaut
    C'est exact
    $0f est équivalent à 0fh, $ signifiant héxadécimal ...
    La procédure est ensuite facilement modifiable afin de convertir non plus 4bits, mais un registre comme ax ou encore eax, en sachant qu'il faudra le convertir par paquets de 4 bits ...

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 42
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par AznOod
    C'est exact
    $0f est équivalent à 0fh, $ signifiant héxadécimal ...
    La procédure est ensuite facilement modifiable afin de convertir non plus 4bits, mais un registre comme ax ou encore eax, en sachant qu'il faudra le convertir par paquets de 4 bits ...
    -Oui j'ai essayer avec le decalage a droite : shr al,4
    Je debute mais pour les variables sa a l'air compliqué car mois ici j'utilise
    cx (donc cl) comme variable pour stocker al, je peux faire sa? car cx sert pour les loop (compteur) enfin si je fait push cx et pares pop cx (sa dois etre correct)

    ou bien il faut que je stock en mémoire mais nasm est différent je comprend pas encore bien car il gere pas les segemt:offset enfin faut aussi savoir ou le mettre en memoire car si la case est déja prise par dos, buggg ...

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 29
    Points : 35
    Points
    35
    Par défaut
    je vais te donner un exemple pour convertir ax en héxadécimal avec une syntaxe compatible avec NASM:

    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
    41
    42
     
    PRINT_HEXA:
            push    ax 
            push    cx
            push    dx 
     
            mov     cx,4            ; 4*4 bits pour AX (2*4 pour AL,8*4 pour EAX)
    LOOP:
            push    cx              ; pas obligatoire si tu ne modifies pas CX dans le loop
     
            rol     ax,4            ; décale à la première éxecution du loop les 4 bits de 
                                    ; poids forts de AX 
                                    ; dans les 4 bits de poids faibles de AL car ils devront
                                    ; être afficher en premier et ainsi de suite lors des
                                    ; autres boucles ...
     
            push    ax              ; Sauve AX		
            and     al,$0f          ; Ne garde que les 4 bits de poids faibles de AL
            cmp     al,10           ; si < 10 c'est un chiffre 
            jb      CHIFFRE 
     
    LETTRE: 
            add     al,'A'-10       ; convertit en code ASCII d'une lettre 
            jmp     AFFICHE 
     
    CHIFFRE: 
            add     al,'0'          ; convertit en code ASCII d'un chiffre 
     
    AFFICHE: 
            mov     dl,al 
            mov     ah,2 
            int     21h             ; affiche le code ASCII 
     
            pop     ax              ; Restaure AX
     
            pop     cx              ; Idem à push CX
            loop    LOOP
     
            pop     dx 
            pop     cx
            pop     ax 
            ret
    J'espère que cela t'aidera
    Sinon, il y a aussi la possiblitée de stocker les codes ASCII convertis dans un emplacement mémoire afin de tous les affichés ensuite à l'aide d'une interruption qui affiche une chaîne de caractères ...

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 42
    Points : 12
    Points
    12
    Par défaut
    merci encore pour ton aide

Discussions similaires

  1. [64 bits]Afficher le contenu du registre RAX en hexa
    Par Thorna dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 09/06/2013, 03h29
  2. Afficher contenu binaire du registre eax
    Par stoner dans le forum x86 32-bits / 64-bits
    Réponses: 11
    Dernier message: 11/03/2013, 16h25
  3. Comment afficher le contenu d'un registre ?
    Par Midou45 dans le forum x86 16-bits
    Réponses: 1
    Dernier message: 16/05/2008, 05h50
  4. afficher le contenu des registres
    Par meftahie dans le forum C
    Réponses: 5
    Dernier message: 09/12/2007, 16h29
  5. Afficher le contenu d'un registre
    Par duplo dans le forum Assembleur
    Réponses: 8
    Dernier message: 07/11/2004, 12h33

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