平成28年度 技術士第一次試験問題【専門科目】
【16】情報工学部門
V−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
  swap
  dup
  push 5
  cmp L2
  add

 @ 8  A 10  B 12  C 15  D 20



【正解】 C
スタックは後入れ先出し (LIFO = Last In First Out)であることに注意する。
(便宜上 スタックの状態を左から順に表記する
push 5 ・・・5
dub ・・・5, 5
push 1 ・・・ 1, 5, 5
sub ・・・4, 5
dup ・・・4, 4, 5
push 1 ・・・1, 4, 4, 5
cmp ・・・ 1, 4を取り除き、等しくないので L1へ。スタックは 4, 5

dup ・・・4, 4, 5
push 1 ・・・1, 4, 4, 5
sub ・・・3, 4, 5
dub ・・・3, 3, 4, 5
push 1 ・・・1, 3, 3, 4, 5
cmp ・・・ 1, 3を取り除き、等しくないので L1へ。スタックは 3, 4, 5

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 ・・・ 1, 2を取り除き、等しくないので L1へ。スタックは 2, 3, 4, 5

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 ・・・ 1, 2を取り除き、等しいので次のステップへ。スタックは 1, 2, 3, 4, 5

add ・・・3, 3, 4, 5
swap ・・・3, 3, 4, 5
dup ・・・3, 3, 3, 4, 5
push 5 ・・・5, 3, 3, 3, 4, 5
cmp ・・・5, 3を取り除き、等しくないので L2へ。スタックは 3, 3, 4, 5

add ・・・6, 4, 5
swap ・・・4, 6, 5
dup 4, 4, 6, 5
push 5 ・・・5, 4, 4, 6, 5
cmp ・・・5, 4を取り除き、等しくないので L2へ。スタックは 4, 6, 5

add ・・・10, 5
swap ・・・5, 10
dup ・・・ 5, 5, 10
push 5 ・・・5, 5, 5, 10
cmp ・・・5, 5を取り除き、等しいので次のステップへ。スタックは 5, 10

add
15

よって、スタックの最上部は
15
1〜5までの和を求めるスタックマシンである。


EXCELのマクロのご相談なら ファーストマクロ 



目次 V−2
ファーストマクロ TOPページ