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