簡介 :
編程任務(wù) :
在屏幕中間分別顯示綠色 , 綠底紅色 , 白底藍色的字符串 'Welcome to masm'
代碼 :
assume cs:code,ds:data
; 顯存地址 : B8000H - BFFFFH
; 顯示尺寸 : 80 x 25 個字符
; 其中每一個字符占用兩個字節(jié) , 低地址為 ASCII 碼 , 高地址為屬性
; 也就是說 每一個字符 可以設(shè)置的屬性有 256 種
; 屬性 :
; 是否閃爍 背景色R 背景色G 背景色B 是否高亮 前景色R 前景色G 前景色B
; 因此一個屏幕總共有 80 x 25 = 2000 個字符 , 需要 4000 個字節(jié)來存儲 (約為4K)
; 然后系統(tǒng)的顯存總共是 32K , 也就是說可以儲存 8 個頁面 , 默認顯示第一個頁面
data segment
db 'Hello world', 33 ; 33 是感嘆號的 ASCII 碼
data ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, 0B800H
mov es, ax ; 保存顯存的段地址
mov si, 0000H ; 數(shù)據(jù)段偏移地址
mov di, 0000H ; 顯存偏移地址
mov cx, 000CH ; 設(shè)置循環(huán)次數(shù) , "Hello world!" 長度為 12
print_green:
mov al, ds:[si] ; 讀取數(shù)據(jù)段中的數(shù)據(jù)
mov ah, 00100000B ; 設(shè)置字體的屬性 (黑底綠字)
mov es:[di], ax ; 寫入顯存
inc si ; 數(shù)據(jù)段偏移地址自增 1
add di, 0002H ; 顯存偏移地址自增 2
loop print_green
finish:
mov ax,4cH
int 21H
code ends
end start
總結(jié) :
這里由于時間關(guān)系只實現(xiàn)了向屏幕的起始位置輸出 "Hello world!" 的功能
實驗要求中的別的功能也是相同的原理 , 只需要改變寫入顯存的位置以及字符串的屬性即可
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者