直接写显存显示字符串

Posted zsl6658

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了直接写显存显示字符串相关的知识,希望对你有一定的参考价值。

                                                            直接写显存显示字符串

    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
 

以上是关于直接写显存显示字符串的主要内容,如果未能解决你的问题,请参考以下文章

NanoPi NEO Air使用十四:FrameBuffer的理解和使用

NanoPi NEO Air使用十四:FrameBuffer的理解和使用

直接打印到文本显存时出现意外输出

显示模式

将后缓冲直接复制到显存

显存与显卡的内存大小有关吗?