アセンブラ関数からC言語関数を呼び出すときの注意点について説明します。
CC-RLは「スタック・ポインタ(SP)が,常にスタック・フレームの最下位アドレスを指している」ことを想定したコードを出力します。そのため,アセンブラ関数からC言語関数へ分岐する前に,スタック領域中の未使用領域の上位アドレスを指すようにSPを設定してください。これは下位アドレスの方向にスタック・フレームが取られるためです。
CC-RLはC言語関数呼び出しの前後において,一部のレジスタを除き,レジスタの値が同一であることを保証しません 。そのため,保持しなくてはならない値をレジスタに割り当てたままにしないでください。
CC-RLは「関数の戻り先アドレスは“スタック先頭”に格納される」ことを想定したコードを生成します。C言語関数へ分岐するとき,スタック先頭に関数の戻り先アドレスを格納する必要あります。