2010-09-04 5 views
1

.intel_syntax noprefixdans le code ci-dessous montrant la sortie 0 au lieu de 8

.include "console.i" 


.data 
     ask1: .long 0 
     ask2: .long 0 
     ans : .long 0 

.text 
     ask: .asciz "Enter number: " 
     ans1: .asciz "multiplication= " 

_entry: 

     Prompt ask 
     GetInt ask1 
     Prompt ask 
     GetInt ask2 

     mov eax, ask1 
     mov edx, ask2 
     mul edx 
     mov ans,edx 

     Prompt ans1 
     PutInt ans 
     PutEol 

ret 

.global _entry 

.end 



OUTPUT: 
     Enter number: 2 
     Enter number: 4 
     multiplication= 0 


In above code it gives output as 0. 
why it is showing 0 instead of 8 ? 

edit1: added mov ans, edx 

Répondre

0

Vous utilisez pas mal de macros je ne comprends pas, mais le problème de base semble être que vous ne faites rien avec les résultats de 'mul edx'. Les résultats de MUL EDX sont dans edx: eax et vous semblez jeter cette information sans la mettre dans votre variable.

+0

Au moment de la rédaction de ce, les bits les plus élevés des résultats sont mis en 'ans' par l'instruction' mov ans, edx' conduisant au résultat de 0. Comme le dit –

+0

@bunty Daniel, le ' L'instruction mul' met son résultat dans edx: eax (bits les plus significatifs dans edx, plus bas dans eax). Si vous souhaitez simplement ignorer les débordements, obtenez le résultat de eax, pas d'edx, après la multiplication. –

1

Vous multipliez edx par eax, donc votre résultat est stocké dans eax, pas edx.

votre code:

mul edx 
mov ans,edx 

vous assignez la valeur de EDX à ans. Vous devriez stocker la valeur de eax dans ans.

mul edx 
mov ans,eax 
Questions connexes