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