サブルーチンは、手続き型言語で「サブルーチン」、「プロシージャ」、「関数」、オブジェクト指向言語では「メソッド」とよばれる。
「ビルトインコマンド」は ユーザが定義した
リターンされるとスタックに結果がプッシュされる。
call xxx を見つけると、returnアドレスにcallアドレスの次の値をpopする.
@SP
D=M
@RETURN
M=D+1
label xxx 現在の位置をラベル付けする。 ラベルのスコープはそれが定義された関数内。 xxxは、アルファベット、数字、アンダースコア(_)、ドット(.)、コロン(;)を用いることができる。 数字から始まることは出来ない。
goto xxx 無条件の移動命令 xxxでラベル付けされた場所からプログラムの実行を開始する。 移動先は同じ関数内に限られる。
if-goto xxx 条件付きの移動。 スタックの最上位の値をポップし、その値が0でなければ、xxxでラベル付けされた場所位からプログラムの実行を開始する。その値が0であれば、プログラムの次のコマンドが実行される。 移動先は同じ関数内に限られる。
command segment i | | | function f n n個のローカル変数をもつfという名前の関数を定義。 | | | call f m fという関数を呼ぶ。個々で、m個の引数は呼び出し側によってスタックにプシュ済み。 | return 呼び出し元へリターンする。
push const 10 push const 10 call foo 2
function foo 2
関数が呼ばれるごとにグローバルスタックへ新しいブロックが追加される。 グローバルスタックは以下の4つの要素から構成される。
- 引数
- ポインタ
- ローカル変数
- ワーキングスタック