程式語言 - ObjAsm - Hello, world!



參考資訊:
https://github.com/ObjAsm
https://objasm.x10host.com/index.htm

main.asm

%include @Environ(OBJASM_PATH)/Code/Macros/Model.inc
SysSetup OOP, WIN32, ANSI_STRING
  
MakeObjects Primer
 
    .const 
Object MyApp, , Primer
    RedefineMethod Init
ObjectEnd
  
    .code
Method MyApp.Init, uses esi
    SetObject esi
    invoke MessageBox, NULL, $OfsCStr("Hello, world!"), $OfsCStr("main"), MB_OK
MethodEnd
 
start proc
    SysInit
  
    OCall $ObjTmpl(MyApp)::MyApp.Init
    OCall $ObjTmpl(MyApp)::MyApp.Done
  
    SysDone
    invoke ExitProcess, 0
start endp
  
end

Makefile

export OBJASM_PATH=/opt/wadk/objasm_linux

TARGET   = main
MYWINE   = WINEPREFIX=~/.wine_x86 box86 wine
CFLAGS   = -coff
LDFLAGS  = -lgdi32
LDFLAGS += -luser32
LDFLAGS += -ladvapi32
LDFLAGS += -lkernel32
LDFLAGS += -e _start@0

all:
	uasm ${CFLAGS} ${TARGET}.s
	i686-w64-mingw32-ld ${TARGET}.o -o ${TARGET}.exe ${LDFLAGS}

run:
	${MYWINE} ${TARGET}.exe

clean:
	rm -rf ${TARGET}.exe ${TARGET}.o

編譯、執行

$ make
$ make run