對ESP EBP的理解

2021-10-09 12:02:17 字數 449 閱讀 3232

一直對暫存器esp和ebp的概念總是有些混淆,檢視定義esp是棧頂指標,ebp是訪問堆疊指標。還是不能很透徹理解。之後借於一段彙編**,總算是對兩者有個比較清晰的理解。

下面是按呼叫約定__stdcall 呼叫函式test(int p1,int p2)的彙編**

;假設執行函式前堆疊指標esp為nn

push   p2    ;引數2入棧, esp -= 4h , esp = nn - 4h

push   p1    ;引數1入棧, esp -= 4h , esp = nn - 8h

call test    ;壓入返回位址 esp -= 4h, esp = nn - 0ch 

;//進入函式內

看完彙編後,再看ebp和esp的定義,哦,豁然開朗,

原來esp就是一直指向棧頂的指標,而ebp只是訪問某時刻的棧頂指標,以方便對棧的操作,如獲取函式引數、區域性變數等。

ESP,EBP 彙編關於引數的傳遞

參考了羅雲斌的一篇文章,很清晰 子程式如何訪問引數 因為預設對堆疊操作的暫存器有 esp 和 ebp,而 esp是堆疊指標,無法暫借使用,所以一般使用 ebp 來訪問堆疊,假定在乙個呼叫中有兩個引數,而且在 push 第乙個引數前的堆疊指標 esp 為 x,那麼壓入兩個引數後的 esp 為 x 8,...

ESP,EBP 彙編關於引數的傳遞

子程式如何訪問引數 因為預設對堆疊操作的暫存器有 esp 和 ebp,而esp是堆疊指標,無法暫借使用,所以一般使用 ebp 來訪問堆疊,假定在乙個呼叫中有兩個引數,而且在 push 第乙個引數前的堆疊指標 esp 為 x,那麼壓入兩個引數後的 esp 為 x 8,程式開始執行 call 指令,ca...

對委託的理解

在公司看了一上午的委託和事件 其實也沒有那麼久了,2個小時而已 終於明白了一些,看大家都沒有回帖,可能是因為我沒有設定加分,我的分太少了,剛來csdn。委託 我對委託的理解是這樣的 實現定乙個函式規範 簡單點說就是定義乙個函式的格式 如 public int test int a 委託裡是這樣寫的p...