关于理解这段代码的问题
求教这段代码到底是什么意思?我好像模糊感觉到是一个递归,但是具体一点就看不懂了。Dump of assembler code for function func4:
0x08048c80 <+0>: push %ebp
0x08048c81 <+1>: mov %esp,%ebp
0x08048c83 <+3>: sub $0x18,%esp
=> 0x08048c86 <+6>: mov %ebx,-0x8(%ebp)
0x08048c89 <+9>: mov %esi,-0x4(%ebp)
0x08048c8c <+12>: mov 0x8(%ebp),%edx
0x08048c8f <+15>: mov 0xc(%ebp),%eax
0x08048c92 <+18>: mov 0x10(%ebp),%ebx
0x08048c95 <+21>: mov %ebx,%ecx
0x08048c97 <+23>: sub %eax,%ecx
0x08048c99 <+25>: mov %ecx,%esi
0x08048c9b <+27>: shr $0x1f,%esi
0x08048c9e <+30>: lea (%esi,%ecx,1),%ecx
0x08048ca1 <+33>: sar %ecx
0x08048ca3 <+35>: add %eax,%ecx
0x08048ca5 <+37>: cmp %edx,%ecx
0x08048ca7 <+39>: jle 0x8048cc0 <func4+64>
0x08048ca9 <+41>: sub $0x1,%ecx
0x08048cac <+44>: mov %ecx,0x8(%esp)
0x08048cb0 <+48>: mov %eax,0x4(%esp)
0x08048cb4 <+52>: mov %edx,(%esp)
0x08048cb7 <+55>: call 0x8048c80 <func4>
0x08048cbc <+60>: add %eax,%eax
0x08048cbe <+62>: jmp 0x8048ce0 <func4+96>
0x08048cc0 <+64>: mov $0x0,%eax
0x08048cc5 <+69>: cmp %edx,%ecx
0x08048cc7 <+71>: jge 0x8048ce0 <func4+96>
0x08048cc9 <+73>: mov %ebx,0x8(%esp)
0x08048ccd <+77>: add $0x1,%ecx
0x08048cd0 <+80>: mov %ecx,0x4(%esp)
0x08048cd4 <+84>: mov %edx,(%esp)
0x08048cd7 <+87>: call 0x8048c80 <func4>
0x08048cdc <+92>: lea 0x1(%eax,%eax,1),%eax
0x08048ce0 <+96>: mov -0x8(%ebp),%ebx
0x08048ce3 <+99>: mov -0x4(%ebp),%esi
0x08048ce6 <+102>: mov %ebp,%esp
0x08048ce8 <+104>: pop %ebp
0x08048ce9 <+105>: ret