;显示字符就是往显存里写进要显示的东西。每个字符占显存中两个字节,低字节是字符的;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
在80X25彩色字符模式下,显示器显示25行,每行80个字符。
每个字符占2个字节,所以160*12=80*2*12就是在第12行,再加60,也就是在该行的第30个字符位置开始。
;==========================================================================
;文件名:exp10a.asm
;目的:完成并测试在指定的位置,用指定的颜色,显示一个用0结束的字符串的子程序
;==========================================================================
assume cs:code,ds:data
data segment
str db '^_^Welcome to masm! fengge 嘀嘀嘀^_^',0
data ends
code segment
start:
mov ax,data
mov ds,ax
mov dh,12
mov dl,30
mov cl,10001010b
mov si,0
call show_str
mov ax,4c00h
int 21h
;==============================================================
;名称:show_str
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),
; (cl)=颜色,ds:si指向字符串的首地址
;返回:无
;==============================================================
show_str:
push dx
push si
push di
push cx
push ax
mov ax,0b800h
mov es,ax
mov ax,160
mul dh
mov dh,0
add ax,dx
add ax,dx
sub ax,2
mov di,ax
mov ah,cl
output:
mov ch,ds:[si]
mov cl,0
jcxz ok
mov byte ptr es:[di],ch
mov byte ptr es:[di+1],ah
inc si
inc di
inc di
jmp short output
ok:
pop ax
pop cx
pop di
pop si
pop dx
ret
code ends
end start