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 :

Affichage d'un résultat (nombre)


Sujet :

x86 16-bits Assembleur

  1. #1
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut Affichage d'un résultat (nombre)
    Salut à tous

    1. Je veux savoir comment j'affiche ce résultat en TASM (16 bits) :
    la somme = 1400 ?
    2. Comment afficher l'état des flags avec DEBUG (dos)

    Merci d'avance

  2. #2
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    Ce programme affiche deux nombres :
    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
    code    segment
    main        proc
                assume      cs:code       
              mov         bh,36             ; bh = 36
               mov         bl,0                ; bl = 0
    xx:       sub         bh,10             ; bh = bh - 10
                inc         bl                  ; bl = bl + 1
                cmp         bh,9               ; compare bh with 9
                 jg           xx                  ; If bh > 9 then goto xx
                mov         dl,bl
                add         dl,30h
                mov         ah,02h
                int         21h
                mov         dl,bh
                add         dl,30h
                int         21h
                mov         ah,4ch
                int         21h
    main        endp
    code        ends
                end         main
    Mais quand BH contient par exemple 1458, comment j'affiche le résultat ? Je crois qu'on utlise loop mais comment ?

  3. #3
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Salut,

    Citation Envoyé par S.H Voir le message
    mais quand BH contien par example 1458 comment j'affiche le rusulta je crois on utlise loop mais comment?
    BH ne peut pas contenir de valeur supérieure à 255 (sur n bits on peut seulement coder 2^n choses). Pour afficher son contenu tu peux faire une boucle qui le divise par 10 jusqu'à ce qu'il soit égal à zéro. A chaque fois le reste sera égal au caractère de droite, donc il faudrait les stocker tous et les réafficher en sens inverse. Voilà un exemple en utilisant la pile :

    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
            mov al, 255      ; nombre à afficher
            mov bh, 10       ; base dans laquelle le nombre est converti
     
    ; On marque la fin du nombre avec un zéro
            push 0
     
    boucle_div:
    ; Division par 10 (AL contient le quotient, AH le reste)
            xor ah, ah
            div bh
     
    ; Sauvegarde du reste (et du quotient dans AL)
            push ax
     
    ; Tant que le quotient est différent de zéro, on boucle
            test al, al
            jnz boucle_div
     
    boucle_aff:
            pop ax
            test ah, ah
            jz fin
     
            mov dl, ah
            or dl, 30h       ; conversion en caractère ASCII
            mov ah, 02h
            int 21h
     
            jmp boucle_aff
     
    fin:
    Pour voir les flags principaux dans Debug, utilise "r f". Un tutoriel ici : http://www.gamedev.net/reference/art...article215.asp
    :wq

  4. #4
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par S.H Voir le message
    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
    code    segment
    main        proc
                assume      cs:code       
              mov         bh,36             ; bh = 36
               mov         bl,0                ; bl = 0
    xx:       sub         bh,10             ; bh = bh - 10
                inc         bl                  ; bl = bl + 1
                cmp         bh,9               ; compare bh with 9
                 jg           xx                  ; If bh > 9 then goto xx
                mov         dl,bl
                add         dl,30h
                mov         ah,02h
                int         21h
                mov         dl,bh
                add         dl,30h
                int         21h
                mov         ah,4ch
                int         21h
    main        endp
    code        ends
                end         main
    merci beaucoup dapounet mais je ne veux pas utiliser le stack je veux faire ca avec la boucle LOOP ou je ne peux pas?

  5. #5
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Voilà un exemple qui stocke la représentation du nombre dans une chaîne (en syntaxe MASM).

    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
    .Data
    nb  db  "   $"
     
    .Code
    main proc
            mov ax, @data
            mov ds, ax
            mov es, ax
     
            mov al, 255      ; nombre à afficher
            mov bh, 10       ; base dans laquelle le nombre est converti
            mov si, offset nb + 2
     
    boucle_div:
    ; Division par 10 (AL contient le quotient, AH le reste)
            xor ah, ah
            div bh
     
    ; Stockage du reste dans la chaîne
            or ah, 30h       ; conversion en caractère ASCII
            mov [si], ah
            sub si, 1
     
    ; Tant que le quotient est différent de zéro, on boucle
            test al, al
            jnz boucle_div
     
     
    ; Affichage de la chaîne qui représente le nombre
            mov dx, offset nb
            mov ah, 09h
            int 21h
     
    ; Attente d'une touche
            mov ah, 01h
            int 21h
     
    ; Fin du programme
            mov ax, 4C00h
            int 21h
    main endp
    end main
    La même chose avec loopnz (loop if not zero) :
    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
    43
    .Data
    nb  db  "   $"
     
    .Code
    main proc
            mov ax, @data
            mov ds, ax
            mov es, ax
     
            mov al, 255      ; nombre à afficher
            mov bh, 10       ; base dans laquelle le nombre est converti
            mov si, offset nb + 2
            xor ecx, ecx
     
    boucle_div:
    ; Division par 10 (AL contient le quotient, AH le reste)
            xor ah, ah
            div bh
     
    ; Stockage du reste dans la chaîne
            or ah, 30h       ; conversion en caractère ASCII
            mov [si], ah
            sub si, 1
     
    ; Tant que le quotient est différent de zéro, on boucle
            test al, al
            loopnz boucle_div
     
     
    ; Affichage de la chaîne qui représente le nombre
            mov dx, offset nb
            mov ah, 09h
            int 21h
     
    ; Attente d'une touche
            mov ah, 01h
            int 21h
     
    ; Fin du programme
            mov ax, 4C00h
            int 21h
    main endp
    end main
    Attention loopnz fera boucler jusqu'à ce que le reste ou ECX soit égal à zéro. Par contre si ECX est nul dès le départ il faudra 2^32 itérations pour qu'il revienne à zéro, c'est pour ça que j'ai mis le xor ecx, ecx.
    :wq

  6. #6
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    merci beaucoup dapounet de votre aide

  7. #7
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    J'aurais peut-être dû te laisser mariner un peu mais ça ne peut pas faire de mal à un débutant de savoir afficher ses nombres. Maintenant tu devrais faire des macros qui affichent un byte, un word ou un dword, ce sera beaucoup plus pratique que de faire des copier-coller à chaque fois.
    :wq

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

Discussions similaires

  1. Pb affichage d'un résultat d'une cellule
    Par fmris dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/10/2006, 21h14
  2. Affichage d'un résultat selon requête dans formulaire avec date
    Par SMPGSARL dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 06/07/2006, 14h52
  3. [MySQL] Affichage d'un résultat calculé à partir d'une bd
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 31/01/2006, 16h40
  4. [Procedure] Affichage progressif des résultats
    Par xenos dans le forum Langage
    Réponses: 2
    Dernier message: 30/12/2005, 22h07
  5. Réponses: 7
    Dernier message: 26/09/2005, 17h50

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