在为TSR工作时,为什么我们需要远指针?

时间:2012-06-20 13:08:08

标签: c dos legacy

我已经看到很多时候使用远指针来为TSR工作。为什么这些TSR程序需要远程指针以及为什么这些被认为对一般机器有害。

3 个答案:

答案 0 :(得分:2)

远指针由两部分组成,即段选择器和偏移量。

一般分段寻址的一个问题(仅适用于16位实模式,与DOS计算机使用的32位保护模式不同)是物理内存中的单个位置可以从多个'远指针访问”。 (这就是为什么在正常的16位编码中不鼓励的原因)

维基百科提供的示例有效。

char far *p =(char far *)0x55550005;
char far *q =(char far *)0x53332225;

两者都指向地址0x55555。 资源: http://en.wikipedia.org/wiki/Far_pointer

当程序执行时,并不总是需要指定段偏移量(它可以使用near指针),这是因为它正在使用的内存段已被选中。

关于TSR程序,当必须将控制权转移回原始程序时,执行完全不同的程序。原始程序无法知道当前选择的段是什么,因此必须提供包含段和偏移的完整“远指针”。 http://en.wikipedia.org/wiki/Terminate_and_Stay_Resident

另请注意 http://en.wikipedia.org/wiki/X86_memory_segmentation

答案 1 :(得分:1)

由于TSR程序必须共享不保证保留在单个段中的地址空间,因此需要远地址(即包含segmant:address)坐标来标识指针。这有点历史,因为据我所知,它只是在DOS下才有意义。

答案 2 :(得分:0)

谁说他们有害?他们只需要比其他人更多的空间,因此在过去是灰心丧气的。此外,必须更改段寄存器才能使用它们。

如果你详细说明它们在TSR中的使用位置,我或许可以说出更多信息。

相关问题