參考資訊:
https://masm32.com/board/index.php
https://www.nasm.us/xdoc/2.13rc9/html/nasmdoc0.html
經典的Hello, world!程式框架總是能夠讓人細心品味一款程式語言的美好,司徒就使用一個簡單的Message對話盒來展現Hello, world!框架
main.asm
[bits 32] global _start extern _MessageBoxA@16 extern _ExitProcess@4 %define MessageBox _MessageBoxA@16 %define ExitProcess _ExitProcess@4 section .drectve info _entry db "/entry:start " _gdi32 db "/defaultlib:c:\\masm32\\lib\\gdi32.lib " _user32 db "/defaultlib:c:\\masm32\\lib\\user32.lib " _kernel32 db "/defaultlib:c:\\masm32\\lib\\kernel32.lib " segment .data szCaption db "main",0 szContent db "Hello, world!",0 segment .text _start: push 0 push szCaption push szContent push 0 call MessageBox push 0 call ExitProcess
Line 7~8:為了方便名稱使用,重新定義名稱
Line 10~14:傳遞給Linker的指令
Line 16:初始化的資料區段
Line 17~18:定義字串
Line 20:程式區段
Line 21:程式進入點
Line 22~26:顯示Message對話盒
Line 28~29:結束Process並且釋放相關資源
Makefile
export WINEPREFIX=/home/user/.wine_x86 TARGET=main MYWINE=box86 wine NASM32=/home/user/.wine_x86/drive_c/nasm MASM32=/home/user/.wine_x86/drive_c/masm32 all: ${MYWINE} ${NASM32}/bin/nasm.exe -fwin32 ${TARGET}.asm ${MYWINE} ${MASM32}/bin/link.exe /SUBSYSTEM:WINDOWS /MERGE:.rdata=.text ${TARGET}.obj run: ${MYWINE} ${TARGET}.exe clean: rm -rf ${TARGET}.exe ${TARGET}.obj
編譯、執行
$ make $ make run