a.建立源程序(.asm) ↓ b.編譯目標文件(.obj/.lst/.crf) ──錯誤→ c.修改源碼 → 回b ↓ 成功 d.鏈接可執行文件(.exe/.com) ↓ e.運行測試 ──邏輯錯誤→ f.DEBUG調試 → 回a ↓ 正確 g.完成
DOS下輸入 EDIT 進入全屏編輯器,輸入代碼,存為 filename.asm(1-8字符主文件名)。無EDIT可用其他編輯器,最終存為.asm。
MASM filename
三次回車接受默認輸出(.obj/.lst/.crf)。屏幕顯示錯誤數與行號。錯誤過多可重定向:MASM filename > err.txt 便於查看。
僅檢測語法/用法錯誤,不檢測邏輯。記錄行號,重新EDIT修改,循環至零錯誤。
| 代碼 | 含義 |
|---|---|
| A2105 | 期望指令或偽指令(拼寫錯誤) |
| A2049 | 寄存器非法使用 |
| A4016 | 保留字作符號名 |
| A4085 | 缺少 END 指令 |
| Syntax error | 語法不匹配 |
LINK filename
三次回車,生成 .EXE。若提示 no stack segment 屬COM程序正常現象。
運行觀察結果,測試邊界條件。異常時啟動DEBUG:
DEBUG filename.EXE
| 命令 | 用途 | 示例 |
|---|---|---|
| D | 顯示內存(DS段) | D 100 |
| E | 修改內存 | E DS:200 'ABC' FF 00 |
| G | 運行至斷點 | G 001A |
| T | 單步執行 | T =100 5 |
| P | 過程執行(跨中斷/CALL) | P 執行 INT 21H 不進入內部 |
| R | 查看/修改寄存器 | R AX |
| U | 反組合 | U 100 120 |
1 DATA SEGMENT
2 OUT1 DB 'Hello world'
3 AX DB 'My name is DJX' ; AX為保留字
4 DATA ENS ; 拼寫錯誤
5
6 CODE SEGMENT
7 ASSUME CS:CODE;DS:DATA
8 LEA DX,OUT1
9 MOV AH,2 ; 功能號錯誤
10 INT 21H
...
16 MOO AH,2 ; 拼寫錯誤
...
19 LEA DX,AX ; 非法使用寄存器
20 MOV AH, ; 缺操作數
21 INT 21H
22 CODE ENDS
23 ; 缺 END START
error.ASM(3): warning A4016: Reserved word used as symbol: AX error.ASM(4): error A2105: Expected: instruction or directive error.ASM(16): error A2105: Expected: instruction or directive error.ASM(19): error A2049: Illegal use of register error.ASM(23): warning A4085: End of file, no END directive
AX → OUT2;第19行同步修改 LEA DX,OUT2ENS → ENDSMOO → MOVMOV AH,9(字符串輸出功能)START: 標號,末尾 END START$ 結尾MOV AX,DATA / MOV DS,AX 修正段地址(MASM默認數據偏移100H)MOV AH,4CH / INT 21H 正確返回DOSDATA SEGMENT
OUT1 DB 'Hello world$'
OUT2 DB 'My name is DJX$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
LEA DX, OUT1
MOV AH, 9
INT 21H
MOV DL, 0AH
MOV AH, 2
INT 21H
MOV DL, 0DH
MOV AH, 2
INT 21H
LEA DX, OUT2
MOV AH, 9
INT 21H
MOV AH, 4CH
INT 21H
CODE ENDS
END START
重新編譯/鏈接/運行 → 完美輸出並返回DOS提示符。