Hi Grincheux,
Here is an attempt for the 64-bit code :
MessageBoxA PROTO :QWORD,:QWORD,:QWORD,:QWORD
MessageBox EQU <MessageBoxA>
ExitProcess PROTO :QWORD
printf PROTO :QWORD,:VARARG
memset PROTO :QWORD,:QWORD,:QWORD
INITLOC MACRO
VarSize=0
ENDM
LOCVAR MACRO _name,_type
VarSize = VarSize + SIZEOF(_type)
LastVar TEXTEQU _name
LOCAL _name : _type
ENDM
ENDLOC MACRO
mov rbx,rcx
lea rcx,LastVar
invoke memset,rcx,0,VarSize
mov rcx,rbx
ENDM
.data
string1 db 'x = %d , x = %d , z = %d',0
.code
start PROC PARMAREA=4*QWORD
call main
invoke ExitProcess,0
start ENDP
main PROC USES rsi rdi rbx PARMAREA=4*QWORD
INITLOC
LOCVAR x,QWORD
LOCVAR y,QWORD
LOCVAR z,QWORD
ENDLOC
mov x,1
mov y,2
mov z,3
invoke printf,ADDR string1,x,y,z
ret
main ENDP