設問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
問われている内容は?
分岐先(NEXT・FOUND)・分岐条件(JMI・JOV・JPL)は?
|
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←αの下位語
;αをGR4とGR5に格納
|
9
10
11
|
LD
GR1,=32 ;GR1←32
SUBA GR1,GR3 ;GR1←32-4 (GR3に4が設定と仮定)
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ビットのαをGR4とGR5に分割格納しています。
行番号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において、実際にトレースしてみます。
GR3に4が設定されている場合、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-(16-BSRH で検出されたビット位置)」で計算できます。
GR2 ← BSRH で検出されたビット位置-16
= 0-(16-BSRH で検出されたビット位置)
|
講評
設問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の値が行番号41のGR2になるには、「イ 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 件のコメント:
コメントを投稿