再配置の話題になるとアドレスがいろいろでてくるので、アドレスの計算について自分なりに整理した。
*** アドレスの計算いくつか
- アドレスの計算を簡単にできるようになりたい。
- そこで自分なりにまとめておく。
- 32ビットアーキテクチャでバイトアドレッシングを
想定する。
- するとアドレス空間のサイズは、K->M->G で、4Gであ
り、単一のアドレス空間にて取り扱えるメモリの最大
値は4GB。
- アドレスの2進数表記は32桁、16進数表記は8桁にな
る。
b: 00000000 00000000 00000000 00000000
x: 00 00 00 00
- すると、アドレス0x0から0x100がどれだけのバイト
サイズの領域かというと、16進数で100バイトという
こと。そうか、要は16進<->10進になれておけばいい
んだ。
- 16進と10進
0x00000001 <-> 16^0 = 1
0x00000010 <-> 16^1 = 16
0x00000100 <-> 16^2 = 256
0x00001000 <-> 16^3 = 4096
0x00010000 <-> 16^4 = 65536
0x00100000 <-> 16^5 = 1048567
0x01000000 <-> 16^6 = 16777216
0x10000000 <-> 16^7 = 268435456
0xFFFFFFFF <-> 16^8 - 1 = 4294967295
- 巾をつかった表示
0x00000001 <-> 16^0 = 2^0 = 1
0x00000010 <-> 16^1 = 2^4 = 16
0x00000100 <-> 16^2 = 2^8 = 256
0x00001000 <-> 16^3 = 2^12 = 4K
0x00010000 <-> 16^4 = 2^16 = 64K
0x00100000 <-> 16^5 = 2^20 = 1M
0x01000000 <-> 16^6 = 2^24 = 16M
0x10000000 <-> 16^7 = 2^28 = 256M
0xFFFFFFFF <-> 16^8 - 1 = 2^32 = 4G - 1
- 16進と割合
10進だと100の半分は50だ。では16進では?
0x100の半分は、
1234567 8 9ABCDEF
なので、0x80。そうか8は何かの半分なんだな。
10進とちがって1/4が表現しやすい。
0x100の1/4は、0x40、3/4は、0xC0、などなど。
さて、8は半分なので、32ビットアドレス空間の真ん
中あたりというのは、
0x80000000
ということ。
- 上位16ビットと下位16ビット
さて、アドレスを16で分割する。0x00010000 は64K
なので、上位16ビットは64K単位の領域を指定してい
うことになる。このあたりがセグメントシステムの
計算か。
こつこつ。
0 件のコメント:
コメントを投稿