我在汇编中编写一个基本程序,计算从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一样,在结果中使得我的总和成为最后一个循环的平方。我做错了什么?