(这里非母语人士,我为模糊的标题道歉)
我正在使用编译器套件sdcc (3.7.0) 为TI-82 STATS计算器编译 C 代码。它的处理器是Z80。操作系统提供了几个与设备交互的函数,例如内存地址 0x4755 处的 ClrLcdScreen(),它不接受任何参数并且不返回任何内容。
要在汇编中“声明”并调用该函数,我可以执行以下操作:
ClrLcdScreen equ 0x4755 ; Assembly equivalent of '#define ClrLcdScreen 0x4755'
call ClrLcdScreen ; Call the function at memory address 0x4755
现在我不确定如何告诉 SDCC 在内存地址 0x4755 处有一个我想调用的函数。我怎样才能只写声明并让 SDCC 知道在运行时可以在哪里找到定义?
这就是我想象的解决方案的样子(以下代码不是真实的,它只是为了展示我需要的东西而编造的):
__at__ 0x4755 void ClrLcdScreen(); // Function declaration
int main() {
ClrLcdScreen();
}
我尝试使用内联汇编调用该函数:
#define ClrLcdFull() __asm__("call 0x4755")
int main() {
ClrLcdFull();
}
这有效,但不是我想要的。使用该代码,我自己管理调用,而 SDCC 根本不知道我正在调用一个函数。