エンディアン


リトルエンディアン

8086プロセッサは、アセンブリを機械語に変換した時に奇妙な現象が発生します
即値で設定した値が、機械語になった時に反転しているのです
これは、8086の特殊なメモリ管理によるもので、バイナリ操作を理解するのに重要です

この考え方がわからないと、ビットレベルのダンプ操作などができません
例えば、次のようにDEBUGからプログラムを作って逆アセンブルしましょう
-U 100 105
15F2:0100 B8CDAB        MOV     AX,ABCD
15F2:0103 B82010        MOV     AX,1020
MOV AX, ABCD という命令に着目してみましょう
AXレジスタに即値を代入する機械語は B8h になります
その後に2バイトの即値がきますが、ABCDh という16進数が CDABh という順番になっています

つまり、即値の2バイトの順番が入れ替わっています
このような機能をリトルエンディアンと呼び、8086は「リトル・エンディアン」マシンです
リトルエンディアンでは、ワードのバイトは下位から順にアドレスが割り当てられるのです

バイトごとに下位から順番に並べられるので、上位 ABh と下位 CDh という16進数は
メモリに配置されるときには CD AB という順番に並ぶのです

これは、例えば32ビットCPUになっても同じです
16進数 AB CD EF 00 はリトルエンディアンでメモリに配置すると 00 EF CD AB になります
全てが反転して 00 FE DC BA というように並ぶわけではないので、注意してください




前のページへ戻る次のページへ