【问题标题】:TSR Program to change case of characters on screen in windows/dosTSR 程序在 windows/dos 中更改屏幕上字符的大小写
【发布时间】:2012-10-10 18:01:16
【问题描述】:

我想知道如何用C改变屏幕上字符的字母。这是一个使用dos.h头文件的TSR程序。

【问题讨论】:

  • 你的意思是大写转小写,反之亦然?
  • 为什么要为 DOS 编写 TSR?
  • 这是一个在windows上编写的程序。我们使用的是turbo c

标签: c tsr


【解决方案1】:

我可能能够从我记得的早期本科生中提供部分帮助。

在 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
  • 其实写作的由来就是记住赋值 char far *p = 0xB8000000L;远指针是四个字节,因此地址被指定为相当于平面 32 位。虽然我同意概念上的 0xB800:0 在文本中更好。我会编辑 - 谢谢
猜你喜欢
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多