平成17年 春期 基本情報技術者 午後 問13
問13 CASL次のアセンブラプログラムの説明及びプログラムを読んで,設問1〜3に答えよ。
〔プログラムの説明〕 10 進数の読取りを行う副プログラム NREAD と,NREAD から呼ばれる副プログラム DTOB である。 (1) NREAD は,入力装置から1レコードを読み取り,読み込んだ文字列を2進数に変換し, 結果を GR0 に格納して,主プログラムに戻る。 (2) NREAD は,入力された文字列中の間隔文字を読み飛ばし,間隔文字以外について, 次の条件を検査する。 @ 最初の文字は数字又は負符号(−) A 2番目以降の文字はすべて数字 B 一つ以上の数字を含む。 条件を満たしていないとき,GR0 に −32768 を設定して主プログラムに戻る。 条件を満たしているとき,DTOB を呼び出し,DTOB の戻り値 GR0 をそのまま NREAD の戻り値とする。 (3) DTOB は,先頭アドレスを GR1 に設定して渡された数字列を2進数に変換し, GR0 に格納して呼出し元に戻る。 このとき,変換結果が −32767 〜 32767 に収まらない場合はエラーとし, GR0 に −32768 を設定して呼出し元に戻る。 〔数字列の形式〕
(4) 副プログラムから戻るとき,汎用レジスタ GR1 〜 GR7 の内容は元に戻す。
〔プログラム 1〕 1 NREAD START 2 RPUSH 3 IN INBUF,LENG ; 入力装置から 1 レコード読込み 4 LD GR2,LENG 5 JZE ERR 6 JMI ERR 7 LAD GR1,INBUF 8 ADDL GR2,GR1 ; 入力データ終端アドレスの設定 9 LAD GR3,0 ; 先頭文字確認フラグの初期化 10 LAD GR5,1 ; NUMSTR 領域カウンタの初期化 11 LAD GR6,0 ; 数字カウンタの初期化 12 LOOP CPL GR1,GR2 ; 入力データ終端? 13 14 LD GR4,0,GR1 ; 1 文字の取出し 15 CPL GR4,=' ' ; 間隔文字ならばスキップ 16 JZE NEXT 17 LD GR3,GR3 ; (間隔文字以外の)先頭文字? 18 JNZ NUMCHK 19 LAD GR3,1 20 CPL GR4,='-' 21 JNZ NUMCHK 22 ST GR4,NUMSTR,GR5 ; 文字'-'の格納 23 LAD GR5,1,GR5 24 JUMP NEXT 25 NUMCHK CPL GR4,='9' ; 数字? 26 JPL ERR 27 CPL GR4,='0' 28 JMI ERR 29 ST GR4,NUMSTR,GR5 30 LAD GR5,1,GR5 31 LAD GR6,1,GR6 32 NEXT LAD GR1,1,GR1 33 JUMP LOOP 34 ERR LAD GR0,-32768 ; エラー時の処理 35 JUMP EXIT 36 CNV LD GR6,GR6 37 JZE ERR 38 LAD GR5,-1,GR5 39 ST GR5,NUMSTR ; 文字数の格納 40 LAD GR1,NUMSTR 41 CALL DTOB ; DTOB 呼出し 42 EXIT RPOP 43 RET 44 INBUF DS 256 ; 入力データ領域 45 LENG DS 1 46 NUMSTR DS 257 ; DTOB 呼出しパラメタ領域 47 END
〔プログラム 2〕 1 DTOB START 2 RPUSH 3 LD GR2,0,GR1 ; 文字数の取出し 4 ADDL GR2,GR1 ; 文字列終端アドレスの設定 5 LAD GR0,0 ; 戻り値の初期化 6 LAD GR3,0 ; 負符号フラグの初期設定 7 LD GR4,1,GR1 ; 最初の文字の取出し 8 CPL GR4,='-' 9 JNZ LOOP 10 LAD GR3,1 ; 負数であることを記憶 11 LAD GR1,1,GR1 12 LOOP LAD GR1,1,GR1 13 CPL GR1,GR2 ; 変換終了? 14 JPL FIN 15 LD GR4,0,GR1 ; 数字 1 文字の取出し 16 SUBL GR4,='0' ; 1 文字を数値に変換 17 SLL GR0,1 ; GR0(上位けたまでの変換値)を 10 倍する 18 JMI ERR ; 〔行番号 20 〜 22 は設問 3 参照〕 19 LD GR5,GR0 ; ” 20 SLL GR0,1 ; ” 21 JMI ERR ; ” 22 SLL GR0,1 ; ” 23 JMI ERR ; ” 24 ; ” 25 JMI ERR ; ” 26 ADDL GR0,GR4 27 JMI ERR 28 JUMP LOOP 29 ERR LAD GR0,-32768 ; −32767 〜 32767の範囲外ならエラー 30 JUMP EXIT 31 FIN LD GR3,GR3 ; 負符号フラグチェック 32 JZE EXIT 33 34 ADDA GR0,=1 35 EXIT RPOP 36 RET 37 END
設問1 プログラム中の に入れる正しい答えを,解答群の中から選べ。
a に関する解答群 ア JNZ NEXT イ JNZ NUMCHK ウ JPL CNV エ JPL EXIT オ JZE CNV カ JZE EXIT b に関する解答群 ア ADDL GR0,GR4 イ ADDL GR0,GR5 ウ ADDL GR5,GR0 エ ADDL GR5,GR4 オ SLL GR0,1 カ SLL GR4,1 キ SLL GR4,2 ク SLL GR5,1 c に関する解答群 ア AND GR0,=#7FFF イ AND GR0,GR3 ウ OR GR0,=#8000 エ OR GR0,GR3 オ XOR GR0,=#8000 カ XOR GR0,=#FFFF キ XOR GR0,GR3
設問2 次の記述中の に入れる正しい答えを,解答群の中から選べ。
IN 命令によって,文字列“△-5△24-△9”(△ は間隔文字)が入力されたとき, 〔プログラム 1〕の ERR へは,行番号 の命令から制御が移る。 ERR に制御が移ったときの GR5 の値は である。
d に関する解答群 ア 5 イ 6 ウ 26 エ 28 オ 37 e に関する解答群 ア 1 イ 2 ウ 4 エ 5 オ 6 カ 7 キ 8
設問3 次の記述中の に入れる正しい答えを,解答群の中から選べ。
次の数字列が NREAD から渡されたとき,DTOB の戻り値は 16 進表記で
なお,いずれの場合も,〔プログラム 2〕の行番号 15 で最後の文字'0'を 取り出したとき,GR0 の値は 10 進表記で 8192(16 進表記で 2000)となっている。 NREAD から渡された数字列
解答群 ア 0 イ 2000 ウ 4000 エ 8000 オ F000
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
|