5.1 [BX]和記憶體單元的描述
要完成描述一個記憶體單元,需要兩種資訊:
- 記憶體單元的位址:
- 可以用 [0] 表示一個記憶體單元, 0 表示單元的偏移位址,段位址預設在 ds 中;
- 同樣也可以用 [bx] 表示一個記憶體單元,它的偏移位址在 bx 中;
- 記憶體單元的長度(類型):
- 将一個記憶體單元的内容送入 ax ,這個記憶體單元的長度就為 2 位元組(字單元),存放一個字;
- 将一個記憶體單元的内容送入 al,這個記憶體單元的長度就為 1 位元組(位元組單元),存放一個位元組;
5.2 Loop 指令
loop 指令和 cx 相配合實作循環功能的,cx中存放循環的次數。
loop指令的格式是:loop 标号,CPU執行loop指令的時候,要進行兩步操作
- (cx)=(cx)- 1;
-
判斷 cx 中的值,不為零則轉至标号處執行程式,如果為零則向下執行。
其架構為:
mov cx, 循環次數
s:
循環執行的程式段
loop s
5.3 包含多個段的程式
在8086模式限制下如果資料,棧和代碼需要的空間超過64KB,就不能放在一個段中,應該把資料,棧和代碼放在對應的代碼段,棧段,資料段;
例如:
assume cs:code,ds:data,ss:stack
data segment
dw 0001h,0002h,0003h,0004h,0005h,0006h,0007h,0008h ;dw定義字形資料
data ends
stack segment
db 0,0,0,0,0,0,0,0 ;定義位元組型資料
stack ends
code segment
start:
mov ax,data ;把資料段位址放入ax
mov ds,ax
mov ax,stack ;把棧段位址放入ax
mov ss,ax
mov sp,18h ;設定棧頂指向18h ,18h = 資料段8個字+棧段8個位元組共24位元組換成16進制。
mov ax,4c00h
int 21h
code ends
end start ;end除了通知編譯器程式結束外,還可以通知編譯器程式的入口在什麼地方。在這指明了程式的入口在标号 start 處。