函式棧楨的建立、初始化及清除
本文目的在於描述函式棧楨的建立初始化和清除等過程,因此只對暫存器、彙編指令做一些簡單的介紹。
一、一些暫存器的基本介紹(x86處理器中)
圖中通用暫存器中:
eax 通常用於計算,作為累加器。
ebx
ecx 通常用於迴圈變數計數,作為計數器。
edx
esi 通常在記憶體操作指令中作為「源位址指標」使用。
edi 通常在記憶體操作指令中作為「目的位址指標」使用
圖中指標暫存器中:
ebp 基址指標,用於指示子程式或者函式呼叫的基址指標。
esp 棧指標,用於指示棧頂的位置。
二、一些簡單彙編指令介紹(x86彙編)
資料傳送指令:
mov 將第二個運算元複製到第乙個運算元
push 入棧,將運算元壓入記憶體的棧中,將esp的值減4
pop 出棧,首先將esp指示的位址的內容出棧,然後將esp的值加4
lea 載入有效位址的指令,將第二個運算元的位址載入到第乙個運算元
算數和邏輯指令:
sub 將第乙個運算元減去第二個運算元,並將相減後的值儲存在第乙個運算元。
xor 邏輯異或,常用來對暫存器的值清0。
控制轉移指令:
ret 彈出棧中儲存的指令位址,然後無條件轉移到儲存的指令位址執行。
rep stos rep的目的是重複之前的一條指令,該指令之前的ecx是重複的次數。stos的作用是將eax的值拷貝到該指令運算元所指的位置。
三、乙個空函式棧楨的建立、初始化及清除
測試**:
int main( )
return 0;
反彙編**及解釋:
參考:x86彙編快速入門
簡明x86彙編
函式呼叫堆疊
函式的呼叫,棧楨的建立及銷毀
下面我們主要從棧的層面深入了解c語言中函式呼叫的過程。下面我用乙個簡單的程式說明 include include int add int x,int y int main 011e1880 pop edi 011e1881 pop esi 011e1882 pop ebx 011e1883 add ...
初始化乙個指標的方法
方法1.在用到指標的地方.cpp中 cinfo pinfo pinfo cinfo createinfo 中是類cinfo的定義 ifndef info h define info h include using namespace std class cinfo endif 類cinfo的.cpp...
乙個簡單的初始化問題
也許只有實踐才知道自己的c語言基礎有多薄弱。今天在vc知識庫論壇上問了乙個弱弱的問題。我在乙個類裡宣告 enum charm cbuffer sbf 然後在建構函式裡初始化 m cbuffer sbf 編譯時出現了這些錯誤 syntax error 之後我將這個初始化語句改為 memset m cb...