c - 使用 dos.h 在 TSR 编程中使用 keep(int,int) 函数

标签 c tsr

在学习 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/

相关文章:

c - 动态库找不到静态库

c - __attribute __((constructor))在VC中是否等效?

CRC16-CCITT 结果不正确?

assembly - 帮助在DOS的NASM汇编中编写TSR程序

assembly - 汇编代码的DOS执行

java - 关于java中的tsr

c - 如何检查数组中的相同值?

在C中动态创建链接列表