エンベデッドシステムスペシャリスト 2023年 午前2 問04
問題文
ビッグエンディアン方式を採用しているCPUが、表のようにデータが格納された主記憶の1000番地から2バイトのデータを、16ビット長のレジスタにロードしたとき、レジスタの値はどれになるか。ここで、番地及びデータは全て16進表示である。

選択肢
ア:0001(正解)
イ:00FF
ウ:0100
エ:FF00
🔒 解説は解答すると表示されます
ビッグエンディアン方式【午前2解説】
正解の理由
ビッグエンディアン方式では、複数バイトのデータをメモリに格納するとき、最上位バイトを最も小さい番地に置きます。
番地
1000 には 00、番地 1001 には 01 が格納されています。したがって、2バイトをこの順序で16ビット長のレジスタにロードすると、値は 0001 です。この値に一致するのは ア です。解法ステップ
- ロード開始番地
1000のデータを確認します。00です。 - 次の番地
1001のデータを確認します。01です。 - ビッグエンディアンでは、小さい番地のデータが上位バイトになります。
- 上位バイト
00と下位バイト01を並べると、0001です。
選択肢別の誤答解説
- ア
0001:番地1000の00を上位バイト、番地1001の01を下位バイトとして並べた値です。 - イ
00FF:番地1001の01ではなく、ロード範囲に含まれない番地0FFFのFFを使っています。 - ウ
0100:必要な2バイトを逆順に並べた値です。バイト順を逆にするのはリトルエンディアン方式の場合です。 - エ
FF00:ロード範囲に含まれない番地0FFFのFFを使っており、対象となる2バイトとは異なります。
よくある誤解
- 番地の小さい順に並べることと、数値の上位・下位を混同する
ビッグエンディアンでは、小さい番地にあるバイトが上位になります。 - 表に見えている近くのデータもロード対象だと思う
ロード開始番地が1000なので、対象は1000と1001の2番地です。0FFFは含まれません。 - 16ビット値を1バイトずつ逆にする
エンディアンの違いは、複数バイトデータをメモリに配置・解釈する順序の違いです。
補足コラム
同じメモリ内容でも、エンディアン方式が異なると、複数バイトの値の解釈が変わります。今回の2バイト
00、01 をリトルエンディアン方式で解釈すると、上位・下位の順序が逆になり 0100 になります。FAQ
Q. 1バイトのデータでもエンディアンを意識する必要がありますか?
A. エンディアンは複数バイトの並び順を扱う概念なので、1バイトだけのデータでは順序の違いは生じません。
A. エンディアンは複数バイトの並び順を扱う概念なので、1バイトだけのデータでは順序の違いは生じません。
Q. 16進数の
A. 今回は16ビット長の値を求めるため、上位バイトが
00 は省略してよいですか?A. 今回は16ビット長の値を求めるため、上位バイトが
00 であっても省略せず、0001 と表します。関連キーワード: ビッグエンディアン、リトルエンディアン、バイト順、主記憶、レジスタ載入

\ せっかくなら /
エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

