关键字'far'是什么意思?

时间:2015-05-23 08:38:39

标签: keyword pascal procedure

我正在阅读一些Pascal代码来调试硬件上的问题。我对Pascal并不熟悉,但用google搜索看起来似乎并不太难。

但是,我遇到了这个程序定义:

procedure RS232ConfigTask; far;
begin
    RS232Config.Init;
    RS232Config.Process;
end;

'far'关键字是什么意思?

我试着查一查。我在GNU Pascal网站上发现了这句话:

  

far指令可以附加到过程或函数标题,但GPC会忽略它。它只适用于Borland的兼容性。 (由于GNU编译器提供了一个平坦的内存模型,near和far指针之间的区别是无效的。)

我查找了近远点指针,发现它与分段内存模型有关,并在其他段中引用内存。

好。

这不是指针。那你为什么要把程序标记为“远”?

我注意到程序的调用方式如下:

procedure Init;
begin
    CreateTask(@RS232ConfigTask, 4096, 'Config 232');
    CreateTask(@RS485ConfigTask, 4096, 'Config 485');
end;

如果有帮助的话。

2 个答案:

答案 0 :(得分:2)

用作过程指令,far表示必须使用远程调用指令调用子例程,该远程调用指令修改代码段和指令指针。这也意味着调用指令将远指针(4个字节,段和偏移)推送到堆栈上。此外,为了返回调用者,子例程使用far ret指令,该指令期望将远指针作为返回地址推入堆栈。

对于Turbo Pascal,以下经验法则适用:从单元导出的子程序隐式使用如上所述的远程调用约定。其他子程序使用近调用约定(仅通过call / ret修改的偏移量)。为了覆盖此行为,引入了nearfar过程指令。

答案 1 :(得分:0)

'Far'是一个旧的扩展,它意味着 - “这是一个指针,需要能够指向任何地址,而不仅仅是与使用它的代码在同一段中的东西”。

如果您想了解更多相关信息,可以查看维基百科页面并阅读相关内容。 Wikipedia page