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

設問1のa


問われている内容は?

一致時に「JZE  FOUND」で分岐する命令はどれか?

12
13
14
15
LP    LD   GR7,GR4
      AND  GR7,GR6
      [  a  ]
      JZE  FOUND      ;一致あり

AND GR7,GR2 
OR GR7,GR2
SLL GR7,0,GR2
SRL GR7,0,GR2
XOR GR7,GR2

一致を確認する方法

比較で使用できる命令には、以下の3種類があります。
l  CPA/CPL
l  SUBA/SUBL
l  XOR
選択肢に存在する比較命令は、「XOR GR7,GR2」です。
一致したデータ格納されている汎用レジスタ同士をXOR演算すると0になり、JZEで分岐できます。

講評

設問1の正答率は平均的で、おおむね理解されていた。
aでは、アと誤って解答した受験者が見受けられた。
二つのレジスタの内容一致をどのようにして判定するかが理解できれば、正答できた。


設問1のb


問われている内容は?

分岐先(NEXTFOUND)・分岐条件(JMIJOVJPL)は?

12
15
17
18
19
20
21
22
23
24
26
LP    LD   GR7,GR4
      JZE  FOUND      ;一致あり
      JMI  FIN        ;一致なし
      SLL  GR4,1      1ビット左シフト
      SLL  GR5,1
      [  b  ]
      JUMP LP
NEXT  OR   GR4,=#0001
      JUMP LP
FOUND SUBA GR3,GR1   ;pの算出
FIN   RPOP

JMI FOUND
JMI NEXT
JOV FOUND
JOV NEXT
JPL FOUND
JPL NEXT

分岐先は?

分岐先を問う問題では、分岐元のないラベルがないかを捜します。
NEXTに分岐する分岐命令が存在しません。
行番号21が「JUMP  LP」ですので、“NEXT”への分岐は必須となります。

分岐条件は?

プログラムのトレースが必要です。
一旦、他の設問の解答を優先した後、プログラムをトレースします。

プログラム1のトレース

プログラムをトレースして、コメントを追記します。
βのビット長を4としてトレースします)



1
2
3
4
5
6
7
8
;IN GR1:αのデータ格納アドレス,GR2:β,GR3:βのビット長
;OUT GR0:一致ビット位置,非検出時-1
BSRH  START
      RPUSH
      LD   GR0,=-1    ;復帰値初期化
      LD   GR6,=#FFFF ;マスク作成
      SRL  GR6,0,GR3  ;GR6 #FFFF -> #0FFF
      XOR  GR6,=#FFFF ;GR6 #0FFF -> #F000
      LD   GR4,0,GR1  ;GR4αの上位語
      LD   GR5,1,GR1  ;GR5αの下位語
                       ;αをGR4GR5に格納
9
10
11
      LD   GR1,=32    ;GR1←32
      SUBA GR1,GR3    ;GR132-4 (GR34が設定と仮定)
      LD   GR3,GR1    ;GR3←GR1 GR1=GR3=28
12
13
14
15
LP    LD   GR7,GR4    ;GR7αの上位語
      AND  GR7,GR6    ;GR7αの上位語 and #F000
      [  a  ]
      JZE  FOUND      ;一致あり

16
17
      ;不一致
      SUBA GR1,=1    ;GR1←32-1
      JMI  FIN        ;一致なし 32bitのシフト終了
18
19
20
21
22
23
      SLL  GR4,1      の上位語を1ビット左シフト
      SLL  GR5,1      の下位語を1ビット左シフト
      [  b  ]
      JUMP LP        の上位語の最下位1ビットを無操作
NEXT  OR   GR4,=#0001 の上位語の最下位1ビットをON
      JUMP LP
24
25
26
27
28
FOUND SUBA GR3,GR1   ;pの算出
      LD   GR0,GR3
FIN   RPOP
      RET
      END

分岐条件は?

行番号7~行番号8で、32ビットのαをGR4GR5に分割格納しています。
行番号18~行番号19で、α全体を1ビット左シフトしています。
上位と下位は連続したデータですので、下位からあふれたビットを上位の最下位ビットに反映する必要があります。
あふれが発生したかどうかを認識できる分岐条件は、“JOV”となりますので、正解は、「JOV NEXT」となります。

講評

講評なし

設問2


問われている内容は?

命令の置き換え

4
5
6
      LD   GR6,=#FFFF ;マスク作成
      SRL  GR6,0,GR3  ;if GR3=4, then GR6=#0FFF.
      XOR  GR6,=#FFFF ;GR6=#F000



      LD   GR6,=#8000
      [     ]

SLL GR6,-1,GR3
SLL GR6,0,GR3
SRA GR6,-1,GR3
SRA GR6,0,GR3
SRL GR6,-1,GR3
SRL GR6,0,GR3

試してみる

行番号4~行番号6において、実際にトレースしてみます。

GR34が設定されている場合、GR6には“#F000”が設定されます。
置き換えた命令で同じ結果が得られるのは、“#8000”を右に(GR3-1)回算術シフトする「SRA GR6,-1,GR3」が正解となります。

講評

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

設問3のc


問われている内容は?

GR2を更新する適した命令は?

29
30
31
32
ONL2  [  c  ]
      SUBA GR2,GR3    ;GR2←p-16
      LAD  GR1,1,GR1  ;操作対象を2語目にして,
      CALL S1         ;2語目の処理

ADDL GR2,GR7
LD GR2,=0
LD GR2,=16
LD GR2,=32 
SUBA GR2,GR7

プログラムのトレースが必要です。
一旦、他の設問の解答を優先した後、プログラムをトレースします。

プログラム2のトレース

プログラムをトレースして、コメントを追記します。
ONL2に分岐する箇所だけに着目してトレースします。

1
2
3


4
5
6
7
8
9
10
11
12
13

14
15
16
17
BREP  START
      RPUSH
      CALL BSRH  ;IN GR1:αのデータ格納アドレス
                  ;   ,GR2:β, GR3:βのビット長
                  ;OUT GR0:一致ビット位置,非検出時-1
      LD   GR2,GR0 ;GR2 ←GR0(一致ビット位置)
      JMI  FIN   ;非検出時,FIN
      LD   GR6,=#FFFF ;マスク作成
      SRL  GR6,0,GR3  ;ビット長分右にシフト
      XOR  GR6,=#FFFF ;シフトして0挿入された箇所を反転
      LD   GR7,GR3    ;GR7←GR3(βのビット長)
      LD   GR3,=16
      SUBA GR3,GR2    ;GR3←16 – p  (p=一致ビット位置)
      JMI  ONL2 ;2語目の途中で一致
      JZE  ONL2 ;2語目先頭で一致
      ;1語目で一致
      CPA  GR3,GR7    ;(16 -p)nの比較
      JMI  NEXT       ;2語にまたがる処理
      JUMP ONL1   ;一致する部分ビット列が1語目だけのとき
NEXT  LD   GR5,GR4    とマスクを退避
27
28
ONL1  CALL Sl     ;1語目先頭で一致 IN:GR2一致ビット位置
      JUMP FIN
29
30
31
32
ONL2  [  c  ]
      SUBA GR2,GR3    ;GR2←p-16 = 0 – (16-p)
      LAD  GR1,1,GR1  ;操作対象を2語目にして,
      CALL S1         ;2語目の処理
35
36
37
38
39
40
41
42
S1    SRL  GR4,0,GR2 の調整 GR2:一致ビット位置
      SRL  GR6,0,GR2 ;マスクの調整
S2    LD   GR2,0,GR1 ;操作対象語の取出し
      XOR  GR6,=#FFFF
      AND  GR2,GR6
      [  d  ]
      ST   GR2,0,GR1
      RET

関数S1は、GR2にビット位置が設定され呼び出されます。
2語目に一致データがある場合、BSRH で検出されたビット位置から1語目の16ビットを差し引いた値が設定され呼び出されます。

BSRH で検出されたビット位置-16」は、「0(16BSRH で検出されたビット位置)」で計算できます。

GR2BSRH で検出されたビット位置-16
   = 0(16BSRH で検出されたビット位置)

講評

設問3の正答率は低く、あまり理解されていなかった。
cでは、ア又はウと誤って解答した受験者が見受けられた。
cの次の行を実行した後でGR2の内容が"p-16"になることに気がつけば、正答できた。

設問3のd


問われている内容は?

GR2を更新する適した命令は?

35
36
37
38
39
40
41
42
S1    SRL  GR4,0,GR2 の調整 GR2:一致ビット位置
      SRL  GR6,0,GR2 ;マスクの調整
S2    LD   GR2,0,GR1 ;操作対象語の取出し
      XOR  GR6,=#FFFF
      AND  GR2,GR6
      [  d  ]
      ST   GR2,0,GR1
      RET

AND GR2,GR4
OR GR2,GR4
SLL GR2,0,GR4
SRL GR2,0,GR4
XOR GR2,=#FFFF

プログラムのトレースが必要です。
一旦、他の設問の解答を優先した後、プログラムをトレースします。

プログラム2のトレース

プログラムをトレースして、コメントを追記します。
ビット長を4、検出ビット位置が8(or 24)α12341234γA(1010)2としてトレースします。

6
7
8
      LD   GR6,=#FFFF ;GR6=#FFFF
      SRL  GR6,0,GR3  ;GR6=#0FFF(右にシフト)
      XOR  GR6,=#FFFF ;GR6=#F000(反転)
35
36
S1    SRL  GR4,0,GR2 ;GR4=#0A00 (#A000をシフト)
      SRL  GR6,0,GR2 ;GR6=#0F00 (#F000をシフト)
37
38
39
40
41
42
S2    LD   GR2,0,GR1 ;GR2=#1234
      XOR  GR6,=#FFFF ;GR6=#F0FF
      AND  GR2,GR6    ;GR2=#1034
      [  d  ]
      ST   GR2,0,GR1  ;GR2=#1A34
      RET

上記のトレースで、行番号39時のGR2の値が行番号41GR2になるには、「OR GR2,GR4」が正解となります。

講評

dでは、ウ又はオと誤って解答した受験者が見受けられた。
dの次の行でGR2の内容を格納していることから、最終的にGR2の内容がどのように構成されるのかを理解し、その過程を追跡できれば、正答できた。

設問4


問われている内容は?

具体的事例でトレースせよ?

α

β
n
γ
#FFF3 #7FFF
1111 1111 1111 0011  0111 1111 1111 1111
                   11  011
5
                   11  110

#0003
#OOO7
#80OO
#C000
#EOOO
#F000

プログラム2のトレース

プログラムをトレースして、コメントを追記します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BREP  START
      RPUSH
      CALL BSRH  ;GR2=(11011)2, GR3=5, GR0:14
      LD   GR2,GR0 ;GR2=GR0=14
      JMI  FIN   ;非検出時,FIN
      LD   GR6,=#FFFF ;GR6=#FFFF
      SRL  GR6,0,GR3  ;GR6=#07FF(5bit右にシフト)
      XOR  GR6,=#FFFF ;GR6=#F800(反転)
      LD   GR7,GR3    ;GR7=GR3=5
      LD   GR3,=16    ;GR3=16
      SUBA GR3,GR2    ;GR3=16–14=2
      JMI  ONL2       ;2語目の途中で一致
      JZE  ONL2       ;2語目先頭で一致
      CPA  GR3,GR7    ;GR3=2 GR7=5
      JMI  NEXT       ;2語にまたがる処理
17
18
19
20
21
22
23
NEXT  LD   GR5,GR4    ;GR5=GR4=γ(#F000) 待避
      LD   GR7,GR6    ;GR7=GR6=#F800     待避
      CALL Sl         ;1語目の処理
      LD   GR4,GR5    ;GR5=GR4=γ(#F000) 復元
      LD   GR6,GR7    ;GR7=GR6=#F800     復元
      SLL  GR4,0,GR3  ;2bitシフト GR4=#C000
      SLL  GR6,0,GR3  ;2bitシフト GR4=#E000

トレースの結果、「#EOOO」が正解となります。

講評

設問4の正答率は低く、あまり理解されていなかった。
ウと誤って解答した受験者が見受けられた。置換すべきピット列が2語にまたがったときの2語目用のマスクについて、具体的に考えてみれば、正答できた。

0 件のコメント:

コメントを投稿

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

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