        ; FILE "call1.c"

       extern foo, printf

        SECTION         .rodata
_LC0:   db      '%d', 10, 0

        SECTION .text
GLOBAL proc

proc: 
        push    ebp                 ; set up stack frame
        mov     ebp,esp
        sub     esp,24

        mov     dword [ebp-4],19    ; x = 19
        mov     eax, [ebp-4]        ; pushes x on the stack
        mov     [esp],eax
        call    foo                 ; calls foo(x) ;
        mov     [esp+4],eax         ; stores return value in stack
        mov     [esp], dword _LC0
        call    printf

        leave                       ; take down stack frame
        ret

GLOBAL main
main: 
        lea     ecx, [esp+4]
        and     esp,-16
        push    dword [ecx-4]
        push    ebp
        mov     ebp,esp
        push    ecx
        sub     esp,4
        call    proc
        add     esp,4
        pop     ecx
        pop     ebp
        lea     esp, [ecx-4]
        ret


