【发布时间】:2012-10-10 18:01:16
【问题描述】:
我想知道如何用C改变屏幕上字符的字母。这是一个使用dos.h头文件的TSR程序。
【问题讨论】:
-
你的意思是大写转小写,反之亦然?
-
为什么要为 DOS 编写 TSR?
-
这是一个在windows上编写的程序。我们使用的是turbo c
我想知道如何用C改变屏幕上字符的字母。这是一个使用dos.h头文件的TSR程序。
【问题讨论】:
我可能能够从我记得的早期本科生中提供部分帮助。
在 DOS 中,地址 0xB8000000(0xB800:0 作为段:在 cmets 中正确指出的偏移量)是文本模式显存的起始地址(0xA8000000 是用于图形)。写入该区域的任何内容都直接复制到VGA卡。现在屏幕上的每个字符都由两个字节组成。第一个字节是 ascii 字符,第二个是颜色。
因此,您可以有效地在 16 位 c 中获取一个远指针(因为普通的近指针不会这样做)并将其分配给上述地址。然后假设您的屏幕尺寸 (25*80) 或任何 * 2 是填充屏幕的单字节地址总数。
我记得我用上面写过一个普通的 printf 函数。
回到你的问题,你必须编写代码来循环从上面的地址到屏幕大小的所有偶数地址。偶数地址,因为奇数代表颜色。在那里它检查分配的字符是否是有效的 ascii 并根据需要添加或减去,例如'A' + 32 会得到'a' 等等。
关于您的上述程序何时执行此操作的问题仍然存在。我相信你可以在 dos.h 中有一些中断或类似的事情,每次更改任何屏幕字符时都会触发。但是这部分在我的记忆中不是很清楚。
看看这是否适合你。
【讨论】:
0xB8000000 中有太多的零,要么是错误的,要么是令人困惑的。实模式地址为0xB800:0 (segment:offset)。它对应的物理地址是0xB8000。