Résultats de 1 à 4 sur 4

Sujet : Multiplication

  1. #1

    Multiplication

    Bon, voilà, je débute en assembleur et j\'ai pondu ce programme qui est censé faire une multiplication de deux nombres entrée au clavier.
    L\'ennui, c\'est qu\'il ne fonctionne pas pour tous les nombres...

    Est ce qu\'il y a une bonne âme pour m\'aider?

    Merci d\'avance

    dosseg
    .model small
    .stack 100h
    .data
    debut db 13,10,\"Multiplication de 2 nombres entre 0 et 99 $\"
    dem1 db 13,10,\"Entrez le premier nombre $\"
    dem2 db 13,10,\"Entrez le second nombre $\"
    produit db 13,10,\"Le r‚sultat de la multiplication est : $\"
    resul db 5 dup(\"0\&quot
    nb1 db 3, 4 dup(?)
    nb2 db 3, 4 dup(?)
    ch3 db ?
    ch4 db ?
    ch5 dw ?
    r1 db 0
    r2 db 0
    r3 db 0
    r4 db 0
    divi dw 10
    multi db 10
    .code
    mov ax, @data
    mov ds, ax

    mov dx, offset debut ;affiche le titre
    mov ah, 09h
    int 21h

    mov dx, offset dem1 ;demande le premier chiffre
    mov ah, 09h
    int 21h

    mov dx, offset nb1 ;enregistre le premier chiffre
    mov ah, 0Ah
    int 21h

    sub nb1+2,30h ;conversion -> ascii
    sub nb1+3,30h

    mov al, nb1+2 ;mise en forme du premier chiffre
    mul multi
    mov nb1+2, al
    add al, nb1+3
    mov ch3, al

    mov dx, offset dem2 ;demande le deuxieme chiffre
    mov ah, 09h
    int 21h

    mov dx, offset nb2 ;enregistre le deuxieme chiffre
    mov ah, 0Ah
    int 21h

    sub nb2+2,30h ;conversion -> ascii
    sub nb2+3,30h

    mov al, nb2+2 ;mise en forme du deuxieme chiffre
    mul multi
    mov nb2+2, al
    add al, nb2+3
    mov ch4, al

    mov al, ch3 ;multiplie les deux nombres
    mul ch4
    mov ch5, ax

    mov dx, 0
    mov ax, ch5
    cmp ax, 0
    je suite
    div divi ;divise par 10
    mov r1, dl ;stock le reste
    cmp ax, 0
    je suite
    div divi ;divise par 10
    mov r2, dl ;stock le reste
    cmp ax, 0
    je suite
    div divi ;divise par 10
    mov r3, dl ;stock le reste
    cmp ax, 0
    je suite
    div divi ;divise par 10
    mov r4, dl ;stock le reste

    suite: add r1, 30h
    add r2, 30h
    add r3, 30h
    add r4, 30h

    mov ah, r4 ;stock les chiffres dans la chaine
    mov resul, ah
    mov ah, r3
    mov resul[1], ah
    mov ah, r2
    mov resul[2], ah
    mov ah, r1
    mov resul[3], ah
    mov resul[4], \"$\"

    mov dx, offset produit ;affiche le resultat
    mov ah, 09h
    int 21h
    mov dx, offset resul
    mov ah, 09h
    int 21h

    mov ah, 4ch ;termine le programme
    int 21h
    END

  2. #2
    ps, j\'utilise tasm sur un 386 dos

  3. #3
    Membre MP
    Inscrit
    août 2013
    Localisation
    12100
    Messages
    687
    C\'est très long de reprendre un programme en assembleur derrière quelqu\'un d\'autre,surtout lorsqu\'il pose un problème.
    Même lorsqu\'on reprend un programme écrit quelques année plus tôt par soi même c\'est très difficile.

    Je te conseille de mettre la conversion ASCII binaire dans une procédure indépendante à tester séparemment. Faire de même avec la procédure Binaire-entier.
    Faire encore de même pour la procédure qui fait les entrées et enfin celle qui fait les sorties. Ainsi lorsque tu fera le programme final, tu aura des modules complètement testés.

    Moby
    moby

  4. #4
    ok, merci, je vais tester comme ça

Informations du sujet

Utilisateur(s) parcourant ce sujet

il y a actuellement 1 utilisateur(s) parcourant ce sujet. (0 membre(s) et 1 visiteur(s))

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas éditer vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé
Please disable Adblock!