セグメントディスクリプタに関して3章にはアセンブラでの記述があります。
dw 0xFFFF ; limit:0xFFFF
dw 0x0000 ; base 0~15ビット
db 0x01 ; base 16~23ビット
db 0x9A ; P:1, DPL:0, Code, non-conforming, readable
db 0xCF ; G:1, D:1, limit 16~19ビット:0xF
db 0x00 ; base 24~32ビット
これをC言語のデータ構造として表現してみると
typdef struct _segdesc { /* 合計 8バイト */
unsigned short limit_low;
unsigned short base_low;
unsigned char base_mid;
unsigned char type;
unsigned char gd_and_limit_high;
unsigned char base_high;
} segdesc;
という感じです。セグメントのベースアドレスは3つに分かれてます。最初はunsigned short型のbase_low、次はunsigned char型のbase_mid、最後は
unsigned char型のbase_highです。インテルはリトルエンディアンなので、
unsigned short型の場合、下位バイトが下位アドレス、上位バイトが上位アド
レスになります。つまり、base_low, base_mid, base_highを各バイト単位で見
ていくと、下位バイトが下位アドレスに必ずあります。
過去のまとめについてはこちらです。