組合語言實驗九
阿新 • • 發佈:2018-11-22
程式設計:在螢幕中間顯示綠色字串‘welcome to masm!’
分析:
在記憶體地址空間中,B8000H ~ BFFFFH(共32KB)的空間,為 86x25 彩色字元模式的顯示緩衝區。
向這段地址空間寫入的資料內容,將立即出現在顯示器上。
在 86x25 彩色字元模式下,顯示器可以顯示 25 行。每行能顯示 80 個字元。
不同於其它記憶體空間的資料,在視訊記憶體地址空間中,一個字元資訊需要 2 個位元組長度來存放。因為在視訊記憶體中的一個字元資訊,不僅包括字元本身,還有字元的前景色、背景色、閃爍、高亮等組合資訊,這些資訊需要 8 bit 空間來儲存。
所以擁有 32KB 容量的顯示緩衝區,一共能存放 16 × 1024 個字元。
綜上:顯示器一個螢幕整 = 2000 個字元顯示 = 顯示緩衝器 4000 個位元組 = 顯示緩衝區 1 頁的位元組數
即顯示緩衝區分為 8 頁,但是通常情況下,顯示第 0 頁的內容,即 B8000H ~ B8F9FH 這段記憶體地址空間將出現在顯示器上。
在顯示緩衝區中,偶地址存放字元,基地址存放字元的顏色屬性。
程式碼:
# 分析: # 仔細閱讀程式設計要求,我們不難發現,它無非是要求我們:在螢幕上顯示字串,具體涉及兩點: # 1)在什麼位置顯示 # 2)顯示的字串的屬性是什麼 # # # 實現: # 首先,我們根據材料找到螢幕中間的位置是:段地址:B800h 偏移地址:160*12+30*2 , 以及綠色的屬性位元組:02h、24h、71h # # 然後我們先注意兩點: # 1)對螢幕操作,實際上是對視訊記憶體緩衝區進行操作,與前面對記憶體的操作的一樣的,要顯示字元,我們只要往視訊記憶體中寫入字元資料就可以了 # 2)在視訊記憶體緩衝區中,偶地址存放字元,奇地址存放顏色屬性 # # 7 6 5 4 3 2 1 0 # BL R G B I R G B # 高亮 前景色 閃爍 背景色 # # 顯示 welcome to masm! # 原本16 位元組, 但是由於要顯示在顯示上, 所以需要 32 位元組來儲存 assume cs:code,ds:data data segment db 'welcome to masm!' data ends code segment start: mov ax,data mov ds,ax mov si,0 mov ax,0b800h ; 組合語言中資料不能以字母開頭 mov es,ax mov di,160*12+30*2 ; 在顯示緩衝區第一頁, 第一個字元的偏移單元(位元組)數 mov cx,16 next: mov al,[si] mov es:[di],al ; 先向目的地址的低位元組空間移動字元本身, 以 al 暫存器做中轉 mov byte ptr es:[di+1],02h ; 再向目的地址的高位元組空間移動字元的顯示屬性 inc si add di,2 loop next mov ah,4ch int 21h code ends end start