Multiplication de deux nombres compris entre 0 et 99 en assembleur

Signaler
Messages postés
1
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
28 avril 2004
-
Messages postés
2
Date d'inscription
vendredi 9 mai 2008
Statut
Membre
Dernière intervention
9 mai 2008
-
salut, j'ai un programme a faire mais je suis nul en assembleur, voici ce que j'ai fais mais ca ne fonctionne pas.
Quelqun peut'il me le corriger et me le renvoier. Un grand merci d'avance a celui qui le fera, il me sauvera.( je doit le rendre mercredi prochain a l'ecole)

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 ;enregistre le premier nombre
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 ;enregistre le deuxieme nombre
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
A voir également:

3 réponses

Messages postés
59
Date d'inscription
dimanche 15 décembre 2002
Statut
Membre
Dernière intervention
2 juin 2004

Desolé, on est pas adepte de la resolution gratuite d'exercice, en revenche ya pa de probleme pour t'aider a trouver la ou les erreurs

Face a ce genre de probleme, il y a deux solutions:
la premiere consiste a diviser ton prog en plusieurs ss/routines que tu teste independement des autres
(En plus le programme est plus clair et structuré : ton prof appreciera !)

la deuxieme consiste a tracer ton prog a l'aide d'un debugger. c un peu plus bourrin (moi j'apelle ca du brute-programming). un prog tel que TD.EXE (borland) est tres bon pour ca (prog DOS). La technique consiste a suivre l'execution du prog instr par instr et de comparer la reaction de chacune par rapport a ce qui était prévu

BonDev'
ps: ya une troisieme technique qui consiste a ne pa rendre ton devoir, enfin c a toi d'voir :-p .
-----------------------------------
fan de prog système (voir taré)
En attente de Valium ! lol
Messages postés
582
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
2 août 2021
2
Je ne suis plus a l'école ce qui me permet de dire au prof qui colle des exercices , d'adapter son assembleur a windows,ça serait beaucoup mieux ,MASM32 existe et on peut faire une simple multiplication sous windows.j'insiste ,c'est faisable !?
ToutEnMasm
Messages postés
2
Date d'inscription
vendredi 9 mai 2008
Statut
Membre
Dernière intervention
9 mai 2008

salut à toi !
j'aurais aimé savoir comment on améliorerait ton programme qui se limite aux nombres compris entre 0 et  99 , afin d'élargir cette contrainte en -99  et +99
merci d'avance