彙編第四、五章知識總結
第四瞭解彙編源程式從編寫→除錯
1.簡單的彙編源程式結構:
① 組成
② 幾個常用的偽指令
③ 兩條特殊指令
(a) 指令
產生機器碼;由CPU執行;是程式執行的關鍵
(b) 偽指令
不產生機器碼;由彙編器處理;
做一些輔助性操作,如: 界定段的起止,界定程式結束位置等
(c) 標號、註釋等
不產生機器碼;由彙編器處理;
常與偽指令配合使用,做一些輔助性操作
2.注意:
① 編寫彙編源程式時,預設是十進位制。對於十六進位制,需手動新增H。如:
mov ax, 30H debug工具中預設是十六進位制。二者不要混淆。
② 使用debug除錯時,除錯的必須是得到的可執行檔案,且要帶副檔名。即: debug ××.exe
③ 使用debug ××.exe除錯時,首次進入除錯介面時,暫存器CX中存放的是可執行檔案機器碼長度。
可以通過u命令,結合CS、IP、CX的值,對*.exe檔案反彙編,得到彙編源程式。單步除錯時,除錯到int 21h這條時,使用p命令。
第1步,編寫彙編程式檔案example.asm (使用任何文字編輯器均可)
第2步,對example.asm進行彙編,得到目標檔案example.obj
第3步,對example.obj進行連結,得到可執行檔案example.exe
第4步,執行。
第5步,使用debug除錯可執行檔案example.exe
第5章 [BX]和loop
1. 記憶體單元間接表示: [bx]
用[bx]表示表示記憶體單元
可以使用bx間接訪問記憶體單元。預設,段地址在ds。
2. loop指令
(1) 語法格式
loop 標號
(2) CPU執行指令過程
① (cx) ← (cx) - 1
② 判斷cx的值是否為0。
如果(cx) ≠ 0,跳轉到標號處執行;
如果(cx) = 0
總結:
loop指令可以用來實現迴圈。需要和cx配合使用。
框架:
mov cx, 迴圈次數
標號: (需要迴圈執行的指令片段)
…
loop 標號
t命令:
單步執行;遇loop會進入迴圈內部繼續單步執行;
遇int會進入中斷程式內繼續單步執行;
p命令:
單步執行;遇loop或int會當做整體執行,不進入內部單步
g命令:
執行到指定地址;或遇程式結束或int,則終止執行
3. loop指令和[bx]的聯合應用
(1) 指令中型別匹配、結果超範圍問題
(2) inc指令
inc 暫存器 inc bx bx ← (bx) + 1
inc 記憶體單元 inc [3] ds:3 ← ((ds)×16 +3) + 1
4.注意事項:
(1) 在綜合應用程式設計中,要注意:
① 指令中運算元型別是否匹配;
② 結果是否會超出暫存器或記憶體單元表示範圍;
(2) 可綜合應用loop, [bx], inc指令實現迴圈,
簡化彙編源程式
5.編寫程式注意事項:
段字首
安全記憶體空間
反彙編中問題處理
6.總結:
記憶體單元間接表示: [bx]
loop指令
loop指令和[bx]的聯合應用
其它Tips:
inc指令、段字首、安全記憶體空間
對於記憶體單元表示[0]的反彙編處理
debug中的命令: t, p, g