在学习 tsr 编程时,我看到了某些我无法理解的代码的使用..
示例割让部分是(在 c 中): (请解释粗体部分)
#include "dos.h"
#include"stdio.h"
void interrupt our();
void interrupt (*prev)();
char far *scr=(char far*)0xB8000000L;
int ticks;
unsigned char color;
main()
{
prev=getvect(8); // <<<<<
setvect(8,our); // <<<<<
keep(0,10000); // <<<<<
}
最佳答案
如果您阅读我在 TSR 上发布的类似问题的答案,您将部分理解此代码
How to write a TSR which changes case of characters
这里最重要的是
远指针:由于 16 位 DOS 使用段偏移寻址方案,因此普通的近指针无法访问超出其分配段的 64K 内存。您必须阅读详细信息才能理解它。
视频内存地址:这个B8000000就是你需要远指针的地址。该地址的特殊之处在于,从该位置开始,字节(等于屏幕分辨率* 2)被直接复制到显存中。
因此,如果您在间接寻址后将一个字符分配给指针地址,它将被打印在屏幕上
类似的东西
char * far p = 0xB8000000;
*p = 'a'; // this would actually print a on screen at left top
向前循环到达屏幕的其余部分。
yashwant kanetkar 写了一本 c 书,其中对此有很多引用。我记得很多年前我在读本科时就用过它。
其余的只是在 dos.h 中索引 api。如果您不明白,为什么不仔细阅读他们的描述并返回这里?
关于c - 使用 dos.h 在 TSR 编程中使用 keep(int,int) 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826029/