資料集
ここはhideyosiの学習帳です。いろいろな資料を集めたり整理したりしています。オイラ用のノートなので間違っていたり未完成だったりしますので信用度は相当低いことをあらかじめご了承くださいませ。
2: 2007-01-08 (月) 15:35:39 ソース バックアップ No.2 を復元して編集 現: 2024-01-06 (土) 22:37:42 ソース 編集
Line 7: Line 7:
セグメントとはなんじゃらほい? セグメントとはなんじゃらほい?
-8086CPUは、最大1MBのメモリをアクセスできる。+8086は16bitですね。内部には沢山のレジスタがありますが、ほぼどれも最大16bitです。
-(「アクセスできる」とは、逆に言えば、それ以上メモリ装置が搭載されていても、アクセスできないということ)+CPUがメモリにアクセスする場合、当然メモリの番地を指定しなくてはなりませんが、そのためのレジスタも16bitです。
-なぜ????+ん?おかしいですね?。メモリの番地を指定するためのレジスタも16bit。(16進数で4桁です。)そうなると・・・
-メモリの指定には、必ず「番地」を指定しなければいけない。+ 0x0000〜0xffff
-この番地の指定に使われるCPU内のレジスタが16bitしかないから。+です。最大0xffffということは、十進数に直すと・・・65,535・・・え? ''最大''64KB???
-16ビット= 0x0000 〜 0xFFFF まで。十進数に直すと0〜65535。 +そうです。CPUの素直な仕組みで考えると、16bitのCPUは、最大64KBしかメモリをアクセスすることができません。・・・しかし、8086は最大1MBを活用することができるのです。いったいどうやって???
-つまり、65,535バイト。あれれれ? たった64KB?????+
-8086はたったこれだけのメモリしかアクセスできない!? +8086CPUは大きなメモリ空間を64KBごとに区切り、各区切りを別の16bitのレジスタで指定することによって、事実上20bit(16進数で5桁)でメモリ番地を指定することができます。この64KBの区切りを''セグメント''と言います。
-「素」の理屈から言えばそうなる。これでは少なすぎるので、8086はちょっと変わった方式を採用している。+
-メモリアドレスを20ビット(16進数で5桁)で表現できるようになっている。これなら、0x00000〜0xFFFFF。つまり、1,048,575バイト。1MBとなる。+ メモリ番地を20ビットで表現。これなら、0x00000〜0xFFFFF。つまり、1,048,575バイト。1MBとなる。
-しかし、レジスタは16ビット(16進数で4桁)。これでどうやって20ビットを表現するのか?+具体的には、「セグメントアドレス」+「オフセット値」でアドレスを表現する。
-「セグメントアドレス」+「オフセット値」でアドレスを表現する。+セグメントアドレスもやはり16ビットでしか表現できない。で、それ+何番地ずれているかを表現する。
-セグメントアドレスもやはり16ビットでしか表現できない。で、それ+何番地ずれているかを表現する。これが「セグメント」という概念。+たとえば、物理的に0x21000番地のメモリにアクセスしたいとする。その場合、レジスタはみな16ビットではあるが、
-たとえば、物理的に0x112233番地のメモリにアクセスしたいとする。その場合、レジスタはみな16ビットではあるが、+ セグメントアドレスに:0x2000  (セグメントベースという) 
 + オフセットアドレスに:0x1000  (オフセット値という)
-セグメントアドレス:1122 +とセットすると、
-オフセットアドレス:0033+
-これで表現する。図にするとこうなる。+ 0x2000x16 = 0x20000 
 +               + 
 +             0x1000 
 + -------------------- 
 +             0x21000 
 +こう解釈して内部回路に信号を送り、0x21000番地のメモリにアクセスしてくれる。 
 + 
 +図にする・・・
 物理アドレス  物理アドレス


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 5295, today: 1, yesterday: 2