1. 程式人生 > >彙編第四、五章知識總結

彙編第四、五章知識總結

第四瞭解彙編源程式從編寫→除錯

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後面的其它指令。

總結:

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