重なりのあるブロック転送
出典: 平成31年度 春期 応用情報技術者試験 午前 問9 (IPA)
同一メモリ上で転送するとき,転送元の開始アドレス,転送先の開始アドレス,方向フラグ及び転送語数をパラメタとして指定することによってブロック転送ができる CPU がある。図のようにアドレス 1001 から 1004 の内容をアドレス 1003 から 1006 に転送するとき,パラメタとして適切なものはどれか。ここで,転送は開始アドレスから 1 語ずつ行われ,方向フラグに 0 を指定するとアドレスの昇順に,1 を指定するとアドレスの降順に転送を行うものとする。
選択肢は、転送元の開始アドレス,転送先の開始アドレス,方向フラグ,転送語数 の順に示している。

- ア 転送元の開始アドレス: 1001,転送先の開始アドレス: 1003,方向フラグ: 0,転送語数: 4
- イ 転送元の開始アドレス: 1001,転送先の開始アドレス: 1003,方向フラグ: 1,転送語数: 4
- ウ 転送元の開始アドレス: 1004,転送先の開始アドレス: 1006,方向フラグ: 0,転送語数: 4
- エ 転送元の開始アドレス: 1004,転送先の開始アドレス: 1006,方向フラグ: 1,転送語数: 4
正解と解説を見る
正解: エ
- ア: 昇順に転送すると、まだ転送していない 1003 と 1004 の内容が先に上書きされてしまいます。
- イ: 1001 から降順に転送すると、1000、999 … と逆の方向に進み、目的の範囲を転送できません。
- ウ: 1004 から昇順に転送すると、1005、1006 … と範囲外に進んでしまいます。
- エ: 末尾の 1004 から 1006 へ降順に転送すれば、上書きされる前に全ての語を転送できるので正しい答えです。
ポイント
- 転送元 (1001~1004) と転送先 (1003~1006) が 重なって います。
- 昇順 (1001 から) に転送すると、1001 → 1003 で 1003 の元の内容が転送前に 上書き されてしまいます。
- そこで 降順 に、末尾の 1004 → 1006 から転送します。転送元の開始アドレス 1004、転送先の開始アドレス 1006、方向フラグ 1、転送語数 4 です。