21,458
社区成员
发帖
与我相关
我的任务
分享
int func4(int i, int j)
{
if (i <=0 ) return 0;
if (i == 1) return j;
return (func4(i-1,j)+j+1 + func4(i-2,j));
} // end of func4()
08048c83 <func4>: ; func4(i, j)
8048c83: 55 push %ebp
8048c84: 89 e5 mov %esp,%ebp
8048c86: 57 push %edi
8048c87: 56 push %esi
8048c88: 53 push %ebx
8048c89: 83 ec 0c sub $0xc,%esp
8048c8c: 8b 5d 08 mov 0x8(%ebp),%ebx ; i
8048c8f: 8b 7d 0c mov 0xc(%ebp),%edi ; j
8048c92: 85 db test %ebx,%ebx ; i
8048c94: 7e 2b jle 8048cc1 <func4+0x3e> ; i <=0 go to return 0
8048c96: 89 f8 mov %edi,%eax ; j
8048c98: 83 fb 01 cmp $0x1,%ebx ; i ? 1
8048c9b: 74 29 je 8048cc6 <func4+0x43> ; i == 1 go to return j
8048c9d: 83 ec 08 sub $0x8,%esp
8048ca0: 57 push %edi b ; j
8048ca1: 8d 43 ff lea -0x1(%ebx),%eax ; i - 1
8048ca4: 50 push %eax
8048ca5: e8 d9 ff ff ff call 8048c83 <func4> ; func4(i-1, j)
8048caa: 83 c4 08 add $0x8,%esp
8048cad: 8d 34 07 lea (%edi,%eax,1),%esi ; fun4(i-1,j) + j+1 -> esi
8048cb0: 57 push %edi ; j
8048cb1: 83 eb 02 sub $0x2,%ebx ; i - 2
8048cb4: 53 push %ebx
8048cb5: e8 c9 ff ff ff call 8048c83 <func4> ; func4(i-2, j)
8048cba: 83 c4 10 add $0x10,%esp
8048cbd: 01 f0 add %esi,%eax ; func4(i-2, j) + func4(i-1, j)+j+1 -> eax
8048cbf: eb 05 jmp 8048cc6 <func4+0x43> ; retrun eax ^
8048cc1: b8 00 00 00 00 mov $0x0,%eax
8048cc6: 8d 65 f4 lea -0xc(%ebp),%esp
8048cc9: 5b pop %ebx
8048cca: 5e pop %esi
8048ccb: 5f pop %edi
8048ccc: 5d pop %ebp
8048ccd: c3 ret
呃,错了,应该是// lea esi,[edi*1+eax]
呃,错了,应该是// lea esi,[edi*1+eax]