7.4 実装 / 非公式訳
pp.134-135
7.4 実装
(略)
たとえば典型的なフォンノイマン型マシンをターゲットプラットフォームとしましょう。この場合、ホストRAMに含まれる一部のメモリーブロックを使ってVMのスタックを表現することができます。このRAMブロックの先頭を固定ベースアドレスとすれば、最後尾はスタックの伸び縮みに応じて変化します。このように、固定されたstackBase
アドレスを設定しておけば、スタックの末尾値のすぐ次のRAMアドレスを保持するたった1つの変数stack pointer
(SP
)の変化を追跡するだけでスタックの管理ができます。スタックを初期化するときはSP
をstackBase
にセットします。初期化してしまえば、push x
コマンドは
RAM[SP] = x SP++
のように実装できます。またpop x
コマンドは
SP-- x = RAM[SP]
のように実装できます。
ホストプラットフォームがHackコンピューターであるとして、スタックベースをHack RAMの256番地に固定することにしたとしましょう。この場合、VMトランスレーターは、SP = 256
という処理を実現するため、まっさきに下のようなアセンブリコードを生成します。
@256 // 即値256を D=A // @SP // M=D // RAM[SP]に格納する。
そのあとは、RAM[SP++]=x
という操作を実現するアセンブリコードを生成すればpush x
コマンドが扱えるようになるし、x=RAM[--SP]
という操作を実現するアセンブリコードを生成すればpop x
コマンドが扱えるようになります。
(略)