ビットパワーの体験
64KBの壁と640KBの壁
8086には64KBの壁、640KBの壁というメモリに関する2種類の制限がある。
前段階として、8086ではアドレスを20ビットで表現していて、
上位4ビットで対象のセグメントを、下位16ビットでオフセットを表している。
64KBの壁
イメージとしてはメモリを複数グループに分けて管理し、
オフセットはそのグループの中でのメモリ位置を示している。
オフセットアドレスは2の16乗、つまり0 ~ 65535(64 × 1024)までの範囲のメモリの位置しか指定できない。
つまり連続して扱える領域は64KBということ。
64KBの壁が最も影響するのは配列を使うとき。
char型の配列を扱う場合、最大で65535個の配列しか確保できない。
640KBの壁
上位4ビットは0~15の範囲を表すので、下位16ビットと合わせると、
1Mバイトの範囲を表すことができる。
2の4乗×2の16乗 = 1MB
ん、1MBまでアクセスできるじゃん?と思うけど、
実際は先頭の640KBまでをメモリに割り当てて、それ以上のアドレスはBIOS用のROMなどの別用途に使用
することが多かったんだって。
これまでの歴史を学びながら、現代の64ビットCPUの勉強につなげていきたい。
最後の章まで気になったところをちょいちょいアウトプットしていくぞ。