我正在从游戏0x10c实施an assemblinker for the 16-bit DCPU。
有人向我建议的一种技术是使用“叠加,就像当天的Turbo Pascal”一样,以便在运行时交换代码。
我得到了基本的想法(链接覆盖符号到同一个内存,在ref之前交换),但是它们的实现是什么?
这是编译器在引用之前插入的函数吗?这是陷阱吗?叠加层的数据是存储在叠加层的位置,还是存放在某个大表中?它运作良好,还是经常破裂?是否有一个接口用于组装以与重叠的Pascal链接(反之亦然),或者它是否不兼容?
谷歌基本上没有给我任何信息(除了它是现代Pascal编译器的禁止)。而且,我只是,就像,他们年轻五岁,在他们当前的时候曾经不需要它们。答案 0 :(得分:4)
每个单元的跳转表,其元素在未加载时指向陷阱(int 3F)。但是对于较旧的Turbo Pascal / Borland Pascal版本(5/6),较新的版本也支持(286)保护模式,他们可能会采用另一种方案。
此方案意味着在加载覆盖时,不再发生陷阱开销。
我在参考资料中找到了这个链接: The Slithy Tove 。还有其他很好的细节,比如如何处理跨多个叠加的调用链。