• 汇编语言实验九


    编程:在屏幕中间显示绿色字符串‘welcome to masm!’

    分析:

    在内存地址空间中,B8000H ~ BFFFFH(共32KB)的空间,为 86x25 彩色字符模式的显示缓冲区

    向这段地址空间写入的数据内容,将立即出现在显示器上。

    在 86x25 彩色字符模式下,显示器可以显示 25 行。每行能显示 80 个字符。

    不同于其它内存空间的数据,在显存地址空间中,一个字符信息需要 2 个字节长度来存放。因为在显存中的一个字符信息,不仅包括字符本身,还有字符的前景色、背景色、闪烁、高亮等组合信息,这些信息需要 8 bit 空间来存储。

    所以拥有 32KB 容量的显示缓冲区,一共能存放 16 × 1024 个字符。

    综上:显示器一个屏幕整 =  2000 个字符显示 = 显示缓冲器 4000 个字节 = 显示缓冲区 1 页的字节数

    即显示缓冲区分为 8 页,但是通常情况下,显示第 0 页的内容,即 B8000H ~ B8F9FH 这段内存地址空间将出现在显示器上。

    在显示缓冲区中,偶地址存放字符,基地址存放字符的颜色属性

    代码:

    #  分析:
    #  仔细阅读编程要求,我们不难发现,它无非是要求我们:在屏幕上显示字符串,具体涉及两点:
    #              1)在什么位置显示
    #              2)显示的字符串的属性是什么
    #
    #  
    #  实现:
    #  首先,我们根据材料找到屏幕中间的位置是:段地址:B800h  偏移地址:160*12+30*2 , 以及绿色的属性字节:02h、24h、71h
    #
    #  然后我们先注意两点:
    #          1)对屏幕操作,实际上是对显存缓冲区进行操作,与前面对内存的操作的一样的,要显示字符,我们只要往显存中写入字符数据就可以了
    #          2)在显存缓冲区中,偶地址存放字符,奇地址存放颜色属性
    #          
    #  7     6     5     4     3     2     1     0
    #  BL    R     G     B     I     R     G     B
    #  高亮      前景色          闪烁       背景色
    #  
    #  显示 welcome to masm!  
    #  原本 16 字节, 但是由于要显示在显示上, 所以需要 32 字节来存储
    
    assume cs:code,ds:data
    
    data segment
        db 'welcome to masm!'
    data ends
    
    code segment
    start:
        mov ax,data
        mov ds,ax
        mov si,0
        mov ax,0b800h       ; 汇编语言中数据不能以字母开头
        mov es,ax
        mov di,160*12+30*2  ; 在显示缓冲区第一页, 第一个字符的偏移单元(字节)数
        mov cx,16
    next:
        mov al,[si]
        mov es:[di],al     ; 先向目的地址的低字节空间移动字符本身, 以 al 寄存器做中转
        mov byte ptr es:[di+1],02h    ; 再向目的地址的高字节空间移动字符的显示属性
        inc si
        add di,2
        loop next
    
        mov ah,4ch
        int 21h
    code ends
    end start
  • 相关阅读:
    【Python3爬虫】一次应对JS反调试的记录
    【Python3爬虫】突破反爬之应对前端反调试手段
    学习CSS之如何改变CSS伪元素的样式
    学习CSS之用CSS实现时钟效果
    学习CSS之用CSS绘制一些基本图形
    【Python3爬虫】一次破解JS加密数据的记录
    Linux安装部署Redis(超级详细)
    Linux部署MongoDB
    使用Nginx对.NetCore站点进行反向代理
    Linux部署.NetCore站点 使用Supervisor进行托管部署
  • 原文地址:https://www.cnblogs.com/KKSJS/p/9997854.html
Copyright © 2020-2023  润新知