直接写显存显示字符串

                                                            直接写显存显示字符串

    80*25彩色字模式的显示显存在内存中的地址为B8000h~BFFFH,工32k.向这个地址写入的内容立即显示在屏幕上边.在80*25彩色字模式下共可以显示35行,每行80字符,每个字符有256种属性.每个字符在显存中占两个字节,第一个字节是字符的ASCII码.第二字节是字符的属性.显存分为8页,第一页的地址为B8000H~B8F9FH.每页4000字节,依次类推是其它的页面,通常情况显示第一页的内容.也可以显示其它页的内容.第一页的第一行偏移为000~09f(80字符占160个字节)一次类推是其它行.在一行中00~01对应显示器第一列.依次是其它列.属性字节的格式是:

                                    7                  6                    5                   4                3                        2                    1                        0

含义:                         BL                 R                   G                   B                I                         R                     G                      B

                              闪烁                                  背景颜色                           高亮                                         前景颜色

 

下边是直接写显存的汇编代码:

data segment
        db 'Welcome to masm!',0
data ends
 
code segment
        assume cs:code,ds:data
start:
        mov dh,1              ;dh 装行号(范围:1--25)
        mov dl,1              ;dl 装列号 ( 范围:1--80)[注:每超过80等于行号自动加1]
        mov cl,0cah           ;cl 中存放颜色属性(0cah为红底高亮闪烁绿色属性)
        mov ax,data
        mov ds,ax
        mov si,0
 
        call show_str
       
        mov ax,4c00h
        int 21h
       
show_str :   ; 显示字符串的子程序[定义开始]
        push cx
        push si
        mov al,0A0h
        dec dh          ; 行号在显存中下标从0开始,所以减1
        mul dh
        mov bx,ax
        mov al,2
        mul dl
        sub ax,2       ; 列号在显存中下标从0开始,又因为偶字节存放字符,所以减2
        add bx,ax      ; 此时bx中存放的是行与列号的偏移地址
        mov ax,0B800h
        mov es,ax      ;es 中存放的是显存的第0页(共0--7页)的起始的段地址
        mov di,0
        mov al,cl
        mov ch,0
s:      mov cl,ds:[si]
        jcxz ok
        mov es:[bx+di],cl       ; 地址存放字符
        mov es:[bx+di+1],al     ; 奇地址存放字符的颜色属性
        inc si
        add di,2
        jmp short s
ok:     pop si
        pop cx
        ret    ; 显示字符串的子程序[定义结束]
 
code ends
end start
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值