第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