平成26年 春期 基本情報技術者 午後 問12
問12 CASL問12 次のアセンブラプログラムの説明及びプログラムを読んで,設問1〜3に答えよ。 〔プログラム1の説明〕 文字列中の単語を切り出して,単語管理テーブルを作成する副プログラム GETTKN である。 (1) 文字列は英字,数字,空白文字のO文字以上の並びで,最後にピリオドが置かれる。 単語は,1文字以上の空白文字又はピリオドで区切られた英数字の並びである。 英字には,アルファベットの他に,ピリオド以外の記号を含むものとする。 文字列表記中の“△”は空白文字を示す。 (2) 単語管理テーブルには,文字列中に現れる単語ごとに,3語から成る要素を作成し, 単語の先頭アドレス,単語の長さ,単語の種別の順に格納する。種別は, 単語が数字だけから成るときは0,英字を含むときは1とする。単語の切出しが終了したとき, 単語管理テーブルの終端を示すマークとして −1 を格納する。 (3) 主プログラムは,文字列の先頭アドレスを GR1 に,単語管理テーブルの 先頭アドレスを GR2 に設定して,GETTKN を呼ぶ。 (4) 副プログラム GETTKN から戻るとき,汎用レジスタ GR1 〜 GR7 の内容は元に戻す。 副プログラム GETTKN の実行例を,図1に示す。
図1 副プログラム GETTKN の実行例 〔プログラム1〕 GETTKN START RPUSH LD GR3,=-1 ; 単語種別の初期化 LAD GR1,-1,GR1 LP LAD GR1,1,GR1 LD GR4,Ø,GR1 ; 文字を取り出す CPL GR4,='.' JZE FIN CPL GR4,=' ' JNZ ALNUM CALL SETTKN ALNUM LD GR3,GR3 ; 単語の処理中? JPL LP ; 処理中の単語が英字を含む場合は LP ヘ JZE ACHK ; 処理中の単語が数字だけから成る場合は ACHK ヘ LD GR3,=Ø ; 次の単語の処理開始 ; 単語種別を“数字だけから成る”に設定 LD GR6,GR1 ; 先頭アドレスを退避 ACHK CPL GR4,='9' JPL NEXT CPL GR4,='Ø' JMI NEXT JUMP LP ; 取り出した文字が数字の場合は LP ヘ NEXT LD GR3,=1 ; 単語種別を“英字を含む”に設定 JUMP LP FIN CALL SETTKN LD GR5,=-1 ST GR5,Ø,GR2 ; 終端マークを格納 RPOP RET SETTKN LD GR3,Ø,GR3 JMI FIN2 ; 単語処理中でなければ何もしない ST GR6,Ø,GR2 ; 単語の先頭アドレスを格納 LD GR5,GR1 ST GR5,1,GR2 ; 単語の長さを格納 ST GR3,2,GR2 ; 単語の種別を格納 LD GR3,=-1 ; 単語種別を初期化(処理中状態を解除) LAD GR2,3,GR2 FIN2 RET END 設問1 プログラム1中の に入れる正しい答えを, 解答群の中から選べ。 a に関する解答群 エ LAD GR1,1,GR1 オ LD GR4,Ø,GR1 カ LD GR4,1,GR1 b に関する解答群 エ SLL GR5,1 オ SRL GR5,1 カ SUBL GR5,GR6
設問2 次の文字列が与えられ,プログラム1のラベル NEXT が付いた命令を2度目に 実行した直後にGR4に設定されている文字として,正しい答えを,解答群の中から選べ。
解答群 エ A オ B カ C
設問3 GETTKN を使用して,指示に従い2数の和,差,積のいずれかを 求める副プログラム CALC を作成した。プログラム2中の に 入れる正しい答えを,解答群の中から選べ。 (1) 主プログラムは,文字列の先頭アドレスを GR1 に設定して,CALC を呼ぶ。 CALC は演算結果を GRØ に設定して呼出し元に戻る。文字列の形式を図2に示す。
図2 文字列の形式 (2) 数字文字列は 0 〜 65535 の整数(符号なしの数字文字列)で1文字以上の文字列とし, 演算子は加算(+),減算(−),乗算(*)を表す記号1文字とする。 演算はそれぞれ論理加算,論理減算,整数の乗算として実行し, 桁あふれは発生しないものとする。 (3) CALC は,GETTKN で切り出した数字だけから成る単語を2進数に変換するために, 別に用意された副プログラム DTOB を呼ぶ。 (4) DTOB は,数字文字列格納領域の先頭アドレスと文字列の長さが順に格納された2語から 成る領域の先頭アドレスが GR1 に設定されて,呼び出される。 DTOB は数字文字列を2進数に変換し,GRØ に設定して呼出し元に戻る。
(5) 副プログラム CALC,DTOB から戻るとき,汎用レジスタ GR1 〜 GR7 の内容は元に戻す。 〔プログラム2〕
CALC START RPUSH LAD GR2,CTBL CALL GETTKN CALL DTOB ; 数字文字列1を2進数に変換して LD GR4,GRØ ; GR4 に設定 LD GR1,3,GR2 LD GR3,Ø,GR1 ; GR3 ← 演算子の文字コード SUBL GR3,='*' LAD GR1,6,GR2 CALL DTOB ; 数字文字列2を2進数に変換して LD GR5,GRØ ; GR5 に設定 JUMP Ø,GR3 ; 演算子で指定された処理にジャンプ MULT LD GRØ,=Ø ; 乗算 LD GR5,GR5 LP JZE FIN LD GR3,GR5 AND GR3,=#ØØØ1 ; 乗数の最下位ビットのチェック JZE NEXT ADDL GRØ,GR4 NEXT SLL GR4,1 ; 被乗数を1ビット左論理シフト JUMP LP PLUS ADDL GR4,GR5 ; 加算 LD GRØ,GR4 JUMP FIN MINUS SUBL GR4,GR5 ; 減算 LD GRØ,GR4 FIN RPOP RET CTBL DS 1Ø ; GETTKN 用単語管理テーブル LTBL DC MULT ; 演算の分岐先アドレステーブル DC PLUS DS 1 ; ダミー DC MINUS END c に関する解答群 エ LD GR1,GR2 オ LD GR2,CTBL カ LD GR2,GR1 d に関する解答群 エ LD GR3,LTBL,GR3 オ SLL GR3,1 e に関する解答群 エ SLL GR5,1 オ SRL GR5,1
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
|