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