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


選択肢
ア:
イ:
ウ:
エ:(正解)
同一メモリ上のブロック転送問題【午前2 解説】
要点まとめ
- 結論:転送元が後ろから前へ、転送先も後ろから前へ向かうため方向フラグは1、開始アドレスは転送元1004、転送先1006が正解です。
- 根拠:転送元と転送先が重なり、後ろから前へ転送しないとデータ上書きで破損するため、降順転送が必要です。
- 差がつくポイント:方向フラグの意味と重なり領域の転送順序を正しく理解し、開始アドレスを適切に設定できるかが鍵です。
正解の理由
選択肢エは、転送元開始アドレスを1004、転送先開始アドレスを1006、方向フラグを1(降順)、転送語数を4としています。
転送元の範囲は1001~1004、転送先は1003~1006で重なりがあります。昇順(方向フラグ0)で転送すると、先に転送したデータが後続の転送元データを上書きしてしまいます。
降順(方向フラグ1)で後ろから前へ転送すれば、元データを壊さず正しくコピー可能です。
また、開始アドレスは転送元・転送先の最後のアドレス(1004、1006)から始めるのが正しいため、エが適切です。
転送元の範囲は1001~1004、転送先は1003~1006で重なりがあります。昇順(方向フラグ0)で転送すると、先に転送したデータが後続の転送元データを上書きしてしまいます。
降順(方向フラグ1)で後ろから前へ転送すれば、元データを壊さず正しくコピー可能です。
また、開始アドレスは転送元・転送先の最後のアドレス(1004、1006)から始めるのが正しいため、エが適切です。
よくある誤解
方向フラグ0=昇順転送が常に正しいと考えがちですが、重なりがある場合は逆方向転送が必要です。
開始アドレスは転送元の先頭(1001)からで良いと思い込みやすいですが、重なりの有無で変わります。
開始アドレスは転送元の先頭(1001)からで良いと思い込みやすいですが、重なりの有無で変わります。
解法ステップ
- 転送元と転送先のアドレス範囲を確認し、重なりがあるか判断する。
- 重なりがあれば、転送方向を決める。重なり部分が上書きされないように後ろから前へ転送する。
- 方向フラグを0(昇順)か1(降順)で設定する。
- 転送元・転送先の開始アドレスを方向に合わせて設定する。
- 転送語数は転送する語数(ここでは4)を指定する。
選択肢別の誤答解説
- ア:方向フラグ0(昇順)で転送元1001から開始。重なりがあるため、前から転送するとデータが上書きされ誤動作。
- イ:方向フラグ1(降順)だが開始アドレスが1001で誤り。降順転送なら開始は最後尾の1004から。
- ウ:方向フラグ0(昇順)で開始アドレス1004。方向と開始アドレスが合っておらず誤り。
- エ:方向フラグ1(降順)、開始アドレス1004(転送元)、1006(転送先)で正しい。
補足コラム
CPUのブロック転送命令では、重なり領域の転送時にデータ破壊を防ぐため、方向フラグを使って転送順序を制御します。
方向フラグ0はアドレス昇順(前から後ろへ)、1は降順(後ろから前へ)を意味し、重なりがある場合は後ろから転送するのが基本です。
この制御は、例えばx86のREP MOVS命令などで使われています。
方向フラグ0はアドレス昇順(前から後ろへ)、1は降順(後ろから前へ)を意味し、重なりがある場合は後ろから転送するのが基本です。
この制御は、例えばx86のREP MOVS命令などで使われています。
FAQ
Q: なぜ重なりがあると転送方向を変える必要があるのですか?
A: 昇順で転送すると、先に転送したデータが後の転送元データを上書きし、正しいコピーができなくなるためです。
A: 昇順で転送すると、先に転送したデータが後の転送元データを上書きし、正しいコピーができなくなるためです。
Q: 方向フラグはどのように設定すれば良いですか?
A: 転送元と転送先の重なりを確認し、転送元アドレスが転送先アドレスより小さい場合は昇順(0)、大きい場合は降順(1)に設定します。
A: 転送元と転送先の重なりを確認し、転送元アドレスが転送先アドレスより小さい場合は昇順(0)、大きい場合は降順(1)に設定します。
関連キーワード: ブロック転送、方向フラグ、メモリ重なり、CPU命令、メモリコピー

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

