Multiplication - ASM - Programmation
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 ???
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 . Au moins, on était fixé...
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 ?
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