実行結果
先に 実行のイメージ。
下にコード本体があります
#VM起動直後のスタック
#レジスタ一式分の領域が確保されている
[0, None, {}, 0, 0, 0]
#レジスタの内訳
#上と順番が違うのでよみづらい 申し訳ない
PC:0 SP:0 A:0 LOCALS:{} parent: None
#レジスタへのアクセッサオブジェクトのアドレス
<__main__.RegisterFrame object at 0x03B5B8D0>#スタックマシンの命令 op_RegAllocによって
#スタック上に新しくレジスタを生成
#更新されたスタックの状態
[
#以前使ってたレジスタの領域
0, None, {}, 0, 0, 0,
#新しく作ったレジスタの領域
0, <__main__.RegisterFrame object at 0x03B5B8D0>, {}, 0, 0, 100]
#新しく作ったレジスタの内訳
#以前のレジスタを示すparentがNoneから変化
#PCレジスタへ100を代入してみた
PC:100 SP:0 A:0 LOCALS:{} parent: <__main__.RegisterFrame object at 0x03B5B8D0>
#レジスタへのアクセッサオブジェクトのアドレスが変化している
<__main__.RegisterFrame object at 0x03B5EE50>#命令 op_RegFreeによって使用中のレジスタを開放
#スタックの状態が戻っている
[0, None, {}, 0, 0, 0]
#PCが0 parentもNone に戻っている。
PC:0 SP:0 A:0 LOCALS:{} parent: None
#レジスタへのアクセッサオブジェクトのアドレスが戻っている
<__main__.RegisterFrame object at 0x03B5B8D0>