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

出典:令和6年度 春期 応用情報技術者試験 午前 問8
- ア転送元の開始アドレス:1001,転送先の開始アドレス:1003,方向フラグ:0,転送語数:4
- イ転送元の開始アドレス:1001,転送先の開始アドレス:1003,方向フラグ:1,転送語数:4
- ウ転送元の開始アドレス:1004,転送先の開始アドレス:1006,方向フラグ:0,転送語数:4
- エ転送元の開始アドレス:1004,転送先の開始アドレス:1006,方向フラグ:1,転送語数:4
正解:エ
解説
アドレス1001〜1004のデータをアドレス1003〜1006へ転送する場合,両範囲は1003・1004で重なっています。アドレスの昇順(開始アドレス1001,方向フラグ0)で転送すると,1002番地のデータを1004番地へ書き込む際に,まだ転送前の1004番地の元データを上書きしてしまい破壊されます。重なりを避けるには,アドレスの大きい方(末尾)から降順に転送する必要があるため,転送元の開始アドレスは1004,転送先の開始アドレスは1006,方向フラグは1(降順),転送語数は4とするのが正しい設定です。
選択肢ごとの解説
- ア誤り。開始アドレス1001から昇順(方向フラグ0)で転送すると,重なった領域のデータを転送前に上書きしてしまい,正しく転送できません。
- イ誤り。降順(方向フラグ1)を指定していますが,開始アドレスが1001(先頭)のままでは降順走査の起点として誤りで,正しいデータ範囲を転送できません。
- ウ誤り。開始アドレスは末尾側の1004・1006になっていますが,方向フラグが0(昇順)のままでは,そこから先のアドレス(1005以降)へ進んでしまい,本来の範囲を転送できません。
- エ正しい。末尾のアドレス(1004→1006)から降順(方向フラグ1)で4語転送すれば,重なった領域を上書きする前に転送を終えられます。