平成31年度 春期 午前 問9
コンピュータ構成要素
ブロック転送に関する問題
同一メモリ上で転送するとき,転送元の開始アドレス,転送先の開始アドレス,方向フラグ及び転送語数をパラメータとして指定することによってブロック転送ができる CPU がある。図のようにアドレス 1001 から 1004 の内容をアドレス 1003 から 1006 に転送するとき,パラメータとして適切なものはどれか。ここで,転送は開始アドレスから 1 語ずつ行われ,方向フラグに 0 を指定するとアドレスの昇順に,1 を指定するとアドレスの降順に転送を行うものとする。
実行前 アドレス 1000 … 空
アドレス 1001 ┐
アドレス 1002 │ この4語(網掛け)が
アドレス 1003 │ 転送される中身
アドレス 1004 ┘
アドレス 1005 … 空
アドレス 1006 … 空
アドレス 1007 … 空
実行後 アドレス 1003 〜 1006 が網掛け(=1001〜1004 の内容が入る)
矢印は 1001 → 1003 / 1004 → 1006
| 転送元の開始アドレス | 転送先の開始アドレス | 方向フラグ | 転送語数 | |
|---|---|---|---|---|
| ア | 1001 | 1003 | 0 | 4 |
| イ | 1001 | 1003 | 1 | 4 |
| ウ | 1004 | 1006 | 0 | 4 |
| エ | 1004 | 1006 | 1 | 4 |
- ア1001 1003 0 4
- イ1001 1003 1 4
- ウ1004 1006 0 4
- エ1004 1006 1 4
答えと解説を見る
✓ これが正解エ1004 1006 1 4
解説
重なる領域は、後ろから逆順に運べば壊さずに済みます。
同じメモリ内で範囲が重なる転送では、書く先と読む元が同じ番地を含むため、順序を誤ると先に書いた値が後で読むべき元の値を上書きしてしまいます。設問では 1001〜1004 の中身を 1003〜1006 へ動かすので、番地が上に 2 だけずれた位置に重なりが生じています。先頭から昇順に書くと、1003 に書いた値が、すぐ後で読む必要のある 1003 の元の値を上書きしてしまいます。末尾から降順で写せば、まず 1004 の値を 1006 に置き、次に 1003 を 1005 に置くというように、読む元がまだ書き換わっていない状態を保てます。この場合、開始番地は転送元・転送先とも末尾側を指し、方向フラグには降順の指定を渡します。
ほかの選択肢はなぜ違うのか
- ア1001 1003 0 4:開始番地を先頭側に置き、方向フラグを昇順とする組合せは、書く先の一部が読む元の後半と重なる場面では、先に書いた値が読む前の元を壊してしまいます。前半 2 語の値が繰り返し書かれ、意図した中身が届きません。
- イ1001 1003 1 4:開始番地を先頭側に置きつつ、方向フラグだけ降順とする組合せは、始点から始めるつもりが逆向きに進むため、範囲の外側を読み書きします。設問の指定するアドレスの区間から外れ、正しい範囲が転送されません。
- ウ1004 1006 0 4:開始番地を末尾側に置きながら、方向フラグを昇順とする組合せは、指定した末尾から前へは進まず、後ろへ伸びるように書き始めます。指定した範囲の外に出てしまい、書くべき先を外します。
出典:平成31年度 春期 応用情報技術者試験 午前 問9
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)