応用情報技術者試験 応用情報技術者試験 平成31年度春期 午前9: 同一メモリ上で転送するとき,転送元の開始アドレス,転送先の開始アドレス,方向フラグ及び転送語数をパラメタとして指定することによってブロック転送ができる CPU

応用情報技術者試験 平成31年度春期 午前
Q 99 / 80
同一メモリ上で転送するとき,転送元の開始アドレス,転送先の開始アドレス,方向フラグ及び転送語数をパラメタとして指定することによってブロック転送ができる CPU がある。図のようにアドレス 1001 から 1004 の内容をアドレス 1003 から 1006 に転送するとき,パラメタとして適切なものはどれか。ここで,転送は開始アドレスから 1 語ずつ行われ,方向フラグに 0 を指定するとアドレスの昇順に,1 を指定するとアドレスの降順に転送を行うものとする。
転送元の開始アドレス転送先の開始アドレス方向フラグ転送語数
1001100304
1001100314
1004100604
1004100614
アドレス 1000〜1007 のメモリブロック転送図(実行前・実行後)
この問の正解率:73.08%(535件)

問題本文

同一メモリ上で転送するとき,転送元の開始アドレス,転送先の開始アドレス,方向フラグ及び転送語数をパラメタとして指定することによってブロック転送ができる CPU がある。図のようにアドレス 1001 から 1004 の内容をアドレス 1003 から 1006 に転送するとき,パラメタとして適切なものはどれか。ここで,転送は開始アドレスから 1 語ずつ行われ,方向フラグに 0 を指定するとアドレスの昇順に,1 を指定するとアドレスの降順に転送を行うものとする。

選択肢

  • .転送元の開始アドレス: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 で重なる領域をどの向きにコピーすべきかを問う問題である。転送先のアドレスが転送元より大きく重なっているため、昇順(小さいアドレスから)にコピーすると、まだコピーしていない転送元 1003・1004 の内容を先に書き換えてしまい元データが壊れる。これを避けるには末尾の大きいアドレスから降順にコピーする必要があり、転送元 1004・転送先 1006 を開始点とし方向フラグ 1(降順)、転送語数 4 とするエが正解である。

選択肢ごとの解説

  • .転送元 1001 から昇順(フラグ 0)にコピーすると、1003 を読む前に転送先として 1003 を上書きしてしまい元データが壊れるため誤り。
  • .開始アドレスを 1001・1003 としているのに方向フラグを 1(降順)にすると、開始点から小さいアドレス側へ進んでしまい、対象範囲(1001〜1004)と逆向きになるため誤り。
  • .開始アドレスを 1004・1006 にしているのに方向フラグを 0(昇順)にすると、範囲外の大きいアドレス側へ進んでしまい、転送すべき 1001〜1004 を処理できないため誤り。
  • .末尾の 1004 を転送元・1006 を転送先の開始点とし降順(フラグ 1)にコピーすれば、重なり領域を上書きする前に読み終えられ、4 語を正しく転送できるので正しい。

応用情報技術者試験 平成31年度春期 午前過去問一覧へ戻る・問9