C 在windows/dos中更改屏幕上字符大小写的TSR程序

C 在windows/dos中更改屏幕上字符大小写的TSR程序,c,tsr,C,Tsr,我想知道如何使用C更改屏幕上字符的字母。这是一个使用dos.h头文件的TSR程序。我可能会从我记得的早期本科课程中得到部分帮助 在DOS中,地址0xB8000000(0xB800:0作为段:偏移量在注释中正确指出)是文本模式视频内存的起始地址(0xA8000000是图形内存的起始地址)。写入此区域的任何内容都会直接复制到vga卡。现在屏幕上的每个字符都由两个字节组成。第一个字节是ascii字符,第二个字节是颜色 因此,有效地,您可以在16位c中获取一个远指针(因为普通的近指针不行),并将其分配给

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

我可能会从我记得的早期本科课程中得到部分帮助

在DOS中,地址0xB8000000(0xB800:0作为段:偏移量在注释中正确指出)是文本模式视频内存的起始地址(0xA8000000是图形内存的起始地址)。写入此区域的任何内容都会直接复制到vga卡。现在屏幕上的每个字符都由两个字节组成。第一个字节是ascii字符,第二个字节是颜色

因此,有效地,您可以在16位c中获取一个远指针(因为普通的近指针不行),并将其分配给上面的地址。然后假设您的屏幕大小(25*80)或任何*2是填充屏幕的单字节地址总数

我记得用上面的代码编写了一个与普通printf函数等价的函数

回到您的问题,您必须编写代码,从上面的地址到屏幕大小循环遍历所有偶数地址。偶数地址,因为奇数表示颜色。在那里,它会检查指定的字符是否是有效的ascii码,并根据需要进行加减,例如“A”+32将得到“A”等

问题仍然是关于你们的上述程序何时执行此操作。我相信在dos.h中可以有一些中断或类似的东西,每当任何屏幕字符被更改时都会触发。但这部分在我的记忆中不是很清楚


看看这是否适合你。

你是说从大写到小写,反之亦然?你为什么要为DOS编写TSR?这是一个在windows上编写的程序。。我们使用的turbo c
0xB8000000
中的零太多,要么错误,要么令人困惑。实模式地址为
0xB800:0
(段:偏移量)。它对应的物理地址是
0xB8000
。实际上,它的写入来源是记住赋值字符far*p=0xb800000l;远指针是四个字节,因此地址被指定为等同于平面32位。虽然我同意文本中的概念0xB800:0更好。我会编辑的-谢谢