呼出規約
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/07/16 03:15 UTC 版)
スタックフレームは以下のようになっている: EP → ローカルスタックSP → ... ローカル変数 ... 引数 ... リターンアドレス(前のPC) 前のEP 動的リンク(前のMP) 静的リンク(外側のプロシージャのMP)MP → 関数のリターン値 プロシージャ呼び出しは次のようになる。まず呼び出しは次の命令で開始される。 mst n ここで、n は入れ子レベルを指定する(Pascalではプロシージャが入れ子になりうることに注意)。この命令はスタックに印をつける。すなわち現在のスタックフレームの上の5要素ぶんを予約し、以前のEP、動的リンク、静的リンクなどを設定する。呼び出し側は必要な引数を計算してプッシュし、次の命令を実行する。 cup n, p これでユーザープロシージャが呼び出される(n は引数の個数、p はプロシージャのアドレス)。この命令はPCをリターンアドレスとしてスタック上にセーブし、そのプロシージャのアドレスを新たなPCとしてセットする。 ユーザープロシージャは次の2つの命令から開始される。 ent 1, i ent 2, j 1番目の命令はSPを MP + i にする。2番目の命令は EP を SP + j にする。従って、i にはローカル変数用の領域サイズを指定し(引数および余分に5要素分も予約する)、j には命令実行でローカルに必要なスタック領域が指定される。メモリ不足が発生していないかはこの時点でチェックされる。 呼び出し側への復帰は次の命令で行われる。 retC Cにはリターン型(上述の基本型 i, r, c, b, a と何も返さない場合の p)が指定される。リターン値は適切なセルに格納される。p 以外の各型のリターンでは、その値がスタックに置かれたまま呼び出し側に復帰する。 ユーザープロシージャの呼び出し(cup)ではなく、標準プロシージャ q を呼び出す場合は次の命令を使用する。 csp q 標準プロシージャとは、Pascalの標準ライブラリのようなもので、例えば readln()("csp rln")、sin()("csp sin")などがある。ただし、eof() はpコードでは1つの命令となっている。
※この「呼出規約」の解説は、「pコードマシン」の解説の一部です。
「呼出規約」を含む「pコードマシン」の記事については、「pコードマシン」の概要を参照ください。
Weblioに収録されているすべての辞書から呼出規約を検索する場合は、下記のリンクをクリックしてください。

- 呼出規約のページへのリンク