Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1776 connectés 

  FORUM HardWare.fr
  Programmation
  ASM

  Multiplication

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Multiplication

n°706570
ludwigab
Posté le 22-04-2004 à 23:45:04  profilanswer
 

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
 

mood
Publicité
Posté le 22-04-2004 à 23:45:04  profilanswer
 

n°706579
christophe​_d13
L'efficacité à tout prix.
Posté le 22-04-2004 à 23:52:36  profilanswer
 

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 ???

n°709113
ludwigab
Posté le 26-04-2004 à 20:53:42  profilanswer
 

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
n°710760
christophe​_d13
L'efficacité à tout prix.
Posté le 28-04-2004 à 13:19:07  profilanswer
 

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 ?
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASM

  Multiplication

 

Sujets relatifs
[java] Pb de multiplication de double ?????multiplication, division, soustraction et modulo en base x
INTEL GNU bug dans un programme... multiplication, comparaisonassembleur : multiplication de 2 nombres dans la norme IEEE
Plus de sujets relatifs à : Multiplication


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR