在我的汇编程序中,add作为mov

时间:2017-11-28 13:50:11

标签: assembly x86 inline-assembly

我在汇编中编写一个基本程序,计算从1到n的所有方块的总和并打印出结果。我正在使用这个在线工具http://webcompiler.cloudapp.net/(如果你将使用这个工具,它通常会使执行时间超过错误。只需运行第二次或第三次它应该可以正常工作。)

#include <iostream>

using namespace std;

int main()
{

    int n=6, sum;

    _asm{
            push eax    //temp
            push ebx    //i
            push ecx    //n
            push edx    //sum
            mov ebx, 1
            mov ecx, n
            mov edx, 0
            inc ecx
    //-------------------------------
            loop:
            mov eax, ebx        // assign temp to i so we could calculate square
            mul ebx             // multiply the temp with i to get the result of square
            add edx, eax        // add the square result to the sum
            inc ebx             // increment i by 1
            cmp ebx, ecx        // check if i < n
            jl loop             // if it's true, go to loop
            mov sum, edx        // at the end make sum be equal to edx (sum variable)
    //-------------------------------
            pop eax
            pop ebx
            pop ecx
            pop edx
   }
    cout << "The sum of squares from 1 to " << n << " is " << sum << endl;
}

我得到的问题是总和将等于n ^ 2,因此如果我们输入5,则输出25,输入10输出100。

我认为必须对这一行采取措施:

add edx, eax        // add the square result to the sum

它就像mov一样,在结果中使得我的总和成为最后一个循环的平方。我做错了什么?

0 个答案:

没有答案