;--- Win64 "hello world" GUI application.
;--- Note: requires at least JWasm v2
;--- assemble: JWasm -win64 Win64_1.asm
;--- link:     Link /subsystem:windows Win64_1.obj

	option casemap:none

	includelib kernel32.lib
	includelib user32.lib

externdef MessageBoxA : near
externdef ExitProcess : near

	.data

text    db 'Hello world!', 0
caption db 'Hello x86-64', 0

	.code

main proc
	sub rsp, 28h        ; space for 4 arguments + 16byte aligned stack
	xor r9d, r9d        ; 4. argument: r9d = uType = 0
	lea r8, [caption]   ; 3. argument: r8  = caption
	lea rdx, [text]     ; 2. argument: edx = window text
	xor rcx, rcx        ; 1. argument: rcx = hWnd = NULL
	call MessageBoxA
	xor ecx, ecx        ; ecx = exit code
	call ExitProcess
main endp

	end