1. 程式人生 > >c語言中函式呼叫的過程

c語言中函式呼叫的過程

一.程式在記憶體中的佔用。

要學習C語言中函式呼叫的過程,必須要知道程式在記憶體中各個區域的分佈。


C語言的函式呼叫的過程主要分佈在棧中,所以我們今天主要研究棧。

二.幾個基本的彙編指令。

    call:1.將當前指令的下一條指令的地址儲存到棧中。

              2.跳轉至目標函式的地址。

    ret :彈出棧頂地址將資料放入eip

    從棧頂入棧稱為push

     從棧底出棧稱為pop

三.常用暫存器。

在CPU中:讀取指令(記憶體-->CPU)-->分析指令(CPU)-->執行指令(CPU)

      1.  EAX:累積暫存器,EBX:基底暫存器,ECX:計數暫存器,EDX:資料暫存器


      2. EIP(pc):程式計數器(用來存放當前正在執行指令的下一條指令的地址)

      3. ESP:棧頂

       4. EBP:棧底

四.函式的呼叫與棧幀的建立銷燬。

例項函式:


轉換成組合語言:


首先由_tmainCRTStartup呼叫main函式,並在棧中建立了一個棧幀。

分別把a和b的值壓入棧中:



建立b,a臨時變數壓棧。



call指令儲存當前指令下一條計數器的值,並跳轉到指定地址。



建立新的棧幀myadd



定義z,並計算a+b,並返回z的值到main中




將a+b的值賦給c。


到這裡函式的呼叫就結束了。