アセンブラ 過去問の解き方(平成28年度春期)

設問1のa、b

問われている内容は?

分岐先(LOOP12LOOP13)・分岐条件(JUMPJMIJPLJZE)は?

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
IEND    LD   GR3,=9
        LD   GR0,=#7FFF       ;最大値
L00P12  LD   GR2,GR0
        LD   GR4,=9
L00P13  CPA  GR2,T0TAL,GR4
        JPL  CHANGE
        JUMP NEXT
CHANGE  LD   GR2,T0TAL,GR4   ;GR2←新たなタイムの最小値
        LD   GR1,GR4           ;GR1←そのチーム番号
NEXT    SUBA GR4,=1
        [  a  ]
        SRL  GR2,3             ;平均タイム
        CALL 0UTPUT
        ST   GR0,T0TAL,GR1     ;処理済みとして最大値を設定
        SUBA GR3,=1
        [  b  ]

JMI  LOOP12
JMI  LOOP13
JPL LOOP12
JPL LOOP13
JUMP LOOP12
JUMP LOOP13
JZE LOOP12
JZE LOOP13

分岐先と分岐条件は?

[  a  ][  b  ]に、「JUMP」が入ると、[  a  ][  b  ]の次の行が実施されなくなるので、「JUMP」は除外されます。

LOOP13へ分岐する選択肢は、「イ JMI  LOOP13」「エ JPL LOOP13」「イ JZE LOOP13」が残ります。
LOOP12へ分岐する選択肢は、「ア JMI  LOOP12」「ウ JPL LOOP12」「キ JZE LOOP12」が残ります。

[  a  ]の分岐先および分岐条件は?

[  a  ]は、前行(「SUBA GR4,=1」)の演算結果により分岐していますので、GR4の用途を確認します。
行番号11で初期値9(9チーム)を設定し、行番号171ずつ減算しています。

[  a  ]の分岐先は、行番号12LOOP13)と考えられます。
9チーム分の処理を行うので、GR4が正の間ループを繰り返します。
よって、正解は「JPL LOOP13」となります。

[  b  ]の分岐先は?

 [  b  ]は、前行(「SUBA GR3,=1」)の演算結果により分岐していますので、GR3の用途を確認します。
行番号8で初期値9(9チーム)を設定し、行番号221ずつ減算しています。

[  b  ]の分岐先は、行番号10LOOP12)と考えられます。
9チーム分の処理を行うので、GR3が正の間ループを繰り返します。
よって、正解は「JPL LOOP12」となります。

講評

設問1では、abの正答率は平均的で、おおむね理解されていた。

設問2のc


問われている内容は?

プログラムの実行結果

20
        CALL 0UTPUT

チーム番号の昇順に出力される
チーム番号の降順に出力される
どのチームが先に出力されるかは時々である



プログラムをトレースする

1
2
3
4
5
6
7
RACE    START
L00P11  CALL INPUT ;GR0(0:OK,-1:EOF), GR1:チーム番号, GR2:タイム
        LD   GR0,GR0 ;EOF?
        JMI  IEND
        ADDA GR2,T0TAL,GR1 ;GR2←GR2+TOTAL[GR1]
        ST   GR2,T0TAL,GR1 ;TOTAL[GR1]←GR2
        JUMP L00P11

チーム毎の合計タイムをTOTAL(配列)に格納
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
IEND    LD   GR3,=9    ;LOOPの初期値設定
        LD   GR0,=#7FFF;最小値の初期値(7FFFより小さい値検出したら更新)
L00P12  LD   GR2,GR0  ;GR2=GR0=検出済最小値
        LD   GR4,=9    ;LOOPの初期値設定
L00P13  CPA  GR2,T0TAL,GR4 ; 検出済最小値とチーム別合計値を比較
        JPL  CHANGE    ;チームの合計値の方が小さいなら最小値更新
        JUMP NEXT      ;次のチーム
CHANGE  LD   GR2,T0TAL,GR4   ;GR2←新たなタイムの最小値
        LD   GR1,GR4           ;GR1←そのチーム番号
NEXT    SUBA GR4,=1
        [JPL  LOOP13]
        SRL  GR2,3           ;平均タイム
        CALL 0UTPUT         ;最小値から順に出力
        ST   GR0,T0TAL,GR1 ;最小値を取り出したチームの合計値に
        SUBA GR3,=1         ;処理済みとして最大値(#7FFF)を設定
        [JPL  LOOP12]
        RET
T0TAL   DC 0,0,0,0,0,0,0,0,0,0 ;(チーム数+1)個の領域
        END

全チームの合計値を9周チェック
   全チームの合計値をNo.9No.1へと順にチェック
      順に検索し小さい方のタイムを記録
   全チームチェック終了
   得られた最も小さいタイムを出力
   最も小さいタイムを#7FFFで上書きして消す
9つのチームタイム出力まで継続

昇順って?

図2の出力結果は、昇順に出力された結果であると記載されている。

時間が同じである場合、行番号15~行番号16が実行されないので、チーム番号が大きい方が先に出力される。大きい方が先に出力されるので、「イ チーム番号の降順に出力される」が正解となります。

講評

設問2の正答率は低く、あまり理解されていなかった。アと誤って解答した受験者が多く見受けられた。領域を後ろから検査しているので、チーム番号の降順に出力されることに気がつけば、正答できた。

設問3のd


問われている内容は?

分岐先(LOOP21LOOP22)・分岐条件(JUMPJMIJPLJZE)は?

7
8
9
10
11
12
13
14
        LD   GR5,=3          ;ループ回数
L00P21  LD   GR6,DIVIS0R,GR4 ;GR6←除数
        LD   GR7,=0          ;GR7←
L00P22  CPA  GR2,GR6
        JMI  SETTIME
        SUBA GR2,GR6
        ADDA GR7,=1
        [  d  ]

JMI  LOOP21
JMI  LOOP22
JPL  LOOP21
JUMP LOOP21
JUMP LOOP22
JZE  LOOP22

[  d  ]の分岐先および分岐条件は?

[  d  ]は、前行(「ADDA GR7,=1」)の演算結果により分岐していますので、GR7の用途を確認します。
行番号9で初期値0を設定し、行番号131ずつ加算しています。

演算結果は常に正なので、JMI,JPL,JZEの命令は不適です。
「エ JUMP LOOP21」「オ JUMP LOOP22」のいずれかとなります。
初期値は行番号9で設定しているので、行番号10に分岐する「オ JUMP LOOP22」が正解となります。

講評

設問3では、deの正答率は平均的で、おおむね理解されていた。

設問3のd


問われている内容は?

分岐先(LOOP21LOOP22)・分岐条件(JUMPJMIJPLJZE)は?

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        LD   GR5,=3          ;ループ回数
L00P21  LD   GR6,DIVIS0R,GR4 ;GR6←除数
        LD   GR7,=0          ;GR7←
L00P22  CPA  GR2,GR6
        JMI  SETTIME
        SUBA GR2,GR6
        ADDA GR7,=1
        [  d  ]
SETTIME 0R   GR7,=#0030
        ST   GR7,0,GR3
        ADDA GR4,=1
        ADDA GR3,=1
        SUBA GR5,=1
        [  e  ]
        0R   GR2,=#0030

JMI  LOOP21
JPL  LOOP21
JPL  LOOP22
JUMP LOOP22
JZE  LOOP21
JZE  LOOP22

[  e  ]の分岐先および分岐条件は?

[  e  ]は、前行(「SUBA GR5,=1」)の演算結果により分岐していますので、GR5の用途を確認します。
行番号7で初期値3を設定し、行番号191ずつ減算しています。

JUMP命令ですと行番号21が実行されなくなるので除外されます。

初めて[ e ]が実行された時に、分岐したいので、分岐条件は「JPL」に絞り込まれます。
「イ JPL  LOOP21」「ウ JPL  LOOP22」のいずれかとなります。

初期値は行番号7で設定しているので、行番号8に分岐する「イ JPL  LOOP21」が正解となります。

講評

設問3では、deの正答率は平均的で、おおむね理解されていた。

設問4


問われている内容は?

分岐先(LOOP21LOOP22)・分岐条件(JUMPJMIJPLJZE)は?

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        LD   GR5,=3          ;ループ回数
L00P21  LD   GR6,DIVIS0R,GR4 ;GR6←除数
        LD   GR7,=0          ;GR7←
L00P22  CPA  GR2,GR6
        JMI  SETTIME
        SUBA GR2,GR6
        ADDA GR7,=1
        [JUMP LOOP22]
SETTIME 0R   GR7,=#0030
        ST   GR7,0,GR3
        ADDA GR4,=1
        ADDA GR3,=1
        SUBA GR5,=1
        [JPL  LOOP21]
        0R   GR2,=#0030

7
2
7
0
8

9
17
20
270
299

DIVISORの構造は?

行番号8で除数が格納されたテーブル(DIVISOR)をアクセスしています。
除数が格納されたテーブルには、6006010が格納されています。

2708」は、「2×6007×600×10+「余り8」を意味します。

除算回数は、2709となります。正解は「9」となります。

講評

設問4の正答率は低く、あまり理解されていなかった。イ又はウと誤って解答した受験者が見受けられた。
2708のうちの、27を求めるためには、2+7=9回実行する必要があることに気がつけば、正答できた。



0 件のコメント:

コメントを投稿

基本情報技術者試験 アセンブラ(CASL) 原稿 20210529

  基本情報技術者試験 アセンブラ(CASL) 簡単に5割 平成21年春期,平成21年秋期 平成21春期 平成21秋期 平成22春期 平成22秋期 平成21春期 概要 解き方 設問1-a 設問1-b 設問1-c 設問2-d...