メモリのアドレスの先頭の番地|科目A-1(応用情報技術者) 令和6年 春期午前試験 問22

出典:令和6年春期 午前 問22 分野:ハードウェア(中分類) / ハードウェア(小分類)
次の方式で画素にメモリを割り当てる640 × 480のグラフィックLCDモジュールがある。始点(5,4)から終点(9,8)まで直線を描画するとき,直線上のx = 7の画素に割り当てられたメモリのアドレスの先頭は何番地か。ここで,画素の座標は(x,y)で表すものとする。 〔方式〕
  • メモリは0番地から昇順に使用する。
  • 1画素は16ビットとする。
  • 座標(0,0)から座標(639,479)までメモリを連続して割り当てる。
  • 各画素は,x = 0からx軸の方向にメモリを割り当てていく。
  • x = 639の次はx = 0とし,yを1増やす。
  • ア:3847
  • イ:7680
  • ウ:7694
  • エ:8978
解説

まず、始点(5、4)から終点(9、8)までの直線上で、x = 7となる画素のy座標を求めます。

この直線は、xが1増えるごとにyも1増えるので、

(5、4) → (6、5) → (7、6) → (8、7) → (9、8)

となります。したがって、求める画素の座標は(7、6)です。

次に、座標(7、6)が先頭から何番目の画素かを求めます。1行には640画素あり、y = 6より前には6行あります。

640 × 6 + 7 = 3,847

したがって、座標(7、6)は、0から数えて3,847番目の画素です。

ここで、1画素は16ビットですが、メモリの1番地は図より8ビットです。そのため、1画素当たり使用するメモリは、

16 ÷ 8 = 2番地

となります。

よって、座標(7、6)の画素に割り当てられるメモリの先頭アドレスは、

3,847 × 2 = 7,694番地

となります。

したがって、ウが適切です。

TSUNAGARU-ADVICE

まず押さえたいこと

画素をメモリへ横方向に順番に配置する場合、座標(x、y)の画素が先頭から何番目にあるかを考えます。1行には640画素あるので、まずy行分の画素数を数え、そこにxを加えることで対象画素の位置を求められます。

迷ったときの判断軸

直線の始点と終点から、xが7のときのy座標を先に特定します。その後、画素位置を求めますが、今回は1画素が16ビット = 2バイトなので、画素番号をそのままメモリアドレスにしないことが重要です。画素の位置に1画素当たりのバイト数を掛けて、先頭アドレスへ変換しましょう。

科目Bにつなげるために

特にプロフェッショナルデジタルスキル(システム)試験合格を目指す方は、この考え方を画像データのメモリ配置、座標からアドレスへの変換、バイト数の計算に結び付けましょう。フレームバッファや組込み機器の画面制御など、2次元データを1次元のメモリ空間で扱う問題にも応用できます。