next up previous
Next: 3 変数のコンパイル Up: ソフトウェア特論 講義資料 Scheme コンパイラ処理系 Previous: 1.4 コードの表示

2 仮想計算機

コンパイルによって生成される命令コードは,それが走るマシンを想定してそ のコードを考えますが,ここではスタックマシンを考えます.スタックマシン は,スタックを仲立ちとして変数,条件判断,演算コール,条件ジャンプな どを行う計算機械です.命令コードとして右の表に示すようなものを まず考えることにします.
スタックマシンの命令
オプコード 引数 処理内容
CONST x 定数をスタックに載せる
LVAR i,j iフレームのj番目の局所変数の値をスタックに載せる
GVAR sym symで表される大域変数の値をスタックに載せる
LSET i,j スタックトップの値をiフレームのj番目変数の値とする
GSET sym スタックトップの値をsymで表される大域変数の値とする
POP   スタックトップの値を1つ取り除く
FJUMP label スタックトップの値がnilならば,スタックをpopしてlabel へ飛ぶ
JUMP label labelへ飛ぶ(スタックのpopはしない)
CALL n スタックトップがn個の引数を使う関数であると いうことで,CALLから帰ってくるべき場所をスタックに積んで, 関数を呼ぶ.
FN closure closure をスタックに積む.
ARGS n n個の引数をスタックから評価環境へ取り込む
RETURN   スタックトップにリターンすべき値があり, そのつぎにリターン場所があるとして, プログラムカウンタをそのリターン場所にし,スタックへ リターンすべき値を積み戻す.


generated through LaTeX2HTML. M.Inaba 平成18年5月6日