天天看點

彙編語言-[bx]和loop指令和多個段

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 處。
           

繼續閱讀