能力值:
( LV2,RANK:10 )
|
-
-
2 楼
#include<stdio.h>
#define N 50
int sum(int a[],int n);
void main()
{
int i,n,a[N];
printf("请输入一个50以内的自然数: ");
scanf("%d",&n);
for(i=0;i<n;i++)
a[i]=i+1;
printf("前%d个自然数的和为:%d\n",n,sum(a,n));
}
int sum(int a[],int n)
{
if(n<=0)
return 0;
else
return a[n-1]+sum(a,n-1);
}
VC6.0反汇编得到的
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
没看懂要干啥啊, 要理解递归么?还是?
|
能力值:
(RANK:20 )
|
-
-
4 楼
学编程好辛苦的,放弃了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
函数的反汇编看不懂
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
竟然没人回答!哪儿都查不到
|
能力值:
( LV9,RANK:140 )
|
-
-
7 楼
[ebp+c]就是n啊,[ebp+8]就是a啊,C/C++从右到左的入栈顺序,不知道你想问啥。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
add esp,8下面三句是做什么用的?
|
能力值:
(RANK:1324 )
|
-
-
9 楼
mov edx,dword ptr[ebp+0CH] //edx=n;
mov ecx,dword ptr[ebp+8] //ecx=a;
mov edx,dword ptr[ecx+edx*4-4] //edx=a[n-1]
add eax,edx //eax=a[n-1]+sum(a,n-1)
|
能力值:
( LV9,RANK:140 )
|
-
-
10 楼
按调用规则,压到堆栈上的参数由调用者弹出,以平衡堆栈。也可以由被调用的函数出栈,但函数的声明要不同。add esp这句是出栈。
楼上已经解释清楚了。eax还包含了调用sum的返回值,所以是add eax,而不是mov eax。
|
|
|