平成16年 秋期 基本情報技術者 午後 問13
問13 CASL次のアセンブラプログラムの説明及びプログラムを読んで,設問1〜4に答えよ。
〔プログラムの説明〕 副プログラム TIME は,時刻1と時刻2の差を求める。 ここで,時刻は図1に示す形式の文字列とする。
図1 時刻の形式 hh は時,mm は分,ss は秒を表す。 00 ≦ hh ≦ 24,00 ≦ mm ≦ 59,00 ≦ ss ≦ 59とする。 (1) GR1 〜 GR3 には,それぞれ次の内容が設定されて,主プログラムから呼ばれる。 GR1 : 時刻1の先頭アドレス GR2 : 時刻2の先頭アドレス GR3 : 結果(時刻2− 時刻1)を格納する領域の先頭アドレス (2) 時刻1と時刻2は同一日付の時刻とし,000000 ≦ 時刻1< 時刻2≦ 240000 である。 (3) 副プログラム TIME から戻るとき,汎用レジスタの内容は元に戻す。
〔プログラム〕 (行番号) 1 TIME START 2 RPUSH 3 LD GR4,=5 ; ループカウンタ 4 LD GR7,=0 ; 下位けたへのけた下がりの調整値 5 ADDL GR1,GR4 ; GR1 ←時刻 1 の最終けたのアドレス 6 ADDL GR2,GR4 ; GR2 ←時刻 2 の最終けたのアドレス 7 ADDL GR3,GR4 8 LOOP LD GR5,0,GR1 ; GR5 ←時刻 1 の 1 けた 9 LD GR6,0,GR2 ; GR6 ←時刻 2 の対応けた 10 SUBA GR6,GR7 ; 下位けたへのけた下がりの調整 11 CPA GR6,GR5 12 13 LD GR7,=0 14 JUMP CALC 15 ADJUST ADDA GR6,ADD,GR4 ; 上位けたの 1 に相当する値を加算 16 17 CALC SUBA GR6,GR5 18 OR GR6,='0' ; 文字コードに変換 19 ST GR6,0,GR3 20 SUBA GR4,=1 21 JMI FINISH 22 LAD GR1,-1,GR1 23 LAD GR2,-1,GR2 24 LAD GR3,-1,GR3 25 JUMP LOOP 26 FINISH RPOP 27 RET 28 ADD DC 0,10,6,10,6,10 29 END
設問1 プログラム中の に入れる正しい答えを, 解答群の中から選べ。
解答群 ア ADDA GR7,=1 イ JMI ADJUST ウ JNZ ADJUST エ JPL ADJUST オ JZE ADJUST カ LD GR7,=-1 キ LD GR7,=1 ク SUBA GR7,=1
設問2 時刻1と時刻2が次のとおりであるとき,行番号 15 の ADDA 命令は何回実行されるか。 正しい答えを,解答群の中から選べ。 時刻 2: 170125 解答群 ア 1 イ 2 ウ 3 エ 4 オ 5 カ 6
設問3 次に示す形式の8文字からなる時刻を処理できるように, 副プログラム TIME の行番号 3 と行番号 28 を変更した。 に入れる正しい答えを,解答群の中から選べ。
ここで,dd は百分の一秒を表す。00 ≦ dd ≦ 99 とする。1日の終わりは
〔プログラムの変更〕 (行番号)
解答群 ア 6,6 イ 6,10 ウ 10,6 エ 10,10 オ 10,100 カ 100,10 キ 100,100 設問4 副プログラム TIME(設問3による変更の前)を使用して,
駅伝競走のある区間の最高タイム(最小の所要時間)とそのチーム番号を出力する副プログラム (1) チーム数は9で,チーム番号は1〜9である。 (2) 図2に示すとおりに設定された領域の先頭アドレスが GR1 に格納されて,主プログラムから呼ばれる。 図2のスタート時刻とゴール時刻は,図1に示す形式とする。
図2 副プログラム EKIDEN の引数 (3) 出力形式は次のとおりとする。 n△hhmmss n はチーム番号を表す文字,△ は間隔文字とする。 (4) 同タイムのチームが複数ある場合は,同タイムのチームのうち最小のチーム番号を出力する。 (5) 全チームとも,スタートした日のうちにゴールするものとする。 (6) 副プログラム EKIDEN から戻るとき,GR1 〜 GR7 の内容は元に戻す。
EKIDEN START RPUSH LD GR7,=5 ;最高タイムの初期値を設定 INIT LD GR0,MAX,GR7 ; ” ST GR0,BEST,GR7 ; ” SUBA GR7,=1 ; ” JMI BEGIN ; ” JUMP INIT ; ” BEGIN LD GR7,='1' ;チーム番号 LOOP1 LAD GR4,BEST ; 最高タイム LAD GR3,CTIME ; 処理中のチームのタイムを設定する領域 LAD GR2,6,GR1 ; 処理中のチームのゴール時刻 CALL TIME ; 処理中のチームのタイムを計算 LD GR5,=6 ; ループカウンタ LOOP2 LD GR0,0,GR3 CPL GR0,0,GR4 ; 処理中のチームのタイムと最高タイムを比較 JPL NEXT ; 処理中のチームのタイム > 最高タイム LAD GR3,1,GR3 ; 処理中のチームの次のけた LAD GR4,1,GR4 ; 最高タイムの次のけた SUBA GR5,=1 JNZ LOOP2 JUMP NEXT ; 処理中のチームのタイム = 最高タイム REP ST GR0,0,GR4 ; 処理中のチームのタイムを LAD GR3,1,GR3 ; 最高タイムとする LAD GR4,1,GR4 ; ” LD GR0,0,GR3 ; ” SUBA GR5,=1 ; ” ; ” ST GR7,TEAM ; 処理中のチームの番号を出力領域に設定 NEXT CPA GR7,='9' ; 全チームの処理終了? JZE FIN LAD GR1,12,GR1 ; ポインタを次のチームへ進める ADDA GR7,=1 ; チーム番号を表す文字コードに 1 を加算 JUMP LOOP1 FIN OUT TEAM,LENG RPOP RET LENG DC 8 TEAM DS 1 DC ' ' BEST DS 6 MAX DC '999999' CTIME DS 6 END
解答群 ア JMI LOOP1 イ JMI REP ウ JPL LOOP1 エ JPL REP オ JZE LOOP1 カ JZE REP
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| ||||||||||||||