令和元年秋期 アセンブラ

令和元年秋期


設問1-a

穴埋め部分

03          ST   GR1,A       
06          [  a  ]          
07          ST   GR1,RESULT  ;符号部を退避

解答群

ア AND GR1,=#000F
イ AND GR1,=#F000
ウ AND GR1,=#FFFF
エ OR  GR1,=#000F
オ OR  GR1,=#F000
カ OR  GR1,=#FFFF

正解

ア AND GR1,=#000F

解答方法

次ステップのコメント「符号部を退避」に着目します。
「符号部」をRESULTに格納できる命令は「ア AND GR1,=#000F」だけですので、「ア」が正解となります。

解答群の解説

ア AND GR1,=#000F
GR1に#246Cが設定されている状態で本命令を実行すると、GR1は#000Cとなり、符号部を取り出せます。
イ AND GR1,=#F000
GR1に#246Cが設定されている状態で本命令を実行すると、GR1は#2000となり、符号部が0クリアされてしまいます。
ウ AND GR1,=#FFFF
何も変化しません。
無意味な命令です。
エ OR GR1,=#000F
GR1に#246Cが設定されている状態で本命令を実行すると、GR1は#246Fとなり、破壊されてしまいます。
オ OR GR1,=#F000
GR1に#246Cが設定されている状態で本命令を実行すると、GR1は#F46Cとなります。
カ OR GR1,=#FFFF
GR1に#246Cが設定されている状態で本命令を実行すると、GR1は#FFFFとなり、破壊されてしまいます。

設問1-b

穴埋め部分

15          ADDL GR1,GR2  
16          CPL  GR1,=10  ;10以上の場合は桁上げ
17          [  b  ]       

解答群

ア JMI MERGE
イ JNZ MERGE
ウ JPL MERGE
エ JOV MERGE
オ JZE MERGE

正解

ア JMI MERGE

解答方法

前ステップのコメント「10以上の場合は桁上げ」に着目します。
解答群の中で、GP1<10GP1≧10で処理を分岐できる命令は「ア JMI MERGE」だけですので、「ア」が正解となります。

解答群の解説

ア JMI MERGE
MERGEに分岐する条件は、GR1<10の時です。GR1≧10の時は分岐しません。
イ JNZ MERGE
MERGEに分岐する条件は、GR1≠10の時です。GR1=10の時は分岐しません。
ウ JPL MERGE
MERGEに分岐する条件は、GR1>10の時です。GR1≦10の時は分岐しません。
エ JOV MERGE
CPL命令では、フラグレジスタのOFフラグは設定されません。無意味な命令です。
オ JZE MERGE
MERGEに分岐する条件は、GR1=10の時です。GR1≠10の時は分岐しません。

設問1-c

穴埋め部分

20          [  c  ]          
21          OR   GR1,RESULT  ;中間結果との併合

解答群

ア SLA GR1,0,GR3
イ SLL GR1,0,GR3
ウ SLL GR1,=4
エ SRA GR1,0,GR3
オ SRL GR1,0,GR3
カ SRL GR1,=4

正解

イ SLL GR1,0,GR3

解答方法

LD   GR1,A  
SRL  GR1,0,GR3  
LD   GR2,B  
SRL  GR2,0,GR3  
AND  GR1,=#000F  
AND  GR2,=#000F  
ADDL GR1,GR2  
[  c  ]  
OR   GR1,RESULT  
パック10進数をメモリAから取り出し、その値を右方向に論理シフト(シフト量:GR3)し、最後に再びRESULTに格納しています。
右方向にシフトした場合、計算結果が失われてしまうため、「エ」「オ」「カ」は除外されます。
SRL GR2,0,GR3で右シフトした値を左シフトする命令を選択するのだが、「イ SLL GR1,0,GR3」が最もSRL GR2,0,GR3に近い。
ソーストレース後の解答方法
本か所では、以下のように処理が行われています。
メモリA/Bに退避されたパック10進数を取り出し、計算対象桁を最下位の4ビットに設定します。
再下位4ビットに設定された値を加算して、再びパック10進数の形式に戻(左シフト)します。
最後に、RESULTに格納されたパック10進数とマージします。

解答群の解説

ア SLA GR1,0,GR3
GR3の初期値は4(LAD GR3,4)で、4づつ加算(LAD GR3,4,GR3)されています。
CPL GR3,16で処理終了するので、GR3には、4,8または12が設定されます。
算術シフトの場合、“80”を左に12ビットシフトできません。
イ SLL GR1,0,GR3
左方向のシフト(シフト量:GR3)
ウ SLL GR1,=4
左方向のシフト(シフト量:4)
エ SRA GR1,0,GR3
右方向の算術シフト(シフト量:GR3)
AND  GR1,=#000F  
AND  GR2,=#000F  
ADDL GR1,GR2  
で下位4ビットに設定された加算結果を右シフトすると、加算結果が失われてしまいます。
オ SRL GR1,0,GR3
右方向の論理シフト(シフト量:GR3)
AND  GR1,=#000F  
AND  GR2,=#000F  
ADDL GR1,GR2  
で下位4ビットに設定された加算結果を右シフトすると、加算結果が失われてしまいます。
カ SRL GR1,=4
右方向の論理シフト(シフト量:4)
AND  GR1,=#000F  
AND  GR2,=#000F  
ADDL GR1,GR2  
で下位4ビットに設定された加算結果を右シフトすると、加算結果が失われてしまいます。

設問2-d

穴埋め部分

03          CPL  GR1,GR2  
04          [  d  ]       
05          LD   GR4,GR1  
06          LD   GR1,GR2  
07          LD   GR2,GR4  

解答群

ア JMI INI
イ JNZ INI
ウ JOV INI
エ JPL INI
オ JZE INI

正解

エ JPL INI

解答方法

穴埋個所の次の3ステップでは、G1とG2を入れ替えています。
このことを踏まえて、解答群の各命令を検証すると、「ア」と「エ」に絞り込まれます。
ST GR1,RESULT ;符号部を退避にて、GR1の符号が有効となっているので、GR1<GR2の時にG1とG2を入れ替える「エ」が正解となります。

解答群の解説

ア JMI INI
GR1<GR2の時に分岐し、GR1≧GR2の時にG1とG2を入れ替えます。
イ JNZ INI
GR1≠GR2の時に分岐し、GR1=GR2の時にG1とG2を入れ替えます。
G1とG2の入れ替え処理は、無駄な処理となってしましまいます。
ウ JOV INI
CPL命令では、フラグレジスタのOFフラグは設定されません。無意味な命令です。
エ JPL INI
GR1>GR2の時に分岐し、GR1≦GR2の時にG1とG2を入れ替えます。
オ JZE INI
GR1=GR2の時に分岐し、GR1≠GR2の時にG1とG2を入れ替えます。
GR1とGR2の入れ替えを行っても、GR1とGR2の関係はGR1≠GR2のままで変化しません。

設問2-e

穴埋め部分

20          SUBL GR1,GR2  
21          JPL  MERGE2   
22          [  e  ]       
23          ADDL GR1,=10  

解答群

ア JMI MERGE
イ JNZ MERGE
ウ JOV MERGE
エ JZE MERGE
オ SLL GR1,0,GR3
カ SRL GR1,0,GR3

正解

エ JZE MERGE

解答方法

本穴埋め個所は、プログラム1の[ b ]の穴埋め個所に相当しています。
プログラム1のコメント(10以上の場合は桁上げ)から、本穴埋め個所は、
「0未満の場合は桁下げ」
の処理を行うものと推測されます。
解答群の中で、0以上と0未満で処理を分岐できる命令は「エ JZE MERGE」だけですので、「エ」が正解となります。
「ア」「イ」「ウ」は、動作結果が同じになるので、除外されます。

解答群の解説

ア JMI MERGE
SUBL GR1,GR2  
JPL  MERGE  
JMI  MERGE  
の場合、減算結果が0の時だけ、
ADDL GR1,=10
が実行される。
イ JNZ MERGE
SUBL GR1,GR2  
JPL  MERGE  
JNZ  MERGE  
の場合、減算結果が0の時だけ、
ADDL GR1,=10
が実行される。
「ア」と同じ結果が得られる。
JPL MERGEは無駄な処理となる。
ウ JOV MERGE
SUBL GR1,GR2  
JPL  MERGE  
JOV MERGE  
の場合、減算結果が0の時だけ、
ADDL GR1,=10
が実行される。
「ア」と同じ結果が得られる。
(SUBLは論理減算なので、0未満になった時にフラグレジスタのOFフラグが設定される)
エ JZE MERGE
SUBL GR1,GR2  
JPL  MERGE  
JZE MERGE  
の場合、減算結果が負の時だけ、
ADDL GR1,=10
が実行される。
オ SLL GR1,0,GR3
SUBL GR1,GR2  
JPL  MERGE  
SLL GR1,0,GR3  
の場合、減算結果が0または負の時に、
SLL GR1,0,GR3
ADDL GR1,=10
が実行される。
カ SRL GR1,0,GR3
SUBL GR1,GR2  
JPL  MERGE  
SRL GR1,0,GR3  
の場合、減算結果が0または負の時に、
SRL GR1,0,GR3
ADDL GR1,=10
が実行される。

設問2-f

穴埋め部分

20          SUBL GR1,GR2    
34          SRL  GR2,0,GR3  
35          [  f  ]         
36          JUMP LOOP2      

解答群

ア ADDA GR1,GR0
イ ADDL GR1,=1
ウ ADDL GR1,GR0
エ ADDL GR3,GR0
オ SUBL GR1,=1
カ SUBL GR1,GR0

正解

カ SUBL GR1,GR0

解答方法

プログラム2は、プログラム1を流用改造しています。
プログラム1とプログラム2とで、本穴埋め個所周辺を比較します。
プログラム1
ADDL GR1,GR2  
(略)  
ADDL GR1,GR0  
JUMP LOOP  
プログラム2
SUBL GR1,GR2  
(略)  
[  f  ]  
JUMP LOOP  
プログラム1のADDL GR1,GR0に相当する命令が穴埋め個所に入ると推定されます。
このことを踏まえて、解答群の各命令を検証すると、「ア ADDA GR1,GR0」または「カ SUBL GR1,GR0」の可能性が高いと推定されます。
ソーストレース後の解答方法
本か所は、下位桁の計算で発生した桁下がり量を反映する個所です。
桁下がり量は、GR0に設定(0または1)されています。
桁下がり量を反映するには、減算操作が必要です。
よって、正解は、「カ SUBL GR1,GR0」となります。
注意
減算対象のGR1に0が設定されていて、1減算したことで桁下がりが発生することに対する考慮がなされていません。

解答群の解説

ア ADDA GR1,GR0
桁下がり量を加算しています。
イ ADDL GR1,=1
無条件に1加算しています。
ウ ADDL GR1,GR0
桁下がり量を加算しています。
エ ADDL GR3,GR0
GR3には、桁をシフトするシフト量が設定されています。
オ SUBL GR1,=1
無条件に1減算しています。
カ SUBL GR1,GR0
桁下がり量を減算しています。

設問3-g

穴埋め部分

02          LD   GR0,GR1  
03          [  g  ]       
04          SRL  GR0,1    

解答群

ア ADDL GR1,=1
イ AND  GR0,GR2
ウ OR   GR1,GR2
エ SUBL GR1,=1
オ XOR  GR0,GR2

正解

オ XOR GR0,GR2

解答方法

パック10進数の符号差異は、最下位ビットの差異で確認できます。
「ア」~「エ」では、符号差を認識することはできません。

解答群の解説

ア ADDL GR1,=1
符号部に1を加算しています。符号が’D’の時に1を加算すると、符号部には未定義の値が格納されてしまいます。
イ AND GR0,GR2
GR1とGR2の最下位ビットがともにOFFの時、GR0の最下位ビットはOFFになります。
GR1とGR2の最下位ビットの一方がONで他方がOFFの時、GR0の最下位ビットはOFFになります。
結果が同じなので、符号差を認識できません。
ウ OR GR1,GR2
GR1とGR2の最下位ビットがともにONの時、GR0の最下位ビットはONになります。
GR1とGR2の最下位ビットの一方がONで他方がOFFの時、GR0の最下位ビットはONになります。
結果が同じなので、符号差を認識できません。
エ SUBL GR1,=1
符号部から1を加算しています。符号が’C’の時に1を減算すると、符号部には未定義の値が格納されてしまいます。
オ XOR GR0,GR2
GR1とGR2の最下位ビットが同じ時、GR0の最下位ビットはOFFになります。
GR1とGR2の最下位ビットの一方がONで他方がOFFの時、GR0の最下位ビットはONになります。
結果が異なるので、符号差を認識できます。

設問3-h

穴埋め部分

02          LD   GR0,GR1  
03          XOR  GR0,GR2  
04          SRL  GR0,1    
05          [  h  ]       
06          CALL ADDP1    

解答群

ア JMI P2
イ JNZ P2
ウ JOV P2
エ JPL P2
オ JZE P2

正解

ウ JOV P2

解答方法

「ウ」を除く命令では、常に分岐するか、常に分岐しないので、無意味な命令です。

解答群の解説

ア JMI P2
右に論理シフトなので、最上位ビットは0となり、常に分岐しません。
イ JNZ P2
符号部は“C”または“D”なので、右に1ビットシフトした結果は、常に0ではありません。
常に分岐してしまいます。
ウ JOV P2
符号差がある場合、XOR GR0,GR2最下位ビットに1が設定されます。SRL GR0,1を実行することで最下位ビットがフラグレジスタのOFに反映されます。
エ JPL P2
右に論理シフトなので、最上位ビットは0となり、常に分岐します。
オ JZE P2
符号部は“C”または“D”なので、右に1ビットシフトした結果は、常に0ではありません。
常に分岐しません。

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

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