1. 程式人生 > >組合語言程式設計第五章

組合語言程式設計第五章

5.1 【BX】

 mov ax,[bx]  功能:bx中存放的資料作為一個偏移地址EA,段地址SA預設在ds中,將SA:EA處的資料送入ax中。即:(ax)=((ds)*16+(bx))。

mov [bx],ax 功能:bx中存放的資料作為一個偏移地址EA,段地址SA預設在ds中,將ax中的資料送入記憶體SA:EA中。即:((ds)*16+(bx))=(ax)。

 

5.2 Loop指令

loop指令的格式:loop 標號。CPU執行loop指令有兩個步驟:①(cx)=(cx)-1②判斷cx中的值,不為零則轉至標號處執行程式,如果為零則向下執行。

三個要點:(1)在cx中存放迴圈的次數。(2)loop指令中的標號所標識的地址要在前面。(3)要迴圈執行的程式段,要寫在標號和loop指令的中間。

程式框架:

      mov cx,迴圈次數

s:

      迴圈執行的程式段

       loop s

 

5.3在Debug中跟蹤用loop指令實現的迴圈程式

在彙編源程式中,資料不能以字母開頭,所以要在前面加0。

 

5.4Debug和彙編編譯器masm對指令的不同處理

(1)在組合語言中,如果一個指令要訪問記憶體單元,則在指令中必須用[...]來表示記憶體單元,如果在[...]中直接用一個常量idata給出記憶體地址的偏移地址,就要在"[ ]"前面顯示地給出段地址所在的段暫存器。

比如,mov al,ds:[0]

如果沒有在“【】”的前面顯示的給出段暫存器,比如mov al,[0]那麼,編譯器masm將把指令中的“【idata】”理解為“idata”。

(2)如果在“【】”裡用暫存器,比如bx,間接給出記憶體單元的偏移地址,則段地址預設在ds中。當然,也可以顯示地給出段地址所在的段暫存器。

 

5.5loop和[bx]的聯合應用

5.6段字首

出現在訪問記憶體單元的指令中,用於顯示地指明記憶體單元的段地址的“ds:”、“cs:”、“ss:”、“es:”,在組合語言中稱為段字首。

 

5.7一段安全的空間

(1)直接向一段記憶體中寫入內容,

(2)這段記憶體空間不應存放系統或其他程式的資料或程式碼,否則寫入操作很可能引發錯誤;

(3)DOS方式下,一般情況,0:200~0:2ff空間中沒有系統或其他程式的資料或程式碼;

(4)需要直接向一段記憶體中寫入內容時,就使用0:200~0:2ff這段空間。

5.8段字首的使用(見實驗四)