format pe console
entry start
include 'Win32AXP.inc'
include 'list.inc'
macro fcall proc,[arg]
{
common
  arg@count = 0
   if ~ arg eq
forward
              arg@count = arg@count + 1
common
 end if
reverse
       if arg@count > 2
         push    arg
 else if arg@count = 2
               if ~ arg in < edx >
                   mov     edx,arg
             end if
      else if arg@count = 1
               if ~ arg in < ecx >
                   mov     ecx,arg
             end if
      end if
      arg@count = arg@count - 1
common
     call    proc
}
macro prteax
{
        cinvoke printf,_fmt,eax
}
_fmt       db      "%d",0ah,0
start:
      fcall Add0
  prteax
      fcall Add1,1
        prteax
      fcall Add2,1,2
      prteax
      fcall Add3,1,2,3
    prteax
      fcall Add4,1,2,3,4
  prteax
      fcall Add5,1,2,3,4,5
        prteax
      ret
Add0:
        xor     eax,eax
     ret
Add1:
        mov     eax,ecx
     ret
Add2:
        mov     eax,ecx
     add     eax,edx
     ret
Add3:
        mov     eax,ecx
     add     eax,edx
     add     eax,dword [esp+4]
   ret     4
Add4:
  mov     eax,ecx
     add     eax,edx
     add     eax,dword [esp+4]
   add     eax,dword [esp+8]
   ret     8
Add5:
  mov     eax,ecx
     add     eax,edx
     add     eax,dword [esp+4]
   add     eax,dword [esp+8]
   add     eax,dword [esp+12]
  ret     12
data import
       library msvcrt,'msvcrt.dll'
       import  msvcrt,\
           printf,'printf'
end data