几个月来,我一直在尝试为我的 Ti-89 构建一个自制的 B 交叉编译器,最终我想生成我的计算器执行的程序集。该语言是“B”,因为只有一种类型是整数/指针。我不明白如何在这个平台上实现函数指针。我正在考虑通过以下方式实现函数指针:
- 使用立即值存储第一条指令的地址
- 使用程序计数器和偏移量推导第一条指令的地址
- 仅存储偏移量并计算跳转时第一条指令的地址。
第一种方法肯定行不通,因为 Ti-89 上的汇编程序在执行之前会被复制到 RAM 中。我无法在编译时知道函数的位置。此外,根据第 24 页的 Ti-89/Ti-92 Plus 开发人员指南,“ASM 程序可能会在堆垃圾收集期间移动。指向覆盖系统代码的指针将变得无效。” 这意味着第二种方法也不一定有效,因为堆垃圾收集可能发生在计算第一条指令的地址之后。假设它所说的程序移动是正确的,这可能会导致整个函数移动。第三种方法将在特定情况下起作用,但问题是我不一定知道该函数将在汇编程序中的哪个位置被调用。
TIGCC 允许使用函数指针,那么它们到底是如何实现它们的呢?有什么我想念的吗?
链接: