Podprogramy
Przykładowy podprogram

int f(int a, int b){
	int c = a+b;
	return c;
}

; zwraca sumę a+b 
f: 
  push ebp           ; zachowujemy starą wartość ebp
  mov ebp, esp     
  sub esp, 4         ; przydzielamy pamięć na zmienna lokalna c
 
  mov eax, [ebp+8]   ; mov eax, [a]
  add eax, [ebp+12]  ; add eax, [b]     
  mov [ebp-4], eax   ; mov [c], eax
                     ; wynik jest juz w eax
 
  mov esp, ebp       ; zwolnienie pamięci na stosie
  pop ebp            ; przywrócenie poprzedniej wartości ebp
  ret                ; powrót
 

Zawartość stosu

[ebp+12]    b
[ebp+8]     a
[ebp+4]     adres powrotu z funkcji
[ebp]       poprzednia wartość ebp
[ebp-4]     zmienna lokalna c

Przykład cdecl 32 bit

Przyklad cdecl ze stosem 64 bitowym


Tomasz Kapela, Kraków 2011-2020