仮想計算機で用いられるスタックマシンが次の命令を有するとする。
push a スタックにデータ a をプッシュする。
dup スタックの最上部のデータを複製してスタックにプッシュする。
exch スタックの最上部の2つのデータの位置を交換する。
add スタックから2つのデータをポップし、その和をスタックにプッシュする。
sub スタックから2つのデータをポップし、その差をスタックにプッシュする。
(スタック最上部2番目のデータから最上部のデータを引く。)
mul スタックから2つのデータをポップし、その積をスタックにプッシュする。
このとき、次のように記述されたプログラムが最終的にスタックに残す結果は、どの式を処理したものと同じか。
push a
push b
sub
dup
push 1
add
exch
push 2
Sub
mul
@ (a-b+2)*1
A (a-b+1)*(a-b-2)
B (a-b-1)*(-2)
C (a-b+2)*(a-b-1)
D (a-b)*(1-2)
A
便宜上、スタックの状態を左から順に表記する。
push a ・・・ a
push b ・・・ b, a
sub ・・・ a-b
dup ・・・ a-b, a-b
push 1 ・・・ 1, a-b, a-b
add ・・・ a-b+1, a-b
exch ・・・ a-b, a-b+1
push 2 ・・・ 2, a-b, a-b+1
sub ・・・ a-b-2, a-b+1
mul ・・・ (a-b+1)*(a-b-2)
W−9 | 目次 | W−11 |