9.1.1 スタックに関する規則

(1)

スタックポインタ

スタックポインタの指すアドレスよりも下位(0番地の方向)のスタック領域に有効なデータを格納してはいけません。スタックポインタより下位アドレスに格納されたデータは、割り込み処理で破壊される可能性があります。

(2)

スタックフレームの割り付け、解放

関数呼び出しが行われた時点(JSRまたはBSR命令の実行直後)では、スタックポインタは呼び出した関数側で使用したスタックの最下位アドレスを指しています。このスタックポインタの指している領域より上位アドレスのデータの割り付け、設定は呼び出す側の関数の役目です。

関数のリターン時は、呼び出された関数で確保した領域を解放してから、通常RTS命令を用いて呼び出した関数へ返ります。これより上位アドレスの領域(リターン値アドレスおよび引数の領域)は、呼び出した側の関数で解放します。

図 9.1は、関数呼び出し直後のスタックフレームの状態を説明したものです。

図 9.1

スタックフレームの割り付け、解放に関する規則