zoukankan      html  css  js  c++  java
  • 汇编操作显存

        80*25彩色字符模式显示缓冲区(以下简称显示缓冲区)的结构:

      内存地址中,b8000h-bffffh共32kb空间,为80*25彩色字符模式的显示缓冲区。向这个地址空间写入数据,写入的内容会立即出现在显示器上。

      在80*25模式下,显示器可以显示25行,每行显示80个字符,每个字符有256中属性(背景色,前景色等)。这样,一个字符在显示缓冲区就要占2个字节,分别存字符的ascii码和属性。在80*25下,一屏的内容在显示缓冲区中共占4000个字节。

     显示缓冲区分为8页,每页4kb(约等于4000b),显示器可以显示任意一页的内容。一般情况下,显示第0页的内容,也就是说通常情况下,b8000h~b8f9fh中的4000个字节的内容将出现在显示器上。

     在一页显示缓冲区中:

    偏移000~09f 对应显示器上的第一行(80个字符占160个字节)

    偏移0a0~13f对应显示器上的第二行

    依此类推,可以知道,偏移f00~f9f对应显示器上的第25行

       在一行中,一个字符占2个字节,低位字节存储字符的ascii,高位存储字符的属性。一行共有80个字符,占160个字节

     00~01 单元对应显示器上的第1列

     02~03 单元对应显示器上的第2列

     04~05 单元对应显示器上的第3列

      可以看出,在显示缓冲区里,偶地址存储字符,奇地址存储字符的属性。

    属性字节的格式:

    7  6  5  4  3  2  1  0

    BL7闪烁  rgb背景(654)I(高亮3)    rgb(前景色 210)

    可以按位设置属性字节,从而配出各种不同的前景色和背景色。

    在emu8086下遇到问题:mov byte ptr al,[si]

    编译错误:第一个操作数未定义

    改成 al,[si]没问题

    但是在masmplus 下 mov BYTE ptr al,[si]

    这段程序是没问题的。

    在emu8086下

    mov byte ptr al,[si]  有问题
    mov byte ptr es:[di],al  没问题

    让程序暂停:

    mov ah, 0
    int 16h
    这是键盘输入中断,相当于按任意键继续。

    题目:屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串‘welcome to masm!’

    assume ds:data,cs:code
    
    data segment
            db 'welcome to masm!' 
    data ends
    
    code segment
    
    start: mov ax,data
    mov ds,ax
    
    mov ax,0b800h
    mov es,ax
    
    mov si,0
    mov di,10*160+80    ;第十行中间
    mov cx,16
    s1: mov al,ds:[si]
    mov ah,00000010B    ;绿色
    mov es:[di],ax
    inc si
    inc di
    inc di
    loop s1
    
    mov si,0
    mov di,11*160+80    ;第十一行中间
    mov cx,16
    s2: mov al,ds:[si]
    mov ah,00100100B    ;绿底红色
    mov es:[di],ax
    inc si
    inc di
    inc di
    loop s2
    
    mov si,0
    mov di,12*160+80    ;第十二行中间
    mov cx,16
    s3: mov al,ds:[si]
    mov ah,01110001B    ;白底蓝色
    mov es:[di],ax
    inc si
    inc di
    inc di
    loop s3
    
    
    mov ax,4c00h
    int 21h              ;如果要看到完整的显示请输入:“-g 4c”,即立即运行到此条指令
    
    code ends
    
    end start

    -g命令是运行程序命令

     G;从CS:IP指向的指令开始执行程序,直到程序结束或遇到INT 3。

      G 断点1[,断点2,…断点10];从CS:IP指向的指令开始执行程序,直到遇到断点。

    -g 4c 运行到语句mov ax,4c00h,下一条语句为int 21h

      

  • 相关阅读:
    js中定时器2
    js中定时器之一
    js中的Event对象
    hdu 1041(递推,大数)
    hdu 1130,hdu 1131(卡特兰数,大数)
    hdu 2044-2050 递推专题
    hdu 3078(LCA的在线算法)
    hdu 1806(线段树区间合并)
    hdu 3308(线段树区间合并)
    poj 2452(RMQ+二分查找)
  • 原文地址:https://www.cnblogs.com/youxin/p/2512329.html
Copyright © 2011-2022 走看看