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 :

Problème pour afficher le résultat d'un calcul


Sujet :

Assembleur

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut Problème pour afficher le résultat d'un calcul
    Bonjour,

    Je suis nouveau sur le forum, donc, une petite présentation s'impose:
    Je m'appelle Philip et je fais des études en informatique de gestion à Liège. On a eu un cours d'architecture des ordinateurs en première et maintenant on a un cours d'assembleur (en deuxième).

    On doit faire un programme de multiplication sans utiliser l'instruction MUL. On doit utiliser les interruptions pour encoder et afficher.

    Le programme qui multiplie (16bits * 16 bits et résultat en 32 bits) était assé simple (j'ai galéré pas mal quand même :p). Je suis en train d'essayer de transformer ce que j'ai encodé au clavier mais ...

    Je pense que je n'utilise pas la bonne syntaxe car l'algorithme est assé simple, et je l'ai refais deux fois (mais ça ne veut pas dire que l'algorithme fonctionne bien sur hein )

    Je vais mettre un bout de code.
    Le multiplicande peut être au maximum = 65535 (max 16 bits = FFFFh = 65535d), ça fait 5 chiffres à encoder (au maximum). Je compare le nombre de caractères effectivement lus ([mcande+1] : cf. interruption "Int 21h, Fct 0Ah") à 1, 2, 3, 4 et 5 pour savoir cmb on en a lu. Le code ci dessous est le code pour le cas où on entre 2 chiffres.
    je n'ai pas mis le code complet, c'est donc encore un peu algorithmique

    variables:
    mcande db 8 dup(?) (8 parceque l'interruption "Int 21h, Fct 0Ah" utilise le premier octet pour le nombre max de caractère qu'on peut entrer (j'ai mis 6 (5+carriage return)), le deuxième pour le nombre de caractère lu. Donc, 2 + 5 + 1 = 8 )
    mcandew dw 2 dup(?),'$'

    Debut du programme
    ;encodage du multiplicande dans mcande
    ;comparaison de [mcande+1] (nbr de caractère lu) avec 1, 2, 3, 4 et 5 pour savoir cmb de chiffres composent le nombre.
    ;NB: j'affiche un msg à ce moment ci, et donc je suis sur que j'arrive à cette partie du programme quand j'entre deux chiffres
    ;si composé de DEUX chiffres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mov si, 2
    debut:
    mov bl, mcande[si] ;soustraction pour avoir le nombre en décimal
    sub bl, 30h
    ;les comparaisons : quel chiffre traite t'on?
    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
    cmp si, 2
    jz muldix
    cmp si, 3
    jz fintrait
     
    muldix:
    mov cx, 10 ;on définit le multiplicateur dans cx
    call fctMul ;multiplication (bx = multiplicande, cx = multiplicateur)
    add mcandew, bx	;partie basse du résultat
    adc mcandew+2, ax ;partie haute du résultat
     
    inc si ;on incrémente pour traîterl'element suivant
    jmp debut ;et on va le traîter
    fintrait:
    add mcandew, bx	;add du chiffre des unités
    avec ce code, j'espérais avoir le multiplicande transformé en hexadécimal dans mcandew et pouvoir l'afficher grâce au caractère de fin de ligne que j'ai mis à la suite de cette variable. Mais quand j'affiche, j'obtiens des "crasses" (des caractères divers).

    En fait, pour l'algorithme, je vais chercher encore. C'est surtout pour savoir si je ne me trompe pas dans la syntaxe que je montre le code.

    La fonction de multiplication rend le résultat dans ax-bx (la partie haute dans ax et la partie basse dans bx donc). Je l'ai testée avec un simulateur et ça marche super (ça m'impressionne même).

    Pour l'affichage, l'interruption de sortie d'une chaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          mov   dx,offset mcandew
          mov   ah,009h
          int      21h
    Merci d'avance, Et à plustard !
    Phil.

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 945
    Points : 59 442
    Points
    59 442
    Billets dans le blog
    2
    Par défaut
    Bonjour et bienvenue !

    Pour afficher le contenu de mcandew, il faut en retransformer le contenu en ASCII, donc ajouter 30h à chaque octet.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut
    oh le #!?$^^
    Merci
    J'écrivais les premiers caractères de la table ascii là si j'ai bien compris? et si mon programme les transformait correctement

    Je vais surement avancer maintenant.

    Bonne prog à vous
    Encore merci et à une prochaine fois.

    Phil.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    oui mais on fait comment une conversion hexa vers ascii !!!??

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/01/2015, 10h57
  2. Problème pour afficher les résultats d'un count = 0
    Par Elninor dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/12/2014, 08h19
  3. [MySQL] Problème pour afficher le résultat d'une procédure stockée sous forme de table html
    Par Baleze dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/12/2012, 16h15
  4. [PHP 5.3] [POO] problème pour afficher un résultat
    Par pierrot10 dans le forum Langage
    Réponses: 3
    Dernier message: 27/05/2010, 23h14
  5. Réponses: 5
    Dernier message: 28/03/2007, 23h29

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