免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: bleem1998
打印 上一主题 下一主题

关于计算机显示字符的几个问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-06-24 11:26 |只看该作者
1)我觉得是保存在显卡中的。
电脑启动的时候,初始化显卡bios之后,默认显示模式为 0x03 即彩色 80 x 25 模式,显存映射地址 0xb800,每个字符两个字节表示。
此时,有两种途径显示字符,1是0x10中断,2是直接往显卡映射的内存地址 0:0xb800 送数据。
对于第二种途径,比如显示某个浅红色的字符‘a’,就往显存地址放 0x0c41,显卡知道显示方式,知道0x0c是颜色,找颜色寄存器看看,知道要显示‘a’,就找到它的对应在显卡中的点阵数据,最后把各种处理数据给显示器扫描显示。若程序改变显示模式为图像模式(点阵模式),那就得找到这个点阵的地址了,不过它是固定的。当然也可以自己编辑一个点阵数据用采来显示。对于汉字,显卡bios内没有点阵信息的。估计是因为它太多又没有标准。存储 6000个16x16点阵汉字需要 16x16x6000/8=192000个字节,又必须每行16个点来显示双字节字符,和单字节的每行8个点显示办法不一样的,那显卡中的 bios 程序就得变化,太麻烦了。关键是没人搞呀。
所以就是说e文是天生就支持的。你看看 http://www.xujiwei.cn/blog/?id=204 有代码和讲解。
2)通过调用中断,可以改变显示模式为图像模式(点阵模式),这样就可以任意显示了,想要什么形状的就编造什么形状的。只要你有耐心,只是奇形怪状的不通用。这就是点阵字库。
以上是个人的感性认识,改天我贴个刚写好的简单的显示“华”字的电脑引导代码来分析一下。

论坛徽章:
0
12 [报告]
发表于 2007-06-27 19:40 |只看该作者
这个问题在DOS里会涉及到,如果我没有记错的话,找两本DOS底层编程的书可以找到,或者一些比较老的C语言编程大全中也会有一部分程序例子,告诉你怎么用C语言直接写入硬件地址的方法来显示字符。
其实这个涉及到IBM PC机得系统组成原理。Intel CPU在实模式下缺省能够访问1M得地址空间,这1M的地址空间又分为2部分:低于640K这部分是系统的内存空间用于存放程序和中断向量表等等;高于640K的空间用来将BIOS程序,显存等等设备的存储空间映射到这段地址中。
这就是为什么你可以使用直接写内存的方式显示字符的原因。不过这种方式程序可移植性不强。
显卡中显示字符是有字符点阵字库的,我们直接写到显存中的字符是这个字符的 ANSI ASCII码,也即该字符在计算机内的内码,而显卡显示字符时是根据字符的内码输出该字符的点阵到屏幕上(当然,颜色值也是必不可少的)
DOS时代你可以操纵所有的底层硬件,或者主要使用BIOS调用。
至于中文DOS,可能大多数人对汉卡没什么印象了,实际上DOS和BIOS是不认识中文的,最早在CPU性能很差的时代,为了节省CPU资源中国人做出了汉卡,实际上就是把中文点阵字库以及涉及的程序固化在汉卡上插入PC中,然后再在DOS上加一层外壳,修改与字符显示和输入相关的一些DOS调用。这样DOS就可以输入,输出中文了。需要指出的是,中文在PC内存内的表示方式,是该字符的内码(例如GB-2312),而不是字符点阵。到了后来干脆所有这些功能都用软件实现,包括字库也不放在卡上了,这样就出现了中文DOS,由于中文DOS所有的功能是依附于DOS操作系统的,所以它不能脱离底层的DOS操作系统独立存在。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP