;顯示字符就是往顯存里寫進要顯示的東西。每個字符占顯存中兩個字節,低字節是字符的ASCII碼
;高字節是設置所示字符的屬性.每位都定義有顯示屬性,從高位到低位依次是
;閃爍 背景紅 背景綠 背景藍 高亮 前景紅 前景綠 前景藍
assume cs:code,ds:data
data segment
db 'www.csdn.net',0
data ends
code segment
start:mov ax,data
mov ds,ax
mov si,0
mov ax,0b800h ;寫顯存
mov es,ax
mov di,160*12+60 ;顯示字符在屏幕上的位置
s:mov al,[si]
cmp al,0 ;遇到0了顯示就終止
je over
mov byte ptr es:[di],al ;把數據段的字符的ASCII碼傳進顯存
mov byte ptr es:[di].1,89h ;這句設定字符顯示屬性,顏色、背景、閃爍。 ;屬性字節可以不寫
inc si
add di,2 ;每個字符占兩個字節,所以加2
loop s
over:mov ax,4c00h
int 21h
code ends
end start
===========================================================
mov di,160*12+60
第12行第30列,一行80個字符,每個字符2個字節,這樣就可以推出一行160字節。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 名稱: show_str
; 功能: 指定位置顯示字符串
; 參數: dh=行號[0..24]
; dl=列號[0..79]
; cl=color
; ds:si指向字符串首地址
; 返回: 無
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
assume cs:code
data segment
db 'Welcome to masm',0
data ends
code segment
start:
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
over:
mov ax,4c00h
int 21h
show_str:
mov di,8*160+3*2 ;指向指定的行列
mov ax,0b800h
mov es,ax ;顯存地址
s:
mov ah,BYTE ptr [si]
cmp ah,0
je over
mov BYTE ptr es:[di],ah ;寫入字符
inc di
mov BYTE ptr es:[di],cl ;寫入字符屬性
inc di
inc si
jmp short s
code ends
end start
-------------------------------------
這樣自己寫了按照意思寫了一個果然是這樣的。