スタック・ポインタ(SP)には2の倍数のアドレスが設定されます。
スタック・ポインタは常にスタック・フレームの最下位アドレスを指します。したがって,SPのアドレスよりも小さい領域に格納された値は保証されません。
関数の呼び出し時に呼び出し元関数で割り当てられたスタック領域は,関数の呼び出しからリターンした時に呼び出し元関数で解放されます。したがって,SPは呼び出された関数の入口と出口でリターン・アドレス格納領域を指します。
関数 f(Callee側関数)が,関数g(Caller側関数)から呼び出された場合の,関数fから見た双方のスタック・フレームの内容を以下に示します。
レジスタに割り付けない仮引数を設定する領域です。この領域に設定されたデータは2バイト境界にアラインされます。すべての仮引数をレジスタに割り付けるとこの領域のサイズが0となります。
リターン・アドレスを割り付ける領域です。領域のサイズは4バイト固定で,アドレスはfarアドレスとして設定されます。
関数fがローカル変数を格納するために使用するスタック領域です。
関数fがほかの関数を呼び出す際に,スタックに割り付ける実引数を設定する領域です。呼び出しに要する実引数を全てレジスタに割り付けるなら,この領域のサイズは0となります。