平成24年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問2
テクノロジ/コンピュータ構成要素同一メモリ上で転送するとき,転送元の開始アドレス,転送先の開始アドレス,方向フラグ及び転送語数をパラメタとして指定することでブロック転送ができるCPUがある。図のようにアドレス1001から1004の内容をアドレス1003から1006に転送するとき,パラメタとして適切なものはどれか。ここで,転送は開始アドレスから1語ずつ行われ,方向フラグに0を指定するとアドレスの昇順に,1を指定するとアドレスの降順に転送を行うものとする。

出典:平成24年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問2
- ア転送元の開始アドレス:1001,転送先の開始アドレス:1003,方向フラグ:0,転送語数:4
- イ転送元の開始アドレス:1001,転送先の開始アドレス:1003,方向フラグ:1,転送語数:4
- ウ転送元の開始アドレス:1004,転送先の開始アドレス:1006,方向フラグ:0,転送語数:4
- エ転送元の開始アドレス:1004,転送先の開始アドレス:1006,方向フラグ:1,転送語数:4
正解:エ
解説
転送元アドレス1001~1004と転送先アドレス1003~1006は範囲が重なっており,単純に低位アドレスから昇順に1語ずつ上書きしてしまうと,転送先として使われる1003,1004番地の元データが,まだ転送し終わっていないのに転送元データとして読み出す前に破壊されてしまいます。これを避けるためには,重なりのない側(アドレスの大きい側)から先に書き込むように,末尾のアドレスから降順(方向フラグ1)に転送する必要があります。降順で転送する場合,開始アドレスは範囲の末尾になるので,転送元の開始アドレスは1004,転送先の開始アドレスは1006,方向フラグは1,転送語数は4となります。
選択肢ごとの解説
- ア誤り。転送元1001,転送先1003を開始アドレスとして昇順(方向フラグ0)に転送すると,まず1001の内容を1003に書き込む時点ではまだ問題ありませんが,次に1002の内容を1004に書き込む前に,1003(既に上書き済み)の内容を1005に転送してしまうなど,転送先として使われた元データを読み出す前に上書きしてしまい,正しく転送できません。
- イ誤り。開始アドレスは1001のままで,方向フラグだけを1(降順)にすると,1001から降順にたどることになり,転送すべき1002~1004の内容を正しくたどれません。
- ウ誤り。方向フラグが0(昇順)のままでは,アの場合と同様に転送先として使われた元データを上書きしてから読み出すことになり,正しく転送できません。
- エ正しい。転送元の開始アドレスを範囲の末尾である1004,転送先の開始アドレスを1006とし,方向フラグ1で降順に1語ずつ転送すれば,まだ上書きされていない元データから順に転送でき,重なりがあっても正しく転送できます。