format PE64 console
include 'win64a.inc'
entry main


section 'data' data readable writeable
theText db 'catch me if you can'
sz	= $-theText
buff	rb sz
z	db 0


section 'text' code readable executable
main:
	mov	rdi,10_000_000
	mov	rcx,sz
	mov	rbx,theText
	mov	rax,buff
testit:
	call	StringCopy
	sub	rdi,1
	jnz	testit
displayit:
	sub	rsp,0x20
	mov	rcx,buff
	call	[printf]
	add	rsp,0x20
doneit:
	call	[getchar]
	mov	rcx,0
	call	[ExitProcess]


align 32
StringCopy:
	;enter	 0,0
	push	rsi rdi rcx rdx rbx
	mov	rsi,rbx
	mov	rdi,rax
	mov	rdx,rcx
	mov	rbx,rcx
	shr	rbx,3
	mov	rcx,rbx
	rep	movsq
	shl	rbx,3
	nop
	sub	rdx,rbx
	mov	rcx,rdx
	rep	movsb
	pop	rbx rdx rcx rdi rsi
	;leave
	ret


section 'import' import data readable
     library kernel32,'kernel32.dll',\
	     msvcrt,'msvcrt.dll'
     import kernel32,\
	    ExitProcess,'ExitProcess'
     import msvcrt,\
	    getchar,'getchar',\
	    printf,'printf'
