; ukázka stack frame - Předání argumentů přes zásobnik %include "rw32.inc" section .text ; int add_nums(int a, int b) { return a+b; } add_nums: push ebp ; záloha mov ebp, esp sub esp, 8 ; alokace pro 2 lokální proměnné ; [ebp - 8] == lokalni2 ; [ebp - 4] == lokalni1 ; [ebp] == EBP ; [ebp + 4] == EIP ; návratová hodnota ; [ebp + 8] == 5 (a) ; [ebp + 12] == 100 (b) mov [ebp - 8], dword 42 ; zapis do lokalni2 mov eax, [ebp + 8] add eax, [ebp + 12] add esp, 8 ; dealokace 2 lokálních proměnných pop ebp ; obnovení ret add_nums2: ; totez enter 8,0 ; 8 znamená alokaci 2 lokálních proměnných (2*4) ; 0 je mode, více v dokumentaci mov eax, [ebp + 8] add eax, [ebp + 12] mov [ebp - 4], eax ; zapis do lokalni1 leave ret main: ; push vložení na zásobnik ; x x x x push dword 100 ; 100 x x x push dword 5 ; 5 100 x x ; [esp] == 5 <= vrchol zásobniku ; [esp + 4] == 100 ; [esp + 8] == x call add_nums ; změn na add_nums2 ; úklid argumentů ze zásobníku add esp, 8 ; posune vrchol zásobníku o 2 byte (2*4) ret ; Note: protože používám EBP, měli bychom jej zálohovat i v mainu