匯編指令:gcc -S main.c
程序從main函數(shù)開始 首先 pushl %ebp movl %esp, %ebp 相當(dāng)于enter指令,保存ebp的值,然后將ebp的值設(shè)為esp,相當(dāng)于保存原函數(shù)的堆棧,然后建立當(dāng)前函數(shù)的堆棧,而且它還有這樣的功能,見下面的博客 http://blog.csdn.net/zhangxinrun/article/details/5888425
把立即數(shù)2壓棧,然后調(diào)用函數(shù)f 同樣enter一下 pushl 8(%ebp),將當(dāng)前ebp所指向的堆棧位置向上數(shù)兩個的位置,也就是放2的那個位置,壓棧。 做一個變址尋址,即將2放入累加器eax中 累加器再加3,累加器為5. 然后pop %ebp,相當(dāng)于leave,由于g函數(shù)中沒有額外壓棧,所以沒做mov指令 返回f函數(shù), esp向上移動一個堆棧位置然后leave, 返回main 同樣esp向上移動一個堆棧位置然后leave,與此同時eax加1,得到最終值6 程序結(jié)束
新聞熱點
疑難解答
圖片精選