2013-10-15 1 views
1

Je suis en train de créer un programme d'assemblage qui calcule le factoriel d'un nombre:Multiplication dans l'assemblage

.data 
n dword 1 
res dword 1 

.code 
start: 
mov ecx, 5 
Top: 
add n, 1 
mov eax, res 
mov ebx, n 
mul eax, ebx 
mov res, eax 
dec ecx 
jnz Top 

Next: 
Invoke crt_printf, addr res 

L'erreur je rencontre avec les codes ci-dessus est la partie mul, où je veux multiplier EAX et ebx. Comment puis-je réparer cela? Toute aide est très appréciée.

+0

_ "L'erreur que je rencontre avec les codes ci-dessus est la partie mul" _. Et quoi, exactement, est l'erreur? – Michael

Répondre

5

Vous voulez

mul ebx 

Le eax est implicite. Ce que mul ebx fait est ebx*eax et stocke le résultat dans edx:eax (les bits d'ordre supérieur vont dans edx quand eax n'est pas assez grand pour contenir le résultat, dans votre exemple ce n'est pas un problème cependant). Notez que vous avez deux compteurs parallèles dans n et ecx. Vous pouvez vous débarrasser d'un pour rendre votre code plus court:

.code 
start: 
mov ecx, 5 
mov eax, 1 
Top: 
mul ecx 
dec ecx 
jnz Top 
mov res, eax 

encore plus courte, vous pouvez remplacer les deux lignes dec ecx, jnz Top par loop Top. Maintenant c'est une fonction factorielle courte et douce!