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

選択肢
ア:0001(正解)
イ:00FF
ウ:0100
エ:FF00
🔒 解説は解答すると表示されます
ビッグエンディアン方式【午前2解説】
正解の理由
ビッグエンディアン方式では、複数バイトのデータをメモリに格納するとき、最上位バイトを最も小さい番地に置きます。
番地
1000 には 00、番地 1001 には 01 が格納されています。したがって、16ビットレジスタには、番地の小さい順に 00、01 を並べた 0001 がロードされます。よって、正しい選択肢は ア です。
解法ステップ
-
2バイト分の対象範囲を確認します。
1000番地の00と、1001番地の01が対象です。 -
ビッグエンディアン方式では、最小番地のバイトが上位バイトになります。
-
2バイトを上位・下位の順に並べます。
上位バイトが00、下位バイトが01なので、レジスタの値は0001です。
選択肢別の誤答解説
- ア
0001:番地1000の00を上位バイト、番地1001の01を下位バイトとして正しく並べています。 - イ
00FF:番地1000の00と、対象外の番地0FFFのFFを組み合わせた値です。 - ウ
0100:対象の2バイトは使っていますが、バイトの順序を逆にしています。これはリトルエンディアン方式での並びに相当します。 - エ
FF00:対象範囲ではない番地0FFFのFFと、番地0FFEのFEを取り違えた場合などに生じる誤答です。対象の2バイトからは得られません。
よくある誤解
- ビッグエンディアンでは、メモリ上のバイトを右から読むと思い込むことがあります。実際には、最小番地のバイトがデータの上位側になります。
- 番地やデータが16進数で表されているため、数値として計算する問題だと誤解することがあります。この問題では、各番地にある1バイトずつを正しい順序で並べます。
- 「2バイトのデータ」とあるのに、隣接する番地ではなく、表中の別の値まで使ってしまうことがあります。まず、開始番地から連続する2番地を確認しましょう。
補足コラム
エンディアンは、複数バイトのデータをメモリに置くときのバイト順序です。
たとえば、16ビット値
1234 を格納する場合、ビッグエンディアンでは小さい番地から 12、34 の順に並びます。リトルエンディアンでは、小さい番地から 34、12 の順に並びます。値そのものではなく、メモリ上での配置順が異なります。FAQ
Q. この問題では、なぜ番地
A. ロード開始番地は
0FFF の FF を使わないのですか?A. ロード開始番地は
1000 なので、読み込む2バイトは 1000 番地と、その次の 1001 番地のデータです。Q. ビッグエンディアンでは、メモリの値を逆順に並べるのですか?
A. いいえ。小さい番地から順に読み、その先頭のバイトを上位バイトとして扱います。この問題では
A. いいえ。小さい番地から順に読み、その先頭のバイトを上位バイトとして扱います。この問題では
00、01 の順に並びます。関連キーワード: ビッグエンディアン、リトルエンディアン、バイト順序、主記憶、レジスタ、16進数

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

