応用情報技術者 2024年 春期 午前2 問08
問題文
同一メモリ空間で、転送元の開始アドレス、転送先の開始アドレス、方向フラグ及び転送語数をパラメータとして指定することによって、データをブロック転送できる機能をもつCPUがある。図のようにアドレス1001から1004のデータをアドレス1003から1006に転送するとき、指定するパラメータとして適切なものはどれか。ここで、転送は開始アドレスから1語ずつ行われ、方向フラグに0を指定するとアドレスの昇順に,1を指定するとアドレスの降順に転送を行うものとする。


選択肢
ア:
イ:
ウ:
エ:(正解)
同一メモリ空間でのブロック転送のパラメータ指定【午前2 解説】
要点まとめ
- 結論:転送元1004、転送先1006、方向フラグ1、転送語数4が正解です。
- 根拠:重複領域の転送は後ろから前へ(降順)行い、データの上書きを防ぐ必要があります。
- 差がつくポイント:方向フラグの意味と転送開始アドレスの選び方を正確に理解することが重要です。
正解の理由
今回の問題は、同一メモリ空間内で重複する領域にデータを転送する際のパラメータ設定です。転送元はアドレス1001~1004、転送先は1003~1006で重なりがあります。転送方向を昇順(方向フラグ0)にすると、先に転送したデータが後の転送元データを上書きしてしまいます。これを防ぐため、方向フラグを1(降順)にして後ろから転送を開始します。降順転送の場合、転送元の開始アドレスは1004、転送先は1006となり、転送語数は4語です。したがって、選択肢エが正解です。
よくある誤解
- 昇順転送(方向フラグ0)が常に正しいと思い込み、重複領域の上書き問題を見落とす。
- 転送元・転送先の開始アドレスを単純に小さい方から指定してしまう。
解法ステップ
- 転送元と転送先のアドレス範囲を確認し、重複があるか判断する。
- 重複があれば、転送方向を決める。重複先が後ろなら降順(方向フラグ1)で転送。
- 降順転送の場合、転送元・転送先の開始アドレスはそれぞれ範囲の最後尾(最大アドレス)を指定。
- 転送語数は転送するデータの語数(ここでは4語)を設定。
- 以上の条件に合致する選択肢を選ぶ。
選択肢別の誤答解説
- ア(1001→1003、方向フラグ0、4語):昇順転送で重複領域の上書きが発生し、正しく転送できない。
- イ(1001→1003、方向フラグ1、4語):方向は正しいが、降順転送の場合は開始アドレスを最後尾にする必要があるため誤り。
- ウ(1004→1006、方向フラグ0、4語):開始アドレスは正しいが昇順転送で上書き問題が起きる。
- エ(1004→1006、方向フラグ1、4語):降順転送で重複領域の上書きを防ぎ、正しく転送できる。
補足コラム
同一メモリ空間内でのブロック転送は、重複領域の扱いが重要です。方向フラグはCPUの命令セットによって異なりますが、多くは0が昇順、1が降順を示します。重複領域の転送は、後ろから前へコピーすることでデータの破壊を防ぎます。これはmemmove関数の動作原理と同様です。
FAQ
Q: なぜ昇順転送で上書きが起きるのですか?
A: 昇順転送は先頭からコピーするため、転送先が転送元の未コピーデータを上書きし、正しいデータがコピーできなくなります。
A: 昇順転送は先頭からコピーするため、転送先が転送元の未コピーデータを上書きし、正しいデータがコピーできなくなります。
Q: 方向フラグが1のとき、開始アドレスはなぜ最後尾を指定するのですか?
A: 降順転送は後ろから前へコピーするため、開始アドレスは転送元・転送先の範囲の最後のアドレスを指定します。
A: 降順転送は後ろから前へコピーするため、開始アドレスは転送元・転送先の範囲の最後のアドレスを指定します。
関連キーワード: ブロック転送、方向フラグ、メモリ重複転送、降順転送、昇順転送、メモリコピー

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

