技術士試験ナビ

技術士試験対策・テキスト・過去問題解説を発信します。

技術士第一次試験専門科目 平成28年度 Ⅲ-1

 仮想的なスタックマシンが次の命令をもつとする。

push a   データaをスタックに積む。

dup       スタックの最上部のデータを複製してスタックに積む。

swap     スタックの最上部の2つのデータの位置を交換する。

add       スタックの最上部の2つのデータをスタックから取り除き,その2つのデータの和をスタックに積む。

sub       スタックの最上部のデータaとその直下のデータbをスタックから取り除き,b−aをスタックに積む。

cmp x   スタックの最上部の2つのデータを取り除き,その2つのデータが等しくなければ,ラベルxへプログラムの制御を移す。

 このスタックマシン上で,次のプログラムが終了したときに,スタックの最上部にある値はどれか。

          push 5
    L1: dup
     push 1
     sub
     dup
     push 1
     cmp L1
    L2: add
     swар
     dup
     push 5
     cmp L2
     add

 ① 8  ② 10 ③ 12 ④ 15 ⑤ 20

 

答え

      ④

解説

 順に命令を実行すると,次のようになります。

push 5 → 5
dup →  5 5
push 1 → 1 5 5
sub → 4 5
dup → 4 4 5
push 1 → 1 4 4 5
cmp L1 → 4 5(取り除いた1と4が異なるのでL1へ戻る)
dup → 4 4 5
push 1 → 1 4 4 5
sub → 3 4 5
dup → 3 3 4 5
push 1 → 1 3 3 4 5
cmp L1 → 3 4 5(取り除いた1と3が異なるのでL1へ戻る)
dup → 3 3 4 5
push 1 → 1 3 3 4 5
sub → 2 3 4 5
dup → 2 2 3 4 5
push 1 → 1 2 2 3 4 5
cmp L1 → 2 3 4 5(取り除いた1と2が異なるのでL1へ戻る)
dup → 2 2 3 4 5
push 1 → 1 2 2 3 4 5
sub → 1 2 3 4 5
dup → 1 1 2 3 4 5
push 1 → 1 1 1 2 3 4 5
cmp L1 → 1 2 3 4 5(取り除いた1と1が等しいので次へ進む)
add → 3 3 4 5
swар → 3 3 4 5
dup → 3 3 3 4 5
push 5 → 5 3 3 3 4 5
cmp L2 → 3 3 4 5(取り除いた5と3が異なるのでL2へ戻る)
add → 6 4 5
swap → 4 6 5
dup → 4 4 6 5
push 5 → 5 4 4 6 5
cmp L2 → 4 6 5(取り除いた5と4が異なるのでL2へ戻る)
add → 10 5
swap → 5 10
dup → 5 5 10
push 5 → 5 5 5 10
cmp L2 → 5 10(取り除いた5と5が等しいので次へ進む)
add → 15

よって,スタックには15が残る(最上部にある)ことがわかります。