7.4 実装 / 非公式訳

pp.134-135

7.4 実装

(略)

たとえば典型的なフォンノイマン型マシンをターゲットプラットフォームとしましょう。この場合、ホストRAMに含まれる一部のメモリーブロックを使ってVMのスタックを表現することができます。このRAMブロックの先頭を固定ベースアドレスとすれば、最後尾はスタックの伸び縮みに応じて変化します。このように、固定されたstackBaseアドレスを設定しておけば、スタックの末尾値のすぐ次のRAMアドレスを保持するたった1つの変数stack pointer (SP)の変化を追跡するだけでスタックの管理ができます。スタックを初期化するときはSPstackBaseにセットします。初期化してしまえば、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コマンドが扱えるようになります。

(略)