函數里edi
發布時間: 2020-12-16 01:51:47
A. 關於C++中函數調用的執行過程
C++中函數調用的執行過程有六步:
1、參數傳遞:將函數參數壓棧:mov eax,dword ptr [n] ;(n為參數變元)。
2、操作:將幀指針壓入棧中: ebp;使得幀指針等於棧指針:mov ebp,esp;使棧指針自減,自減得到的內存地址應當能夠(足夠)用來存儲被調用函數的本地狀態:sub esp,0CCh。
3、傳入保存狀態:push ebx ;保存ebx寄存器的值;push esi ;保存esi寄存器的值;push edi ;保存edi寄存器的值。
4、裝入edi:lea edi,[ebp-0CCh] ;0cch是當前活動記錄的大小。
5、恢復傳入的保存狀態:00411417 pop edi;00411418 pop esi;pop ebx棧指針上移,恢復空間;add esp,0CCh。
6、函數返回釋放空間:使棧指針等於幀指針: mov esp,ebp;從棧中將舊的幀指針彈出: pop ebp;返回:ret。
(1)函數里edi擴展閱讀:
如果被調函數的返回值是整型或字元型時,可以不對被調函數作說明,而直接調用。這時系統將自動對被調函數返回值按整型處理。當被調函數的函數定義出現在主調函數之前時,在主調函數中也可以不對被調函數再作說明而直接調用。
如在所有函數定義之前,在函數外預先說明了各個函數的類型,則在以後的各主調函數中,可不再對被調函數作說明。
熱點內容