ZHCADC4A September 2011 – March 2014
许多函数会保存和恢复所有被调用者保存的寄存器,而执行此操作的代码相当大。不必在每个函数的逻辑程序和收尾程序中都包含执行此操作的代码,而是可以调用运行时库中的函数。这些函数使用特殊的调用约定来避免损坏将要保存的寄存器。保存所有被调用者保存的寄存器的调用如下所示:
CALLP __C6000_push_rts, A3 ; CALLP puts the return address in A3
恢复它们的代码是:
CALLP __C6000_pop_rts, A3 ; A3 is unused
; Returns to the location saved from B3 by __C6000_push_rts
在调用 _ _C6000_push_rts 之前,堆栈如下所示:
_ _C6000_push_rts 会存储所有被调用者保存的寄存器,从而得到: