- 论坛徽章:
- 0
|
这个问题在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操作系统独立存在。 |
|