鱼C论坛

 找回密码
 立即注册
查看: 2426|回复: 7

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

[复制链接]
发表于 2013-4-15 03:14:09 | 显示全部楼层 |阅读模式
1鱼币
今天看到了第九章的实验,在屏幕中间显示有颜色的字。在看小甲鱼老师的视频前,自己写了一段代码 填充b872:0段得内容,结果发现,这段内容并没有改变,但是确实显示出有颜色的字来了,请问这个是为什么?如图:

实验9截图

实验9截图

最佳答案

查看完整内容

这段内容实际上是已经变化过了的。首先应该明白在80*25彩色字符模式下,显示器可以显示25行,每行80个字符。在显示每个字符的时候,实际上每个字符在es地址段是占用两个字节的,一个用来存放asc码,一个用来存放属性。回到问题上,假设b872:0-b872:1单元显示的是第一行的第一个字符,你在这一时刻屏幕上该位置对应的字符是e,那么该单元所存储的内容就是e的asc码及属性;这时你键入一个命令,当前屏幕向下移动一行,那么此时该位置 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-15 03:14:10 | 显示全部楼层
这段内容实际上是已经变化过了的。首先应该明白在80*25彩色字符模式下,显示器可以显示25行,每行80个字符。在显示每个字符的时候,实际上每个字符在es地址段是占用两个字节的,一个用来存放asc码,一个用来存放属性。回到问题上,假设b872:0-b872:1单元显示的是第一行的第一个字符,你在这一时刻屏幕上该位置对应的字符是e,那么该单元所存储的内容就是e的asc码及属性;这时你键入一个命令,当前屏幕向下移动一行,那么此时该位置对应的字符可能是另外一个字符,所以存储的内容会发生变化。你可以在第一个循环中通过将b872:0单元入栈,然后在弹出来,观察其值,来判定它到底是否发生变化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-15 03:17:28 | 显示全部楼层
按照道理来说的话,第一个应该为77才对啊!  (77为‘w’的ascii码)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-15 16:05:37 | 显示全部楼层
相关代码也贴一下把
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-15 18:04:52 | 显示全部楼层

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:[bx];
                        mov es:[si],al;
                       
                        ;
                        mov al,02h
                        mov es:[si+1],al
                       
                       
                        add bx,1;
                        add si,2
                        loop s;
                       
        mov ax,4c00h
        int 21h
                  

codesg ends;
end start;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-16 14:40:55 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-16 23:13:54 | 显示全部楼层
1971827035 发表于 2013-4-16 10:39
这段内容实际上是已经变化过了的。首先应该明白在80*25彩色字符模式下,显示器可以显示25行,每行80个字符。 ...

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

使用道具 举报

 楼主| 发表于 2013-4-16 23:16:30 | 显示全部楼层
我输入命令的时候,那个绿色的字已经跑到第三行了,也就是说 第12行的数据已经变成了黑底白字了。明白了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 20:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表