汇编网首页登录博客注册
tomato的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
友情链接

[2012-02-06 13:50] 【原】第一个显存实验的探讨(1)

  今天我们来探讨一下第二章实验一实验任务的第(4)小题,第一个显存实验的一些问题。

    先把原题目弄上来。

    题目如下:

    (4)向内存从B8100H开始的单元中填写数据,如:
    -e B810:0000 01 01 02 02 03 03 04 04

    请读者先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。

    对于这道题目的探讨我们采用提问的方式。

    问题1:我知道B810:0000这段内存是显存,我输入这段命令之后没发现有什么现象,我用d命令查看的时候显示的结果并不是我刚才写进去的,是不是显存是只读的,不能写进去啊?

    解答:

    对于初学者来说,做这道题目可能会遇到以上这些问题的迷惑,最后,做了一遍不了了之,这样做了一遍跟没做没什么差别,并没有掌握作者提供本题目的意图。

    如果对这道题目没有意识,再加上显示的结果不够明显和没有认真观察显示结果,这三个原因导致没有观察到显示结果,那我告诉你,因为B810:0000是显存地址,输入上面那条命令之后会在屏幕上显示几个图案,如果之前你没有查看到不妨现在再认真查看一下。

    如果在屏幕中查看到这几个图案,那么,我们就可以肯定我们将那些数据写到显存中了,否则,不可能原来没有图案,输入命令之后就有图案了。那么,也可以肯定显存不是只读的,是可以写进去的。

    那为什么写进去了,用d命令查看的时候内容却不是我刚才写进去的那些值呢?

    是因为屏幕中显示的就是显存中的内容,屏幕中的内容一直在改变,说明显存中的内容一直在改变,而事实也是如此,我们在屏幕中输入命令,然后,在屏幕中显示结果,屏幕中显示的内容一直在变,之所以d命令查看的结果跟我们输入的结果不一样,是因为还没等我们查看到我们输入的数据,已经被其它程序中的数据覆盖掉了。

    那我们能够查看到我们输入的数据吗?也就是说我们的数据能否不被其它数据覆盖吗?

    可以,在屏幕数据不被充满的时候,屏幕中还有可以显示的空间,我们的数据就不会被覆盖。当屏幕已经充满,如果再显示数据,就需要向上滚屏,那时候,屏幕中下一行的数据就会将上一行的数据覆盖掉。

    接下来,我们做一下实验。

    查看屏幕中的图案如下:
图
    用d命令查看写入显存位置的数据如下:
图
    屏幕向上滚动,屏幕中的图案不在,显存的内容也不是我们写入的01 01 02 02 03 03 04 04 数据。

    此时屏幕是充满的,如果输入数据就会滚屏,所以,我们的数据会被覆盖。下面我们将屏幕清屏,然后,再向显存中输入数据,再用d命令查看显存中的数据。实验如下:

图

    q命令退出debug,cls命令清空屏幕,按下回车后,屏幕被清空,我们再输入写显存命令,然后用d命令查看显存中的值是否被改变,如下:

图

    从上图我们可以看到,清屏后,屏幕没有充满,也就没有滚屏,数据没有被覆盖,此时,用d命令查看的显存中的数据就是我们之前用e命令写入的数据。这个结果看来是合理的。

    从上面的实验中,我们可以看到,我们向显存中写入数据会显示在屏幕中,显存是可写的,而不是只读的,之所以,我们查看不到我们想要的结果,是因为屏幕是充满的,我们的数据被其它程序中的数据覆盖掉了。要看到正确的结果,可以使用清屏命令清屏后再查看。
评论次数(8)  |  浏览次数(1205)  |  类型(汇编作业) |  收藏此文  | 

[  chinatree   发表于  2012-02-06 14:41  ]

精湛啊,期待后续作品。

[  252152130   发表于  2012-02-08 03:00  ]

麻烦你了特地写了篇博文~
原来如此~~...
还有第三题右侧查看ascii码 我有看~~截图没显示全面而已— —,
的确我在第一次做这题目的时候 如同你说的
   对于初学者来说,做这道题目可能会遇到以上这些问题的迷惑,最后,做了一遍不了了之,这样做了一遍跟没做没什么差别,并没有掌握作者提供本题目的意图。
后来你的评做了第二次+上你这次写的博客 理解了~~监测点3.1 半天没理解 DS=1 H   后来看了论坛里的提问才知道~~

[  zwq   发表于  2012-05-20 23:41  ]

大牛~~~

[  zwq   发表于  2012-05-20 23:43  ]

LZ为什么屏幕被充满之后显示出来的值就不是我们之前改写的01 01 02 02 03 03 04 04呢?是因为屏幕内容改写了还是....

[  tomato   发表于  2012-05-21 00:15  ]

因为屏幕满了之后,就会将原来屏幕中的值覆盖掉,我们再查看那段显存中的值就不再是我们之前写的那个了。

[  fpamc   发表于  2012-05-21 10:31  ]

过来加深一下印象~~O(∩_∩)O~~

[  游客   发表于  2017-03-19 16:36  ]

[  游客   发表于  2018-01-10 23:37  ]

原来如此,以前做的时候也是一跳而过

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码