基礎用語 リトルエンディアン
リトルエンディアン
●概要 リトルエンディアンの仕組みを理解するために必要な、下記の解説にある「バイト」や16進数については、解説「2進ビットパターン・論理演算」を参照願います。また、「ダブルワード」等については、解説「数値表現」を参照願います。 「リトルエンディアン」とは、ダブルワードといった複数バイトの数値データをメモリに格納する際の方式の1つです。基本的に、プロセス(プログラムの実行単位)に対応するプロセスメモリ上にある数値は、リトルエンディアン方式で格納されています。ただし、家庭用ゲーム機のエミュレータ等では、例外的に別の格納方式である「ビッグエンディアン」で格納されているケースもあります。バイナリファイルに格納される数値データも、プログラムの処理上でプロセスメモリに読み込まれるものならば、基本的にリトルエンディアン方式で格納されることになります。 ●詳細 データを格納する記憶装置であるメモリは、1バイト(8ビット)ごとに区切られ、そのひとつひとつに番地が設定されています。そのため、2バイト以上の複数バイトの数値データをメモリに格納する際には、その数値データを1バイト単位に分解して格納することになります。 ここで、1バイト単位に分解された数値データをメモリに格納していく順序をバイトオーダー(エンディアン)と呼びます。 リトルエンディアンとは、1バイト単位に分解された数値データを最下位のバイト(LSB)から順番にメモリに格納していく方式です。これとは逆に、最上位のバイト(MSB)から順番にメモリに格納していく方式をビッグエンディアン、また、この2つのデータ格納方式の両方を使用可能なバイエンディアンという方式もあります。 リトルエンディアン方式は、一般的なパソコンに用いられているIntel社製のCore iシリーズ等のプロセッサや、Alphaプロセッサで使用されています。一方、ビッグエンディアン方式はMotorolaのプロセッサや一部のゲーム機のプロセッサ等で使用されています。MIPSのプロセッサはバイエンディアンです。 なお、エンディアン方式はデータ送信におけるデータ送信順序を指す意味もあります。 ●16進数の数値「0x12345678」をリトルエンディアン方式でメモリに格納する例 まず、この数値を1バイト単位に分解すると「0x12, 0x34, 0x56, 0x78」となります。 最下位バイトの「0x78」から最上位バイトの「0x12」まで順番にメモリの各番地に格納していくと、 「0x78, 0x56, 0x34, 0x12」というように格納され、プロセスメモリエディタ等で確認することができるバイナリデータとしては「78563412」となります。 ●数値の通常表示とリトルエンディアン表示 当ソフトウェア『うさみみハリケーン』には、式入力演算・進数変換ツール「UMEC」(UMEC.exe)を同梱しています。このツールでは、入力した数値あるいは数式の演算結果を、2進数(Binary)・10進数(Decimal)・16進数(Hex)での通常表示および、16進リトルエンディアン(Hex-LE)表示で、一括して表示することができます。そのため、このツールで演算や進数変換を試してみることが、16進数やリトルエンディアンの理解に役立つと見られます。 |