直接写显存 0b800h 显示 字符串

来源:互联网 发布:淘宝网 编辑:程序博客网 时间:2024/05/22 00:15

 

;显示字符就是往显存里写进要显示的东西。每个字符占显存中两个字节,低字节是字符的;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

 

原创粉丝点击