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

- ア 転送元の開始アドレス 1001,転送先の開始アドレス 1003,方向フラグ 0,転送語数 4
- イ 転送元の開始アドレス 1001,転送先の開始アドレス 1003,方向フラグ 1,転送語数 4
- ウ 転送元の開始アドレス 1004,転送先の開始アドレス 1006,方向フラグ 0,転送語数 4
- エ 転送元の開始アドレス 1004,転送先の開始アドレス 1006,方向フラグ 1,転送語数 4
解答・解説を見る
正解:エ
AI解説
転送元と転送先のアドレス範囲(1001~1004と1003~1006)が重なっており、かつ転送先が転送元より高いアドレス側にずれているため、アドレスの昇順(先頭から)に転送すると、まだコピーしていない元データを上書きしてしまう。これを避けるには、アドレスの高い方(末尾)から低い方へ向かって降順に転送する必要があり、転送元の開始(基準)アドレスを最大値の1004、転送先を1006、方向フラグを1(降順)に指定する。 ア: 昇順(方向フラグ0)で転送すると、1003番地に書き込んだ時点でまだコピーしていない1003番地の元データを上書きしてしまい、正しく転送できない。 イ: 転送語数は4で正しいが、開始アドレスの取り方が誤っており、方向フラグ1(降順)であっても開始アドレスが1001・1003では正しい範囲を降順に転送できない。 ウ: 方向フラグが0(昇順)になっており、これでは転送先が転送元と重なる範囲を上書きしてしまうため、正しく転送できない。 エ: 正しい。転送先が転送元より高位アドレス側に重なっているため、降順(方向フラグ1)で、かつ両範囲の最終アドレスである1004→1006を開始点として4語を転送すれば、上書き前に必要な元データを退避しながら正しく転送できる。 💡 重複するメモリ領域をコピーする問題では、「転送先が転送元より後ろ(高位アドレス)にあるときは末尾から降順にコピーする」という鉄則を覚えておくと、方向フラグと開始アドレスの組合せをすぐに判断できる。
※Web掲載用に表記を一部変更しています。図表はIPA公式問題冊子から引用しています。著作権はIPAに帰属します。