組語開發完整流程:**編譯 → 連結 → 執行**
MASM 環境預設可能僅執行 **編譯 (ML.exe → .obj)**,**未自動呼叫連結器 (Link.exe)** 產生 `.exe`。
:: 1. 編譯
ml /c /coff /Cp main.asm
:: 生成 main.obj
:: 2. 連結 (生成 Console 應用程式)
link /subsystem:console /entry:main main.obj kernel32.lib user32.lib
:: 生成 main.exe
:: 3. 執行
main.exe
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
.data
msg db "Hello, MASM!", 0
caption db "提示", 0
.code
main proc
invoke MessageBox, NULL, addr msg, addr caption, MB_OK
invoke ExitProcess, 0
main endp
end main
| 現象 | 原因 | 解決 |
|---|---|---|
| 連結錯誤 `unresolved external symbol _main` | 進入點名稱不符 | `.code` 中 `main proc` / `end main`、連結器 `/entry:main` 一致 |
| 連結錯誤 `LNK2001: _MessageBoxA@16` | 缺少 `user32.lib` | 連結命令加入 `user32.lib`、原始碼 `includelib user32.lib` |
| 運行閃退無輸出 | 子系統錯誤 (GUI vs Console) | 主控台程式用 `/subsystem:console`、視窗程式用 `/subsystem:windows` |
| IDE 按鈕「建置」無反應 | 專案類型錯誤 | 確認專案為「MASM 專案」非「文字檔專案」 |
**強烈建議**直接在 **Visual Studio 2019/2022** 開發 MASM:
僅生成 `.asm/.obj` 代表 **缺少連結步驟**。解決方法:**手動執行 `link.exe` 生成 `.exe`、或在 IDE 設定啟用連結器、或改用 Visual Studio 內建 MASM 支援**。組語開發三步驟:`編譯 → 連結 → 除錯`,缺一不可。