首页
社区
课程
招聘
[求助]递归函数的反汇编
发表于: 2017-1-10 22:45 4987

[求助]递归函数的反汇编

2017-1-10 22:45
4987
附件里面的反汇编函数解释一下

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 8
活跃值: (10)
能力值: ( 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反汇编得到的
2017-1-10 23:34
0
雪    币: 606
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
没看懂要干啥啊, 要理解递归么?还是?
2017-1-11 00:09
0
雪    币: 115
活跃值: (23)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
4
学编程好辛苦的,放弃了
2017-1-11 02:14
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
函数的反汇编看不懂
2017-1-11 16:30
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
竟然没人回答!哪儿都查不到
2017-1-11 23:09
0
雪    币: 353
活跃值: (57)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
7
[ebp+c]就是n啊,[ebp+8]就是a啊,C/C++从右到左的入栈顺序,不知道你想问啥。
2017-1-12 00:20
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
add esp,8下面三句是做什么用的?
2017-1-12 20:40
0
雪    币: 204
活跃值: (911)
能力值: (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)
2017-1-12 21:31
0
雪    币: 353
活跃值: (57)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
10
按调用规则,压到堆栈上的参数由调用者弹出,以平衡堆栈。也可以由被调用的函数出栈,但函数的声明要不同。add esp这句是出栈。

楼上已经解释清楚了。eax还包含了调用sum的返回值,所以是add eax,而不是mov eax。
2017-1-12 22:23
0
游客
登录 | 注册 方可回帖
返回
//