;--- Win32/64 console application, uses Win32Inc v2+.
;--- It can be used to generate both Win32 and Win64 binaries:
;--- 32bit:
;--- jwasm -coff -I\Win32inc\Include WinXX_1.asm
;--- link /subsystem:console /Libpath:\Win32inc\Lib WinXX_1.obj
;--- 64bit:
;--- jwasm -win64 -Zp8 -I\Win32inc\Include WinXX_1.asm
;--- link /subsystem:console /Libpath:\Win32inc\Lib64 WinXX_1.obj
if (type near) eq 0ff02h ;no -win64 switch?
.386
.model flat, stdcall
FRAME equ <>
rax equ <eax>
rbx equ <ebx>
rcx equ <ecx>
rdx equ <edx>
rsp equ <esp>
rbp equ <ebp>
rsi equ <esi>
rdi equ <edi>
else
option win64:1 ;enable autosaving of register params to shadow space
option frame:auto
endif
option casemap:none
.nolist
.nocref
WIN32_LEAN_AND_MEAN equ 1
include windows.inc
.list
.cref
includelib <kernel32.lib>
;--- CStr(): macro function to simplify defining a string
CStr macro Text:VARARG
local szText
.const
szText db Text,0
.code
exitm <offset szText>
endm
.code
main proc FRAME uses rbx rsi rdi
local dwWritten:DWORD
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov rbx,rax
lea rsi, CStr("Hello, world",13,10)
invoke lstrlen, rsi
mov edi, eax
invoke WriteConsoleA, rbx, rsi, edi, addr dwWritten, 0
ret
main endp
mainCRTStartup proc FRAME
invoke main
invoke ExitProcess, eax
mainCRTStartup endp
end mainCRTStartup
|