Here is the 64-bit version :
_stdout EQU 1
ExitProcess PROTO :QWORD
printf PROTO :QWORD,:VARARG
__acrt_iob_func PROTO :QWORD
; int __cdecl __stdio_common_vfprintf(unsigned __int64 _Options,FILE* _Stream,
; char const* _Format,int _Locale,va_list);
__stdio_common_vfprintf PROTO :QWORD,:QWORD,:QWORD,:QWORD,:QWORD
_strupr PROTO :QWORD
includelib \PellesC\lib\Win64\kernel32.lib
includelib ucrt.lib
.data
frmt db '%s %s %s %u.',0
s1 db 'This',0
s2 db 'is',0
s3 db 'printf test',0
.code
start PROC PARMAREA=5*QWORD
invoke _strupr,ADDR s3
invoke printf,ADDR frmt,ADDR s1,ADDR s2,\
ADDR s3,1
invoke ExitProcess,0
start ENDP
OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE
printf PROC _format:QWORD,args:VARARG
mov QWORD PTR [rsp+8],rcx
mov QWORD PTR [rsp+16],rdx
mov QWORD PTR [rsp+24],r8
mov QWORD PTR [rsp+32],r9
sub rsp,8+40+8
; #define _stdout (__acrt_iob_func(1))
invoke __acrt_iob_func,_stdout
xor rcx,rcx
mov rdx,rax
mov r8,QWORD PTR [rsp+64]
xor r9,r9
lea rax,QWORD PTR [rsp+72]
mov QWORD PTR [rsp+32],rax
call __stdio_common_vfprintf
add rsp,8+40+8
retn
printf ENDP
OPTION PROLOGUE:PrologueDef
OPTION EPILOGUE:EpilogueDef
END start