令和6年度 春期 午前 問8
コンピュータ構成要素
ブロック転送に関する問題
同一メモリ空間で,転送元の開始アドレス,転送先の開始アドレス,方向フラグ及び転送語数をパラメータとして指定することによって,データをブロック転送できる機能をもつ CPU がある。図のようにアドレス 1001 から 1004 のデータをアドレス 1003 から 1006 に転送するとき,指定するパラメータとして適切なものはどれか。ここで,転送は開始アドレスから 1 語ずつ行われ,方向フラグに 0 を指定するとアドレスの昇順に,1 を指定するとアドレスの降順に転送を行うものとする。
〔図〕実行前のメモリは 1001〜1004 が網掛け(転送するデータ)。実行後は 1003〜1006 が網掛けになっており,矢印が 1001→1003,1002→1004,1003→1005,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 と 1004 は、どちらの範囲にも含まれています。アドレスの小さいほうから 1 語ずつ運ぶと、まだ読んでいない 1003 と 1004 の中身を先に書き換えてしまい、その後で運ぶ値が本来のものと違ってしまいます。そこで、アドレスの大きいほうから運びます。方向フラグに 1 を指定し、転送元の開始アドレスを 1004、転送先の開始アドレスを 1006 とすれば、書き換わるのは既に読み終えた場所だけになります。転送語数は 1001 から 1004 までの 4 語です。
ほかの選択肢はなぜ違うのか
- ア1001 1003 0 4:開始アドレスを先頭側に置き、小さいほうから大きいほうへ向かって運ぶ指定です。重なっている 2 語を読み出す前に書き換えてしまうため、後半で運ばれる値が本来の中身ではなくなります。
- イ1001 1003 1 4:運ぶ向きは正しいものの、開始アドレスが先頭側のままです。1001 から下がりながら 4 語進むので、指定された範囲より小さい側を読み書きすることになります。
- ウ1004 1006 0 4:開始アドレスは末尾側なのに、上がりながら運ぶ指定になっています。1004 から 4 語進むと 1007 までを読むことになり、扱う範囲そのものがずれます。
出典:令和6年度 春期 応用情報技術者試験 午前 問8
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)