平成8年度 秋期 第二種 午後 問14

                        [更新日]1996.11.18
問14 次のアセンブラプログラムの説明及びプログラムを読んで,設間1,2に答えよ。 〔プログラムの説明〕 副プログラムBINGOは0以上の整数が25個入った5行5列の2次元配列と,一つ の正の整数(以下,当たり数と呼ぶ)を引数として主プログラムから繰り返し 呼ばれる。呼び出されると,配列の中に当たり数と同じ数があるかどうかを調 べる。同じ数があれば配列中のその数を0に置き換える。その結果,0が縦又は 横に五つ並ベばGR0に1を,そうでなければ0を設定し,主プログラムに戻る。 (1) 配列として,連続する25語の領域がとられ,その先頭アドレスがGR1に, 当たり数がGR0に格納されて,主プログラムから渡される, (2) 配列の中の0以外の整数は、すべて異なるものとする。 (3) 主プログラムから渡される配列には、まだ0が縦にも横にも五つ並んでい ないものとする。 (4)BINGOの実行例を図に示す. (5) プログラム中の副プログラムCHECKは,配列の指定された行又は列の全要 素の内容が0かどうかを調べる。 CHECKを呼ぶとき,表に示すように,その行又は列の先頭アドレスをGR1に, 行又は列の各要素間の隅たり(アドレスの差)をGR2に格納する。 表 CHECKを軒呼ぶときのCR1とGR2の内容 ┌────────────┬──────┐ │    GR1の内容 │ GR2の内容 │ ┌───────┼────────────┼──────┤ │行を調べるとき│ その行の左端のアドレス │ 1 │ ├───────┼────────────┼──────┤ │列を調べるとき│ その列の上端のアドレス │ 5 │ └───────┴────────────┴──────┘ CHECKは、各要素の内容がすべて0のとき、GR0に1を.FR(フラグレジスタ) に00を設定する。それ以外のとき、GR0に0を、FRに01を設定する。 (6) プログラム中に示されていない副プログラムDIV5は、GR2の内容を5で割っ た商をGR3に、剰余をGR2に設定する副プログラムである。 〔プログラム〕 (行番号) 1 BINGO START ; 2 PUSH 0,GR1 ; ┐ 3 PUSH 0,GR2 ; ├ レジスタの退避 4 PUSH 0,GR3 ; ┘ 5 ST GR1,TBLADR ;配列の先頭アドレス 6 LEA GR2,0 ;ループカウンタ 7 LOOP CPA GR0,0,GR1 ;当たり数=要素の数? 8 JZE MATCH ;YESなら次の処理へ 9 LEA GR1,1,GR1 ;配列の次の要繁に位置付ける 10 LEA GR2,1,GR2 ; 11 CPA GR2,TBLEND ;配列の終り? 12 JMI LOOP ;NOなら再度調べる 13 LEA GR0,0 ;一致する数が配列になかった 14 JMP FIN ; 15 MATCH LEA GR0,0 ;配列中のその数を 16 ST GR0,0,GR1 ; 0に置き換える 17 CALL DIV5 ;GR2÷5の商→GR3.余剰→GR2 18 ST GR3,ROW ;0に置き換えた要素の行番号 19 ST GR2,COL ;同じく列番号 20 SUB GRl,COL ;その行の左端のアドレス 21 LEA GR2,1 ; 22 CALL CHECK ;横に0が五つ並んだか? 23 JNZ FIN ;YESなら処理終了 24 VCHECK LD GR1,TBLADR ; 25 ADD GR1,COL ;列の上端のアドレス 26 LEA GR2,5 ; 27 CALL CHECK ;縦に0が五つ並んだか? 28 FIN POP GR3 ; ┐ 29 POP GR2 ; ├ レジスタの復元 30 POP GR1 ; ┘ 31 RET ; 32 CHECK ST GR2,NEXT ; 33 LEA GR3,5 ;ループカウンタ 34 LOOP1 LD GR2,0,GR1 ;要素の内容 35 LEA GR2,0,GR2 ;0か? 36 JNZ NOGOOD ; 37 ADD GR1,NEXT ;次に位置付ける 38 LEA GR3,-1,GR3 ; 39 JNZ LOOP1 ; 40 LEA GR0,1 ;0が五つ並んでいる 4l JMP FIN1 ; 42 NOGOOD LEA GR0,0 ;0が五つ並んでいない 43 FIN1 RET ; 44 TBLEND DC 25 ; 45 TBLADR DS 1 ; 46 ROW DS 1 ; 47 COL DS 1 ; 48 NEXT DS 1 ; 49 END ; 設問1 プログラム23行目の分岐命令(JNZ命令)に関する次の記述中の〔 〕 に入れる正しい答えを、解答群の中から選ベ。 0が五つ並んだ場合は、〔 a 〕 行目の命令で設定されたFRの値が有効とな り、分岐する。 0が五つ並んでいない場合は、〔 b 〕 行目の命令で設定されたFRの値が有 効となり、分岐しない。 解答群 ア 20 イ 21 ウ 22  エ 38  オ 39 カ 40 キ 41  ク 42 ケ 43 設問2 斜めに0が五つ並んだ場合もGR0に1を設定するようにしたい。そのため, プログラムの23行目と24行目の問に、次の一連の行を挿入する。 〔 〕に入れる正しい答えを.解答群の中から選べ。ただし,主プロ グラムから渡される配列には,まだ0が縦にも横にも斜めにも五つ並んで いないものとする。 LD GR2,ROW CPA GR2,COL JNZ NXTCHK LD GR1,TBLADR 〔 c 〕 CALL CHECK JNZ FIN NXTCHK LD GR2,ROW ADD GR2,COL LEA GR2,-4,GR2 JNZ VCHECK LD GR1,TBLADR LEA GR1,4,GR1 〔 d 〕 CALL CHECK JNZ FIN 解答群 ア LEA GR2,2 イ LEA GR2,4 ウ LEA GR2,6 エ LEA GR2.8 オ LEA GR2,2,GR1 カ LEA GR2,4,GR1 キ LEA GR2,6,GR1 ク LEA GR2,8,GR1
戻る 次頁:問15