指令集龐大,初學者易陷細節泥潭。建議:不寫大程序,玩DEBUG。破解小軟件成就感更強。重點掌握 CMP/LOOP/MOV/JNZ 等核心指令,其餘按需查閱。
| 類別 | 寄存器 | 用途 |
|---|---|---|
| 數據寄存器(可拆8位) | AX=AH+AL | 累加器,運算主力 |
| BX=BH+BL | 基址寄存器,地址索引 | |
| CX=CH+CL | 計數器,循環/串操作 | |
| DX=DH+DL | 數據寄存器,I/O端口、乘除擴展 | |
| 段寄存器 | CS | 代碼段 |
| DS | 數據段 | |
| SS | 堆疊段 | |
| ES | 附加段 | |
| 專用指標 | IP | 指令指針,配合CS追蹤執行流 |
| SP | 堆疊指針,配合SS | |
| BP/SI/DI | 基址/源/目標變址,相對寻址 |
段式寻址:物理地址 = 段基址×16 + 偏移。COM文件限制64KB(CS=DS=SS,單段)。
DEBUG是最佳入門工具:無需編輯器/編譯器/鏈接器,直接輸入指令即時執行,可檢查/修改內存/寄存器。
-A 100
1FED:0100 MOV DL, 1
1FED:0102 MOV AH, 2
1FED:0104 INT 21
1FED:0106 INT 20
-G
☺
Program terminated normally
U 100,106 反組合查看機器碼。R 查看寄存器。N SMILE.COM / RCX / 7 / W 寫盤生成可執行文件。
MOV CX, 0100H
MOV DL, 0
MOV AH, 2
INT 21
INC DL
LOOP 0105
INT 20
功能 09H 輸出 `$` 結尾字符串;功能 0AH 輸入緩衝區(首字節長度,次字節實際長度,數據區以回車結尾)。
.ASM 源文件(含 SEGMENT/ASSUME/ORG 100H/ENDS/END 固定五行)MASM FILE → .OBJLINK FILE → .EXE(忽略 no stack segment 警告)EXE2BIN FILE FILE.COM → .COM(最小最快)採用自頂向下規劃,自底向上編碼。三個模塊:
BINIHEX:ROL BX,CL 循環左移取4位 → AND AL,0FH → ADD 30H/37H 轉ASCII → INT 21H/02H 輸出DECIBIN:INT 21H/01H 讀鍵 → SUB 30H → CBW/XCHG/MUL 10 累積到BXCRLF:輸出 0DH/0AH主程序 DECIHEX 循環調用三模塊 4 次,INT 21H/4CH 退出。子程序用 PROC NEAR/ENDP,CALL/RET 傳遞控制權,PUSH/POP CX 保護現場。
「假設你的程序一定有錯;若首次運行完美,諍檢查——它可能是錯的。大程序分模塊,紙筆模擬寄存器/內存變化。」