1. 程式人生 > >彙編——在螢幕中間顯示不同顏色的字串

彙編——在螢幕中間顯示不同顏色的字串

程式設計:參考教材實驗9,在螢幕中間分別顯示綠色、綠底紅色、白底藍色的字串’welcome to masm’。
一、分析
8086CPU中,80x25彩色字元模式顯示緩衝區的結構:記憶體地址空間中,B8000H~BFFFFH共32kb的空間,為80x25彩色字元模式的顯示緩衝區。向這個地址空間寫入資料,寫入的內容將立即出現在顯示器上。顯示器可以顯示25行,每行80個字元,每個字元可以有256種屬性。
顯示緩衝區分8頁,一般情況下,顯示第0頁的內容。也就是通常情況下,B8000H~B8F9FH中的4000個位元組的內容將出現在顯示器上。要出現在中間,即出現在11、12、13行,開始的對應的地址分別為6E0H、6E0H+0A0H、6E0H+0A0H+0A0H。 而每列160個位元組,要是顯示在中間,則字串第12行首地址為710H。接下來,就要把這些字元顯示在顯示器了。對了,這裡應該注意的一個地方是,在顯示緩衝區,偶地址存放字元,奇地址存放字元的顏色屬性,所以在尋找列的中間位置的時候要考慮到。160-16*2=96。96/2=48.
二、程式碼:
assume cs:code
data segment
db ‘Welcome to masm!’
data ends
code segment
start: mov ax,data
mov es,ax
mov ax,0b800h;基地址
mov ds,ax
mov bx,0710h;設定字串首地址

    mov cx,16;總共16個字元,所以迴圈16次
    mov si,0
    s:mov ax,es:[si];取出字元
       mov ah,02h;設定屬性為綠色
       mov word ptr ds:[bx],ax;把字元輸入到需要顯示的地址

       mov ah,24h;設定屬性為綠底紅色、
       mov word ptr ds:[bx+0a0h],ax

       mov ah,71h;設定屬性為白底藍色
       mov word ptr ds:[bx+0a0h+0a0h],ax

       inc si
       add bx,2

       loop s
       mov ax,4c00h
       int 21h
code ends
end start

三、截圖這裡寫圖片描述