递归与堆栈
#include<stdio.h>
#include<iostream>
int fact(int n) {if (n == 1)return 1;return n * fact(n - 1);
}
int main()
{int a;std::cin >> a;fact(a);return 0;
}//記得我大一第一次學(xué)習(xí)C語言的時(shí)候,學(xué)到遞歸那點(diǎn)怎么也想不明白,老師也不給講明白。不過如果
//能從反匯編的角度來看,可能會(huì)容易理解一下。 8: int main()9: {
01045320 55 push ebp
01045321 8B EC mov ebp,esp
01045323 81 EC D0 00 00 00 sub esp,0D0h
01045329 53 push ebx
0104532A 56 push esi
0104532B 57 push edi
0104532C 8D BD 30 FF FF FF lea edi,[ebp-0D0h]
01045332 B9 34 00 00 00 mov ecx,34h
01045337 B8 CC CC CC CC mov eax,0CCCCCCCCh
0104533C F3 AB rep stos dword ptr es:[edi]
0104533E A1 00 F0 04 01 mov eax,dword ptr ds:[0104F000h]
01045343 33 C5 xor eax,ebp
01045345 89 45 FC mov dword ptr [ebp-4],eax 10: int a;
11: std::cin >> a;
01045348 8B F4 mov esi,esp
0104534A 8D 45 F4 lea eax,[a]
0104534D 50 push eax
0104534E 8B 0D 90 00 05 01 mov ecx,dword ptr ds:[1050090h]
01045354 FF 15 94 00 05 01 call dword ptr ds:[1050094h]
0104535A 3B F4 cmp esi,esp
0104535C E8 7E BF FF FF call __RTC_CheckEsp (010412DFh) 12: fact(a);
01045361 8B 45 F4 mov eax,dword ptr [a]
01045364 50 push eax
01045365 E8 FA BC FF FF call fact (01041064h)
0104536A 83 C4 04 add esp,4 13: return 0;
0104536D 33 C0 xor eax,eax
https://blog.csdn.net/zr_lang/article/details/39962679
轉(zhuǎn)載于:https://www.cnblogs.com/binanry/p/9742219.html
總結(jié)
- 上一篇: P359 usestock2.cpp
- 下一篇: 微软开源 MS-DOS 1.25 和 M