ブロック転送のパラメータ
出典: 令和6年度 春期 応用情報技術者試験 午前 問8 (IPA)
同一メモリ空間で,転送元の開始アドレス,転送先の開始アドレス,方向フラグ及び転送語数をパラメータとして指定することによって,データをブロック転送できる機能をもつ CPU がある。図のようにアドレス 1001 から 1004 のデータをアドレス 1003 から 1006 に転送するとき,指定するパラメータとして適切なものはどれか。ここで,転送は開始アドレスから 1 語ずつ行われ,方向フラグに 0 を指定するとアドレスの昇順に,1 を指定するとアドレスの降順に転送を行うものとする。
選択肢の各列:a=転送元の開始アドレス,b=転送先の開始アドレス,c=方向フラグ,d=転送語数

- ア a: 1001, b: 1003, c: 0, d: 4
- イ a: 1001, b: 1003, c: 1, d: 4
- ウ a: 1004, b: 1006, c: 0, d: 4
- エ a: 1004, b: 1006, c: 1, d: 4
正解と解説を見る
正解: エ
- ア: 昇順で転送すると 1003 の元データを先に上書きしてしまい、正しく転送できません。
- イ: 降順なのに開始アドレスが先頭 (1001, 1003) です。降順では末尾から転送する必要があります。
- ウ: 開始アドレスは末尾で正しいのですが、方向フラグが 0 (昇順) だと 1004 の次のアドレスへ進んでしまいます。
- エ: 末尾のアドレス (1004 → 1006) から降順 (フラグ 1) に 4 語転送するので、重なりがあっても正しく転送できます。正しい答えです。
ポイント
- 転送元 1001〜1004 と転送先 1003〜1006 は 領域が重なっています。
- 昇順 (先頭から) に転送すると、1001→1003 で 1003 を上書きし、まだ読んでいない 1003 の元データが壊れます。
- そこで 降順に (方向フラグ 1)、開始アドレスは末尾の 1004 → 1006 から転送し、4 語を転送します。