一直對暫存器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...