我寫了一個簡單的代碼來理解彙編代碼。它是以下內容:方法調用後使用EBP指針
int sum(int a, int b){
int res = a+b;
}
而在主函數我調用sum函數。 所以,我也得到了assemblercode(我只需要在這裏和功能的一部分)4
push ebp,
mov ebp, esp
sub esp, 16
mov eax, DWORD PTR[ebp + 12]
mov edx, DWORD PTR[ebp + 8]
add eax, edx
mov DWORD PTR [ebp-4], eax
mov eax, DWORD PTR [ebp-4]
leave
,現在我的問題。我有兩個問題: 首先,在ebp + 12和ebp + 8中記錄sum參數的值(例如sum(5,4))和ebp-4的結果是否有原因?爲什麼我們這樣做?它總是一樣的還是隨機選擇的?
第二,我們有一部分:
mov DWORD PTR [ebp-4], eax
mov eax, DWORD PTR [ebp-4]
爲什麼我們首先在EBP-4,然後執行結果EAX前再次我們離開的功能? 還有一個原因嗎?
爲了能夠給你一個明確的答覆,並有一個,我想問問你,告訴你正在使用的編譯器。 – Rastikan
哪個操作系統和哪個編譯器? – nrz
您將函數聲明爲「int」,但沒有返回任何內容 –