セグメント:オフセット、これは 感覚的なものと 実際に 手計算したもので 別に意味は無いのですが 感覚が おかしかった ということを 認識するためのものです。セグメント:オフセット 方式でアドレスを表すので すが 直感的なものと 大いな相違があるという事です。
これは適当に見つけたものですので、本当のもの は個々のデーターシートなりを 参照の事
8008 8bit CPU 18 pin d0-d7 16KBytes 2^14= 16384 8080 8bit CPU 40 pin A0-A15 64KBytes 2^16= 65536 8088 16bit CPU 40 pin A0-A19 1MBytes 2^20= 1048576 8086 16bit CPU 40 pin A0-A19 1MBytes 2^20= 1048576 80286 16bit CPU 68? A0-A23 16MBytes 2^24=16777216 2^16=65536 FFFFh --->65535d
通常 16bit ということで考えられる事は 2^16 ということで 65Kbytes を アクセスするということに なると考えられます 何で 8bit CPU が 2^8 つまり 256 でなく 16KByte とか 64KByte とかという メモリを アクセスする事が出来 るのかは わかりません。CPU に なんらかの変換機能を持たせておく事が必要で は無いかと 考えられます。XX bit CPU といっても アドレスに付いては一致し たものが 無いようです
ここで まず 8088 ものを考えると この場合は たまたま アドレスが 20 個 の 端子で 使用可能ということで 2^20= 1048576 つまり 1MBytes を アクセス することが出来ます。 一方 16bit という制限から 2^16=65536 64Kbytes しか 取り扱えない事になります。ほたら 16bit 2個使えば良いということでそのま ま考えると 2^32=4294967296 4Gbytes 可能となりますが これは アドレスが 20 個敷かないので 最大でも 1MBytes しか扱えないようです。つまり この 数を増 やせば もっと多く取り扱える様です。
16bit のものを 2個使用してメモリのアドレスを 決める方法として segment:offsetというもので 取り扱うように 決めたようです。こういう仕様な のですから とやかくいうわけには ならないようです。
表し方としてまあ 2^16=65536 を 基本にかんがえたのか どうかは 不明です が 64KBytesを 一つの塊として 扱う方法を考えたようです
FFFFFh ---> 1048575d (2^20=1048576) FFFFh ---> 65535d (2^16= 65536) (2^4=16) F0000h + FFFFh = FFFFFh F000h X 10h + FFFFh =FFFFFh という 考えかどうかは 知りませんが F000 の 部分 と FFFF の 部分に 分けて アクセスするように 考えているようです
理解しにくかったのは このことです つまり F000 の部分は F000 で もうそ れ以上の 数は 意味がないという 前提が成り立つということがわからなかった のです。ちなみに F000 の部分を セグメント とというようです FFFF の 部分 を オフセット というようです
F000h X 10h + FFFFh = FFFFFh セグメント X 10h + オフセット = 実際のアドレス
ここで例えば セグメント は F000 で もうそれ以上は意味が無いよ といっ ても データーとして F001h というものは考える事は可能です。一方同じ値を 別の表現で表す事も出来ます。
F000h X 10h + 0000h = F0000 (983040d) ... EFFFh X 10h + 0020h = F0010 (983056d) ---- F000h X 10h + 0010h = F0010 (983056d) ---- 同じ値であるが F001h X 10h + 0000h = F0010 (983056d) ---- ... F000h X 10h + FFFFh = FFFFF (1048575d) ---- 上限と考えられるもの ... F001h X 10h + FFFFh = 10000F (1048591d) ---- 本来は 無視されるもの FFFFh X 10h + FFFFh = 10FFEF (1114095d)
16進数というのは 16個で 桁が上がる ということで 10FFEFh というもの に 10h 加えると 10FFFFh に なります FFFFh というのは 64KBytes というので それより 16bytes 少ない ということです。
セグメント:オフセット での アドレスを 表すのであるが セグメント が 一個異るというのは 高々 16個の 相違にしか過ぎない 感覚としては セグメ ントと セグメント は 分離されているような感覚であった。
アドレスをどのように表すかは置いといて 考え方としては セグメント の 値として FFFFh というものもある もしアクセスできるのであれば このアドレ スまでアクセスは可能ということですが 幸いというか不幸というか 余分にアク セス出来るのは 高々 64KBytes より 16bytes 少ない値であるということ、感 覚としては もっと多いように感じられる。
にゃんたろう 拝!
2008年 3月20日 (木) 21:42:12 JST