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 :

[8086] Afficher le résultat d'une opération


Sujet :

x86 16-bits Assembleur

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut [8086] Afficher le résultat d'une opération
    bonjour a tous et merci de prendre la peine de lire ce message
    voila je voudrai savoir comment faire pour afficher a l'écran le résultat d une opération en assembleur, j ai cherchai dans beaucoup de forums , il beaucoup de discussion sur ca main il n y a pas vraiment de solution ou de moin je n on est pas trouver . je sais qu il faut rajouter 48 pour avoir le code asscii de chiffre c'est on a un seul chiffre , mais dans mon cas je sais pas a l'avance combien de chiffres compose mon nombre ( je sais juste qu'il est dans AX )
    c'est un word .
    alors c'est quelqu'un a la solution ou un lien vers une solution...
    merci pour votre aide

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Si tu sais afficher un chiffre à la fois, alors il faut faire des divisions successives par 10, jusqu'à ce que ton registre atteigne zéro. À chaque fois, le reste de chaque division te donne le chiffre immédiatement à droite.

    Il te suffit de les empiler lors de l'opération. Ensuite, tu redépiles tes chiffres un par un et tu les affiches au fur et à mesure qu'ils sortent.

  3. #3
    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 de 36

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                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              ; comparer bh avec 9
                 jg           xx                 ; SI  bh > 9 Alors goto xx
                mov         dl,bl
                add         dl,30h
                mov        ah,02h
                int          21h
                mov        dl,bh
                add         dl,30h
                int         21h
    mais comment affiche-t-on « 1100 » ?

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par S.H Voir le message
    lmais comment on affiche 1100 ?
    En relisant mon post numéro 2 jusqu'à avoir saisi.

  5. #5
    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 Obsidian

    Pouvez-vous me donner un exemple?

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci pour votre réponse je vais essayer de faire ca , mais si vous avez une meilleure solution, il faut la donner (avec le code si c'est possible) comme ça tout le monde en profitera. Mais c'est bizarre qu il y ait pas de fonction de BIOS ou DOS pour afficher un nombre ! Alors qu'il y a une fonction pour presque tout.

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par S.H Voir le message
    merci beaucoup Obsidian

    Pouvez-vous me donner un exemple?
    Citation Envoyé par jskthebest Voir le message
    Merci pour votre réponse je vais essayer de faire ca , mais si vous avez une meilleure solution, il faut la donner (avec le code si c'est possible) comme ça tout le monde en profitera. Mais c'est bizarre qu il y ait pas de fonction de BIOS ou DOS pour afficher un nombre ! Alors qu'il y a une fonction pour presque tout.
    Ce sont des sujets qui ont déjà longuement été discutés sur le forum. Relisez les règles, faites une recherche, et vous trouverez de nombreux fils traitant du problème.

  8. #8
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour à tous.

    Voila ce que j'ai réussi à faire pour l'affichage d'un nombre quelconque :

    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
    data segment 
     
     
    data ends
    code segment
    assume cs:code,ds:data
    debut:mov ax,data
          mov ds,ax
          mov ax,124
          mov cx,0
          mov bl,10
        a:div bl
          cmp ah,0
          jz aff
          mov dl,ah
          and ax,00ffh
          add dl,48
          push dx
          inc cx
          jmp a
      aff:pop dx
          mov ah,02
          int 21h
          loop aff    
     
         mov ah,4ch 
         int 21h 
    code ends
    end debut

    J'ai testé avec emu8086 et ça marche. Si quelqu'un veut une explication, je suis là (une explication sur le code je veux dire).

  9. #9
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    bonjour
    pour afficher un nombre c fait , mais maintenant le problème c'est comment saisir se nombre car avec la fonction 01h de 21 h on peut pas saisir par ,ex :456
    on peut saisir qu'un chiffre a la fois
    une petite aide serai la bien venu
    note: il y a aussi la fonction 00h de l'interruption 16h mais ca marche pas pour un nombre
    je demande pas un code mais seulement comment faire ou c'est il y a une fonction de bios
    merci a tous

  10. #10
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Bien c'est pareil mais à l'envers

    Faut saisir une chaine :
    Boucle:
    saisir caractère
    si = 13 (touche Entrée) alors fin de boucle
    sinon, placer dans la chaine
    retour

    Initialiser la valeur_finale à 0
    Boucle2:
    multiplier la valeur_finale par 10
    lire code caractère dans la chaine
    soustraire 48 (code ascii 0 )
    si <0 ou >9 alors erreur (c'est pas un nombre décimal)
    ajouter cet octet à la valeur_finale
    retour jusqu'à fin de la chaine

    Voila

    a+ François

  11. #11
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    voila ce que j ai pu faire pour l'instant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    bc:mov ah,01h;
       int 21h
       and ax,00ffh
       push ax
       cmp al,13;comparer  au code ascii de'entre'
       jz quit  ;tant que on pas appuyer sur entrer
       jmp bc   ;on boucle
     
    quit:mov ah,4ch ;retour au dos
         int 21h
    mais comment remettre le nombre dans ax

  12. #12
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    j ai poster avant de lire votre poste fortham

  13. #13
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    forthman excusé moi mais j ai pas compris comment récupérer le nombre
    avec push ax je l est mais dans la pile mais comment le récupérer il sera inversé et il faut multiplier par 10 puissance n ( avrc n: 0,10,100,....)
    j arrive pas coder ca
    merci pour votre aide

  14. #14
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    A la place de "Vous" je préfèrerai un "Votre Majesté"

    Exemple :
    Soit la chaine contenant "1234"
    (VF = Valeur_finale)

    VF=0

    (je déroule les boucles)

    boucle1
    VF=VF*10 (= 0 )
    ASCII "1" - 48 = 1
    VF=VF+1 ( = 1)

    boucle2
    VF=VF*10 (= 10 )
    ASCII "2" - 48 = 2
    VF=VF+1 ( = 12)

    boucle3
    VF=VF*10 (= 120 )
    ASCII "3" - 48 = 3
    VF=VF+1 ( = 123)

    boucle4
    VF=VF*10 (= 1230 )
    ASCII "4" - 48 = 4
    VF=VF+1 ( = 1234)

    Voila,
    l'idéal étant d'utiliser AX pour stocker VF (pour la multiplication par 10)

    a+ François

Discussions similaires

  1. [AC-2007] afficher le résultat d'une opération dans un champ
    Par gentelmand dans le forum Access
    Réponses: 2
    Dernier message: 01/06/2010, 16h38
  2. Réponses: 5
    Dernier message: 17/06/2006, 12h33
  3. Réponses: 5
    Dernier message: 14/06/2006, 15h19
  4. Réponses: 3
    Dernier message: 25/11/2005, 14h51
  5. [QReport] Afficher le résultat d'une requete
    Par PFX dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/05/2005, 14h38

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