平成31年度 春期 応用情報技術者試験 午前 問9
テクノロジ/コンピュータ構成要素同一メモリ上で転送するとき,転送元の開始アドレス,転送先の開始アドレス,方向フラグ及び転送語数をパラメタとして指定することによってブロック転送ができる CPU がある。図のようにアドレス 1001 から 1004 の内容をアドレス 1003 から 1006 に転送するとき,パラメタとして適切なものはどれか。ここで,転送は開始アドレスから1語ずつ行われ,方向フラグに0を指定するとアドレスの昇順に,1を指定するとアドレスの降順に転送を行うものとする。 (注:本サイトでは原問題の選択肢の表を文字表記に変換しています)

出典:平成31年度 春期 応用情報技術者試験 午前 問9
- ア転送元の開始アドレス 1001,転送先の開始アドレス 1003,方向フラグ 0,転送語数 4
- イ転送元の開始アドレス 1001,転送先の開始アドレス 1003,方向フラグ 1,転送語数 4
- ウ転送元の開始アドレス 1004,転送先の開始アドレス 1006,方向フラグ 0,転送語数 4
- エ転送元の開始アドレス 1004,転送先の開始アドレス 1006,方向フラグ 1,転送語数 4
正解:エ
解説
転送元の 1001〜1004 と転送先の 1003〜1006 は 1003・1004 の2語分が重なっています。アドレスの昇順に転送すると,1001の内容を1003に書き込んだ時点で,まだ転送していない元の1003の内容が壊れてしまいます。そこで領域の末尾(転送元1004,転送先1006)から降順に転送すれば,未転送のデータを上書きせずに済みます。したがって開始アドレスは1004と1006,方向フラグは1(降順),転送語数は4です。
選択肢ごとの解説
- ア誤り。昇順(方向フラグ0)で1001から転送すると,まだ転送していない1003番地の内容を先に上書きしてしまい,元のデータが失われます。
- イ誤り。方向フラグ1(降順)を指定する場合,開始アドレスは領域の末尾でなければならず,1001/1003から降順に4語転送すると 0FFE〜1001 の範囲を扱うことになり指定範囲と一致しません。
- ウ誤り。開始アドレスは末尾の1004/1006ですが,方向フラグ0(昇順)では1004→1007の向きに進むので,目的の1001〜1004を転送できません。
- エ正しい。転送元1004,転送先1006から方向フラグ1(降順)で4語転送すれば,重なり合う領域でも未転送データを上書きせずに転送できます。