;显示字符就是往显存里写进要显示的东西。每个字符占显存中两个字节,低字节是字符的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
-------------------------------------
这样自己写了按照意思写了一个果然是这样的。