在以下代码中显示输出0而不是8

时间:2010-09-04 13:31:59

标签: assembly x86

.intel_syntax noprefix

.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

2 个答案:

答案 0 :(得分:1)

您将edx乘以eax,因此您的结果存储在eax中,而不是edx。

您的代码:

mul edx
mov ans,edx

您要将edx的值分配给ans。你应该将eax的值存储在ans中。

mul edx
mov ans,eax

答案 1 :(得分:0)

你使用了很多我不理解的宏,但基本的问题似乎是你没有对'mul edx'的结果做任何事情。

MUL EDX的结果是在edx:eax中,你似乎把这些信息扔掉而不把它放在变量ans中。