ZHCADC4A September 2011 – March 2014
调用本身生成为一个简单的相对于 PC 的分支,用于将控制权转移给被调用者:
B func ; goto func
位移是一个 21 位带符号字偏移量。如果无法到达调用目标,链接器会生成一个蹦床函数,它是一个存根函数,使用绝对寻址、相对于 PC 寻址或 GOT 间接寻址来寻址目标函数。更多有关蹦床函数的信息,请参阅节 5.3。
对于间接调用,目标是一个寄存器:
B reg ; goto address in reg
对于实现调用的分支,TI 工具链使用 CALL 伪指令,它编码为分支,但对调试信息进行批注,以便分析器、调试器或其他分析工具可以将该指令识别为函数调用(请参见节 5.3)。因此,先前的直接调用实际上会在汇编源代码中显示为:
CALL func ; encodes as B func
C64+ ISA 有一个复合指令 CALLP,它单独实现一个调用。CALLP 集成了以下步骤:
使用 CALLP 的调用只需:
CALLP func, B3