1 2;--- Win32/64 console application, uses WinInc v2+. 3;--- It can be used to generate both Win32 and Win64 binaries: 4;--- 32bit: 5;--- jwasm -coff -I\WinInc\Include WinXX_1.asm 6;--- link /subsystem:console /Libpath:\WinInc\Lib WinXX_1.obj 7;--- 64bit: 8;--- jwasm -win64 -Zp8 -I\WinInc\Include WinXX_1.asm 9;--- link /subsystem:console /Libpath:\WinInc\Lib64 WinXX_1.obj 10 11if (type near) eq 0ff02h ;no -win64 switch? 12 .386 13 .model flat, stdcall 14FRAME equ <> 15rax equ <eax> 16rbx equ <ebx> 17rcx equ <ecx> 18rdx equ <edx> 19rsp equ <esp> 20rbp equ <ebp> 21rsi equ <esi> 22rdi equ <edi> 23else 24 option win64:1 ;enable autosaving of register params to shadow space 25 option frame:auto 26endif 27 option casemap:none 28 29 .nolist 30 .nocref 31WIN32_LEAN_AND_MEAN equ 1 32 include windows.inc 33 .list 34 .cref 35 36 includelib <kernel32.lib> 37 38;--- CStr(): macro function to simplify defining a string 39 40CStr macro Text:VARARG 41local szText 42 .const 43szText db Text,0 44 .code 45 exitm <offset szText> 46endm 47 48 .CODE 49 50main proc FRAME uses rbx rsi rdi 51 52local dwWritten:DWORD 53 54 invoke GetStdHandle,STD_OUTPUT_HANDLE 55 mov rbx,rax 56 lea rsi, CStr("Hello, world",13,10) 57 invoke lstrlen, rsi 58 mov edi, eax 59 invoke WriteConsoleA, rbx, rsi, edi, addr dwWritten, 0 60 ret 61 62main endp 63 64mainCRTStartup proc FRAME 65 invoke main 66 invoke ExitProcess, eax 67mainCRTStartup endp 68 69 END mainCRTStartup 70