平成21年度 春期 午前Ⅱ 問2
プロセッサ
ブロック転送に関する問題
同一メモリ上で転送するとき,転送元の開始アドレス,転送先の開始アドレス,方向フラグ及び転送語数をパラメタとして指定することでブロック転送が行えるCPUがある。図のようにアドレス1001から1004の内容をアドレス1003から1006に転送する場合,パラメタとして適切なものはどれか。ここで,転送は開始アドレスから1語ずつ行われ,方向フラグに0を指定するとアドレスの昇順に,1を指定するとアドレスの降順に転送を行うものとする。
転送の実行前と実行後のメモリ:
| アドレス | 実行前 | 実行後 |
|---|---|---|
| 1000 | 白 | 白 |
| 1001 | 網掛け | 白 |
| 1002 | 網掛け | 白 |
| 1003 | 網掛け | 網掛け |
| 1004 | 網掛け | 網掛け |
| 1005 | 白 | 網掛け |
| 1006 | 白 | 網掛け |
| 1007 | 白 | 白 |
- 図中の矢印: 実行前の1001 → 実行後の1003,実行前の1004 → 実行後の1006
選択肢は原典では転送元の開始アドレス・転送先の開始アドレス・方向フラグ・転送語数の表。
- ア転送元の開始アドレス:1001 / 転送先の開始アドレス:1003 / 方向フラグ:0 / 転送語数:4
- イ転送元の開始アドレス:1001 / 転送先の開始アドレス:1003 / 方向フラグ:1 / 転送語数:4
- ウ転送元の開始アドレス:1004 / 転送先の開始アドレス:1006 / 方向フラグ:0 / 転送語数:4
- エ転送元の開始アドレス:1004 / 転送先の開始アドレス:1006 / 方向フラグ:1 / 転送語数:4
答えと解説を見る
✓ これが正解エ転送元の開始アドレス:1004 / 転送先の開始アドレス:1006 / 方向フラグ:1 / 転送語数:4
解説
重なる領域を後ろへずらすので、末尾から降順に転送します。
転送元の1001〜1004と転送先の1003〜1006は、1003と1004の2語が重なっています。転送先が転送元より大きいアドレスにあるとき、昇順に1語ずつ写すと、まだ読んでいない1003の内容を先に上書きしてしまいます。そこで末尾から始めます。転送元の開始アドレスを1004、転送先の開始アドレスを1006とし、方向フラグを1(降順)にすると、1004→1006、1003→1005、1002→1004、1001→1003の順に写り、どの語も上書きされる前に読み出せます。転送語数は4です。重なりのあるブロック転送では、ずらす向きの側の端から写し始める、と覚えておくと迷いません。
ほかの選択肢はなぜ違うのか
- ア転送元の開始アドレス:1001 / 転送…:1001から昇順に写すと、1001→1003、1002→1004と進んだ時点で元の1003と1004の内容が消えます。3語目と4語目には書き換わった後の値が写るので、元の1001と1002の内容が2回繰り返された並びになります。
- イ転送元の開始アドレス:1001 / 転送…:開始アドレスを1001と1003にしたまま降順にすると、1001→1003の次は1000→1002、999→1001と小さいアドレスへ進みます。写したい1002〜1004は扱われず、転送する範囲そのものがずれます。
- ウ転送元の開始アドレス:1004 / 転送…:1004から昇順に進むと、1004→1006の次は1005→1007、1006→1008と大きいアドレスへ進みます。転送元の1001〜1003は対象にならず、転送先も図に示された1003〜1006の範囲を外れます。
出典:平成21年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問2
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)