Multiplication

Multiplication - ASM - Programmation

Marsh Posté le 22-04-2004 à 23:45:04    

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" )
        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 r?sultat
        mov ah, 09h      
        int 21h
        mov dx, offset resul
        mov ah, 09h
        int 21h
         
        mov ah, 4ch            ;termine le programme
        int 21h
        END
 

Reply

Marsh Posté le 22-04-2004 à 23:45:04   

Reply

Marsh Posté le 22-04-2004 à 23:52:36    

A première vue :
J'imagine que les nombre 0, 10, 20, 30... ne fonctionnent pas... Logique puisque quand tu regardes la table ascii le 0 est après le 9.
 
Pour ton prog 10x12 ça donne : 120 ???

Reply

Marsh Posté le 26-04-2004 à 20:53:42    

Euh, 10*12, ça donne 5320 :/
 
20*20 donne bien 0400
50*50 donne bien 2500
 
mais 15*15 donne 6225, ce qui est +/- juste, sauf le 6
 
et alors, 12*12 donne 8384.
 
Je vois pas pourquoi certaines valeurs sont justes et d'autres fausses, le mieux, à la limite, ça aurait été qu'elles soient toutes fausses  :pt1cable: . Au moins, on était fixé...


Message édité par ludwigab le 26-04-2004 à 20:57:05
Reply

Marsh Posté le 28-04-2004 à 13:19:07    

Je me répette... (J'ai peut être lu un peu trop vite mais...)
Avec ton code, combien font 1x10 ?
 
Et la bonne question ?
Si je rentre au clavier 10.
Quelle valeur ton code génère ? 10 ou 20 ?
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed