zoukankan      html  css  js  c++  java
  • 《汇编程序》王爽实验9的解法(显示的问题)

    下面题目是别人打的,省略一些东西。我的环境是windows xp

    实验9 根据材料编程
      在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串“welcome to masm!”。
      材料:
        内存地址空间中,B8000H~BFFFFH共32K的空间,为80*25彩色字符模式的显示缓冲区。向这个地址空间写入数据,写入的内容将立即出现在显示器上。
        在80*25彩色字符模式下,显示器可以显示25行,每行80个字符,每个字符可以有256种属性(背景色、前景色、闪烁、高亮等组合信息)。
        这样,一个字符在显示缓冲区中就要占两个字节,分别存放字符的ASCII码(低位)和属性(高位)。80*25模式下,一屏的内容在显示缓冲区中共占4000个字节。
        显示缓冲区分为8页,每页4KB,显示器可以显示任意一页内容。一般情况下,显示第0页内容。也就是通常情况下,B8000~B8F9F中的4000个字节将出现在屏幕上。
        属性字节的格式:
        7        6        5        4        3        2        1        0
        BL(闪烁) R(背景)  G(背景)  B(背景)  I(高亮)  R(前景)  G(前景)  B(前景)

    这个题目倒是很容易,没什么问题,我的解法是

    assume cs:cseg,ds:data
    data segment
        db 'welcome to masm!'
    data ends
    cseg segment
    start:
        mov ax,data
        mov ds,ax
        mov ax,0B800H
        mov es,ax
        mov bx,0f00h
        mov si,0
        mov cx,16
    s:mov al,[si]
        mov es:[bx],al
        mov al,02h
        mov es:[bx+1],al
        add bx,2
        inc si
        loop s

        
    ;系统调用
        mov ax,4c00H
        INT 21H
    cseg ends

    end start

    但是,我调试的时候确不能达到我的显示目的,而且每次mov es:[bx],al之后es:[bx]并没有被修改。后来才发现原来这个彩色字符显示缓冲区的第一行就是从命令行的窗口的第一行开始算起的,也就是说我调试的时候每次一执行指令,屏幕就会向上滚动,也就相当于清屏了,所以我的显示就被清掉了。

    于是我将要显示的字符定位在25行,这样就可以看到效果了。

  • 相关阅读:
    Unit Vector Compression
    PT, BPT, VCM
    Major Performance Impacts

    SAH Benchmarks Of Natural History Museum Scene
    图标变换图片---轮播切换
    弹出层--弹框
    Git for windows 中文乱码解决方案
    在CentOS上安装Git
    Git 的基本配置
  • 原文地址:https://www.cnblogs.com/cxjchen/p/2955625.html
Copyright © 2011-2022 走看看