在屏幕中間分別顯示不同顏色的字符串“Jackill Love You”
在內存地址空間,B8000H~BFFFFH共32K空間,在此空間寫入數據會顯示在顯示器上;在80*25彩色字符模式下,顯示器可以顯示25行,80個字符,一個字符占兩個字節,低位為ASCII碼,高位為字節存儲字符的屬性。
00~01/9E~9F單元分別對應第一列和第80列;字符屬性略-察看9.9;
例如在0行0列顯示黑底綠色字符A,緩沖區裡的內容應該為:
B800:0000 ->41(ASCII) 02(屬性)
////////////////////////////////////////////////////////////////////
assume cs:code,ds:data,ss:stack
data segment
db 'Jackill Love You'
;定義要顯示的字符串(共16字節)
db 02h,24h,71h
;定義三種顏色屬性
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,10h
mov bx,0
mov di,0
mov ax,0b872h
;算出屏幕第12行中間的顯存的段起始位置放入ax中
mov cx,3
;外循環為3次,因為要顯示三個字符串
s3: push cx
;三個進棧操作為外循環s3保存相關寄存器的值
push ax
;以防止它們的值在內循環中被破壞
push di
mov es,ax
;此時es為屏幕第12行中間的顯存的段起始位置
mov si,0
mov di,0
mov cx,10h
;內循環為10h次,因為一個字符串中含10h個字節
s1: mov al,ds:[bx+si]
mov es:[bx+di],al
inc si
add di,2
loop s1 ;此循環實現偶地址中存放字符
mov si,1
;si的值設為1,從而為在顯存奇地址中存放字符的顏色屬性做准備
pop di
;將di的值恢復成進入內循環之前的時候的值
mov al,ds:10h[bx+di]
;取顏色屬性[源OP尋址方式:相對基址變址]