平成31年春期の「問12 アセンンブラ」のプログラム

〔プログラム1〕
(行番号)
1 BITSON START
2 RPUSH
3 LD GR3,1,GR1 ; GR3: ビット位置
4 ; ビット位置を,相対アドレス(GR2)と
5 ; ビットインデックス(GR3)とに変換
6 LD GR2,GR3
7 [ a ]
; ア SLL GR2,O,GR3 エ SRL GR2,O,GR3
; イ SLL GR2,4 オ SRL GR2,4 ; ウ SLL GR2,4,GR3 カ SRL GR2,4,GR3
8 AND GR3,=#000F
9 LD GR4,2,GR1 ; GR4:ビット長(初期値)
10 ; (ビットインデックス+ビット長) >= 16 の間,ビット操作を行う
11 LOOP LD GR0,GR4
12 ADDL GR0,GR3
13 GPL GR0,BITSPW
14 JMI BREAK
15 LD GR5,BITSPW ; GR5:語内で対象となるビット数
16 LD GR3,GR3
17 JZE FULL
18 [ b ]
; ア ADDL GR5,GR2 エ SUBL GR5,GR2
; イ ADDL GR5,GR3 オ SUBL GR5,GR3
; ウ ADDL GR5,GR4 カ SUBL GR5,GR4
19 SUBL GR3,GR3 ; GR3←0
20 FULL SUBL GR4,GR5 ; 操作するビット数だけビット長を減らす
21 LD GR0,=1
22 SLL GR0,0,GR5
23 SUBL GR0,=1 ; GR0:ビットマスク
24 CALL SETOP
25 ADDL GR2,=1 ; GR2:次の語の相対アドレス
26 JUMP LOOP
27 BREAK LD GR4,GR4 ; 操作の対象になる未処理のビットあり?
28 [ c ]
; ア JNZ FIN ウ JPL FIN オ JZE FIN
; イ JNZ LOOP エ JPL LOOP カ JZE LOOP
29 ; 未操作のビット数分の右詰めのビットマスクを生成し,
30 ; 必要なビット数だけ左へシフト
31 LD GR0,=1
32 SLL GR0,0,GR4
33 SUBL GR0,=1
34 LD GR5,BITSPW
35 SUBL GR5,GR3
36 [ d ]
; ア ADDL GR5,GR2 エ SUBL GR5,GR2
; イ ADDL GR5,GR3 オ SUBL GR5,GR3
; ウ ADDL GR5,GR4 カ SUBL GR5,GR4
37 SLL GR0,0,GR5 ; GR0: ビットマスク
38 CALL SETOP
39 FIN RPOP
40 RET
41 BITSPW DC 16 ; 1語のビット数
42 END
〔プログラム2〕
(行番号)
1 SETOP START
2 RPUSH
3 LD GR3,0,GR1
4 ADDL GR3,GR2
5 OR GR0,0,GR3
6 ST GR0,0,GR3
7 RPOP
8 RET
9 END
〔プログラム3〕
(行番号)
1 BITSON START
2 RPUSH
3 LAD GR7,SETOP
4 CALL BITSON
5 RPOP
6 RET
7 END

平成31年春期「問12 アセンンブラ」の感想

平成31年春期「問12 アセンンブラ」の感想

感想

ビットシフト操作を含む問題でした。

プログラムの難易度が高い時、プログラムのコメントが丁寧で、プログラムの説明も丁寧になる。今回はその状態だ。

問題には、
・穴埋め箇所周辺のプログラム理解だけで解ける問題
・広範囲のプログラム理解が必要な問題
が存在する。

「a」と「c」は、穴埋め箇所周辺のプログラム理解だけで解ける問題で、
「b」と「d」は、広範囲のプログラム理解が必要な問題です。

「e」と「f」は、問題そのものの理解が難しいですが、問われている内容が分れば、プログラムを理解することなく解ける問題です。

「b」と「d」は難しいかと思います。
「b」と「d」の解答を諦めて、他の問題に注力するのも手かと思います。

簡単な解説

「a」

1語が16bitなので、相対アドレスとビットインデックスは、下記の式で表されます。
・「相対アドレス=ビット位置÷16」
・「ビットインデックス=ビット位置%16」(%は剰余)
「÷16」は、右方向に4bitシフトすることで得られます。

「c」

穴埋め箇所の前の処理「LD GR4,GR4」のコメントに「未処理のビットあり?」と記載され、穴埋め箇所の後ろに「未操作のビット...」と記載されています。
これらの情報から、GR4が0なら「未操作のビット...」の処理をスキップするものと推測されます。

穴埋めされていないプログラムに、ラベル「FIN」への分岐箇所がないこともヒントになります。

「e」

新たに作成された新しい「BITSON」プログラムに「CALL BITSOP」と記述されている。

「f」

問題文に
「「BITSON」は、GR7に「BITSOP」内で実行される関数アドレスを設定」
と記述されている。
GR7を含む選択肢が候補となる。

「b」「d」

前後の処理から類推は難しい。
マスク値を作る方法は、
・汎用レジスタの最上位ビットに1を設定し、
・右方向に算術シフトし、
・必要ならEORでビット反転する。
をイメージしてしむのですが、
このプログラムでは、
・汎用レジスタの最下位ビットに1を設定し、
・左方向に算術シフトし、
・1を引く
という方法を採用しています。
下位3ビットをONにするには、以下のようにビット操作しています。
   0000 0000 0000 0001 (1設定)
   0000 0000 0000 1000 (左に3bitシフト)
   0000 0000 0000 0111 (-1)
上位3ビットをONにするには、更に以下のようにビット操作しています。
   1110 0000 0000 0000 (左に(16-0-3)bitシフト)

平成31年春期の「問12 アセンンブラ」出題問題

平成31年春期の「問12 アセンンブラ」出題問題







平成30年秋期の「問12 アセンンブラ」出題問題

平成30年秋期の「問12 アセンンブラ」出題問題






平成30年春期の「問12 アセンンブラ」出題問題

平成30年春期の「問12 アセンンブラ」出題問題







平成29年秋期の「問12 アセンンブラ」出題問題

平成29年秋期の「問12 アセンンブラ」出題問題






平成29年春期の「問12 アセンンブラ」出題問題

平成29年春期の「問12 アセンンブラ」出題問題








平成28年秋期の「問12 アセンンブラ」出題問題

平成28年秋期の「問12 アセンンブラ」出題問題






平成28年春期の「問12 アセンンブラ」出題問題

平成28年春期の「問12 アセンンブラ」出題問題






平成27年秋期の「問12 アセンンブラ」出題問題


平成27年秋期の「問12 アセンンブラ」出題問題








平成27年春期の「問12 アセンンブラ」出題問題

平成27年春期の「問12 アセンンブラ」出題問題







平成26年秋期の「問12 アセンンブラ」出題問題

平成26年秋期の「問12 アセンンブラ」出題問題






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

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