參考資訊:
https://www.masm32.com/
經典的Hello, world!程式框架總是能夠讓人細心品味一款程式語言的美好,司徒就使用一個簡單的Message對話盒來展現Hello, world!框架
main.s
.386
.model flat,stdcall
option casemap:none
include /opt/wadk/masm32/include/windows.inc
include /opt/wadk/masm32/include/kernel32.inc
include /opt/wadk/masm32/include/user32.inc
.data
szCaption db "main",0
szContent db "Hello, world!",0
.code
start:
invoke MessageBox, NULL, offset szContent, offset szCaption, MB_OK
invoke ExitProcess, 0
end start
Line 1:CPU指令
Line 2:記憶體類型是flat,calling convention使用stdcall
Line 3:程式區分大小寫
Line 5~7:Header檔案
Line 9:初始化的資料區段
Line 10~11:初始化的Global變數,型態是byte(char)且最後一個byte是0
Line 13:程式區段
Line 14:程式進入點
Line 15:顯示Message對話盒,invoke是一個偽指令,最終會展開成call + push的綜合指令
Line 16:結束Process並且釋放相關資源
Line 17:檔案結尾,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