2008年7月28日月曜日

gotoを使用したサブルーチン:下書き

スクリプトを単にダダダーッと並べても
動作がよくわからないかもしれないので
下書きをテキスト形式で表現してみます

01:call(s_a)
02:*l_a
03:stop
04:
05:*s_a
06:mes "a"
07:call(s_b)
08:*l_b
09:call(s_c)
10:*l_c
11:back
12:
13:*s_b
14:mes "b"
15:back
16:
17:*s_c
18:mes "c"
19:back

1.
01:call(s_a)
02:*l_a
;*s_aにジャンプし
;*l_aをスタックに積む
;call命令の後ろにラベル

-stackの内容
0
*l_a
prev:-1

現在地 0

2.
05:*s_a
06:mes "a"
07:call(s_b)
08:*l_b
;*s_bにジャンプし
;*l_bをスタックに積む
;call命令の後ろにラベル

-stackの内容
0
*l_a
prev-1

1
*l_b
prev0
現在地 1

3.
13:*s_b
14:mes "b"
15:back
;*l_bをスタックから取り出す
;スタックを上の位置に移動(ここでは0)
;現在地の値をprevの値に書き換える
;取り出した*l_bへジャンプ

-stackの内容
0
*l_a
prev-1
現在地 0

4.
09:call(s_c)
10:*l_c
;*s_cにジャンプし
;*l_cをスタックに積む
;call命令の後ろにラベル

-stackの内容
0
*l_a
prev-1

1
*l_c
prev0
現在地 1

5.
17:*s_c
18:mes "c"
19:back
;*l_cをスタックから取り出す
;スタックを上の位置に移動(ここでは0)
;現在地の値をprevの値に書き換える
;取り出した*l_cへジャンプ

-stackの内容
0
*l_a
prev-1
現在地 0

6.
11:back
;*l_aをスタックから取り出す
;スタックを上の位置に移動(ここでは-1)
;現在地の値をprevの値に書き換える
;取り出した*l_aへジャンプ

-stackの内容
現在地 -1

0 件のコメント: