2017-12-22 9 views

答えて

2

8086で使用される命令セットは、16ビット命令セットです。つまり、レジスタは0x0000〜0xFFFFの範囲の値しか格納できず、命令は主に16ビット演算(16ビット加算、16ビット減算など)を実行しただけです。レジスタにアドレス/ポインタが含まれていれば、最大64Kバイトのアドレス空間(ROM用とRAM用)で動作していましたが、これは市場では十分ではありませんでした。

セグメンテーションは、16ビットCPUがより大きなアドレス空間をサポートできるようにする方法でした。本質的には、2つの16ビットレジスタを組み合わせることで、アドレス/ポインタがはるかに大きくなる可能性があります。残念なことに(おそらく、CPUのバス上にもっと多くのアドレス行を持っているため「時には不要な」コストを避けるために)、2つの16ビット・レジスタを32ビット・アドレスとして使用する代わりに、「アドレス=セグメント* 16 +オフセット"20ビットアドレスで終わり、8086に1 MiBのアドレス空間を与えます。

「オブジェクト」(オブジェクト指向プログラミングの場合)にアクセス制御と制限が与えられ、ハードウェアによって強制/チェックされる「保護されたオブジェクト」に向けてのプッシュがありました。 "仮想メモリ"のアイデアは浮かんでいます。これらのアイデアは、不運なiAPX 432 CPUにつながりました。 8086がすでに持っていたセグメントに保護(属性と制限)を関連付け、80286で導入された(保護モードが80386で拡張された)「プロテクトモード」につながるという考えにつながった。基本的には;セグメントの(利点の)元の理由は、(32ビット命令セットのコストなしで)アドレス空間を増やすことでした。後で保護とメモリ管理のようなものがレトロフィットされました(そして、ページングに賛成して放棄される前にソフトウェアによってほとんど使用されませんでした)。

関連する問題