1. 程式人生 > >第5到8章

第5到8章

第五章 [BX]和loop

1、[BX]表示的是記憶體單元,它的偏移地址在bx中,間接給出記憶體單元的偏移地址,則段地址預設在ds中

2、記憶體單元間接表示:[bx]

(1)mov dl,[bx]

間接定址,可以使用bx間接訪問記憶體單元,間接給出記憶體單元的偏移地址,預設段地址在ds中

(2)mov ax,[bx]

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

(3)mov [bx],ax

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

3、loop指令是否執行取決於cx的值,若cx=0,則執行loop後面的其他指令,若cx≠0,則跳轉到標號處執行

4、遇到loop指令時,使用p命令來執行,Debug就會自動重複執行迴圈中的命令,直到(cx)=  0為止

5、如果段地址不在ds中,則需要使用cs,ss,es等段字首,顯式地指明記憶體單元的段地址

6、系統中某些地址處存放著重要的資料,dos方式下,一般情況,可以把資料寫在0:200~0:2ff空間中

 

 

第六章 包含多個段的程式

① 使用偽指令segment和ends定義邏輯段後,究竟是用作程式碼段、資料段還是棧,由程式設計師指定。

② 使用assume僅僅表示將某個邏輯段和某個段暫存器關聯起來;真正當作特定的段使用,需要在程式碼段中設定相應的段暫存器值,如ds, ss。

③ 段名代表的是段地址,是常數。不能使用mov直接送入段暫存器。

 

第七章 更靈活的定位記憶體地址方法

1.彙編指令: and和or

and指令:邏輯與指令,按位進行與運算。通過該指令可將操作物件的相應位設為0,其他位不變。

  or指令:邏輯或指令,按位進行或運算。通過該指令可將作業系統的相應位設為1.

 

2.彙編中的字元處理

在彙編源程式中:既可以使用諸如'a'這樣的字元寫法,也可以使用ASCⅡ碼形式的寫法。

在debug中: a命令中不支援諸如'a'這樣的寫法

                      e命令中支援諸如'a'這樣的寫法,也支援ASCⅡ碼形式的寫法

 

3.其它靈活的記憶體地址表示

用[bx + idata]表示表示記憶體單元。idata表示常數。

用[si]表示表示記憶體單元。

用[si + idata]表示表示記憶體單元。idata表示常量。

用[di]表示表示記憶體單元。

用[di + idata]表示表示記憶體單元。idata表示常量。

用[bx+di], [bx+si]表示表示記憶體單元。

用[bx+di+idata], [bx+si+idata]表示記憶體單元。

 

第八章 資料處理的兩個基本問題

1.彙編指令中運算元的型別

常數位於cpu內部,指令緩衝器;暫存器位於cpu內部,暫存器;

2.彙編指令中記憶體單元運算元的地址表示

在8086中,可用於表示記憶體偏移地址的暫存器只有: BX, SI, DI和BP。

這些暫存器可以單個出現在[]中,也可以以特定組合方式出現。

使用BX, SI, DI表示偏移地址時,預設段地址在DS中;

使用BP表示偏移地址時,預設段地址在SS中。

3.彙編偽指令: db, dw, dd, dup

data segment

db定義位元組型別變數,一個位元組資料佔1個位元組單元,讀完一個,偏移量加1

dw定義字型別變數,一個字資料佔2個位元組單元,讀完一個,偏移量加2

dd定義雙字型別變數,一個雙字資料佔4個位元組單元,讀完一個,偏移量加4

data ends

 

data segment

db 0,0,0,0,0,0,0,0

db 8 dup(0); 預留8個位元組單元,每個單元值為0

dd 8 dup(?); 預留8個位元組單元,每個單元值未分配

data ends