熊文杰 发表于 2013-4-15 03:14:09

关于汇编语言第二版实验9编程题目的问题

今天看到了第九章的实验,在屏幕中间显示有颜色的字。在看小甲鱼老师的视频前,自己写了一段代码 填充b872:0段得内容,结果发现,这段内容并没有改变,但是确实显示出有颜色的字来了,请问这个是为什么?如图:

1971827035 发表于 2013-4-15 03:14:10

这段内容实际上是已经变化过了的。首先应该明白在80*25彩色字符模式下,显示器可以显示25行,每行80个字符。在显示每个字符的时候,实际上每个字符在es地址段是占用两个字节的,一个用来存放asc码,一个用来存放属性。回到问题上,假设b872:0-b872:1单元显示的是第一行的第一个字符,你在这一时刻屏幕上该位置对应的字符是e,那么该单元所存储的内容就是e的asc码及属性;这时你键入一个命令,当前屏幕向下移动一行,那么此时该位置对应的字符可能是另外一个字符,所以存储的内容会发生变化。你可以在第一个循环中通过将b872:0单元入栈,然后在弹出来,观察其值,来判定它到底是否发生变化

熊文杰 发表于 2013-4-15 03:17:28

按照道理来说的话,第一个应该为77才对啊!(77为‘w’的ascii码)

1971827035 发表于 2013-4-15 16:05:37

相关代码也贴一下把

熊文杰 发表于 2013-4-15 18:04:52

1971827035 发表于 2013-4-15 16:05 static/image/common/back.gif
相关代码也贴一下把

datasg segment
        db 'welcome to masm!'
datasg ends;

codesg segment
        start:
                        mov ax,datasg;
                        mov ds,ax;
                        mov bx,0b872h;内存地址空间中,b800h--bfffh共32kb的空间中,为80*25彩色字符模式的显示缓冲区,在这个地址写数据,写入的内容就会立即显示出现在显示器上
                        mov es,bx;
                        mov bx,0;
                       
                        mov si,0;
                       
                        mov cx,16;
                s:mov al,ds:;
                        mov es:,al;
                       
                        ;
                        mov al,02h
                        mov es:,al
                       
                       
                        add bx,1;
                        add si,2
                        loop s;
                       
        mov ax,4c00h
        int 21h
                  

codesg ends;
end start;

冷心颜 发表于 2013-4-16 14:40:55

强烈支持楼主ing……

熊文杰 发表于 2013-4-16 23:13:54

1971827035 发表于 2013-4-16 10:39 static/image/common/back.gif
这段内容实际上是已经变化过了的。首先应该明白在80*25彩色字符模式下,显示器可以显示25行,每行80个字符。 ...

请问下 这段地址的内容为什么会变呢?我直接mov给 b872:0 这些地址赋值 也没有任何变化。我是不是可以猜测,在这些缓冲区里面赋值之后马上就会在屏幕上作出相应的显示,显示完毕了之后,我输入命令行查看那段区域的时候, 这些缓冲区的数据就会被dos系统(dos默认就是黑底白字)以黑底白色的命令行给填充了。也就是说,给缓冲区一赋值,马上就显示。显示是一个即时(立刻)显示的行为。可以这么说吗?

熊文杰 发表于 2013-4-16 23:16:30

我输入命令的时候,那个绿色的字已经跑到第三行了,也就是说 第12行的数据已经变成了黑底白字了。明白了。
页: [1]
查看完整版本: 关于汇编语言第二版实验9编程题目的问题