8086のセグメントの最小サイズと最大サイズはどれくらいですか?そして、最小限のために、私たちが持つことができる個別のセグメントの最大数はいくらですか?すべてが一度にアクティブである必要はありません。 (重複は許容されます)8086のセグメントの最大サイズと最小サイズはどれくらいですか?
答えて
最大サイズは64Kです。最小値はありません。最初のバイトのみを使用できますが、セグメントは常に64Kです。たぶん例外は最後のセグメントです - 最新(0xFFFF)は16バイトで、最新のものは32,48,64バイトです。一般に、8086セグメントは16ビットアドレスレジスタで64Kを超えるアドレス指定を行う方法です。
0x8000以上のセグメントは、8086で0に折り返されます(80286+では0x1000000より上のバイトにアクセスします。互換性のために、PCはA20を無効にして8086互換ラップアラウンドを得ることができます)。 – rcgldr
8086マイクロプロセッサでは、合計メモリアドレッシング能力は1MBです。 1MBを表すためには、最小4桁の16進数、すなわち20ビットが必要である。 8086マイクロプロセッサは14個の16ビットレジスタを有する(すなわち、20ビットアドレスを表すためのレジスタはない)。したがって、合計メモリは16個の別個の論理セグメントに分割され、各セグメント容量は64KB(すなわち、16 * 64 KB = 1MB
)である。
"... 16個の論理セグメントに分割されました"メモリは、重複する65536個のセグメントに分割されています。 –
8086セグメントレジスタは16ビットなので、65536個のセグメントがありますが、重複しています。 20ビットの物理アドレスは、セグメントレジスタを左に4ビットシフトし、アドレスオフセットを加算することによって得られる。つまり、セグメントは任意の16バイトのアライメントで開始することができます。オーバーラップすると、1つのメモリ位置を追加する方法はたくさんあります。例えば、0000:0010
と0001:0000
は同じ場所を扱います。
アドレスオフセットも16ビットなので、任意のセグメントのアドレス指定可能なサイズは65536バイトです。したがって、セグメントの最大サイズは65536バイトで、最小サイズは16バイトですが、8086ではセグメント全体が保護されずに読み書きされる可能性があります。
あなたの最後の質問「個別のセグメントの最大数」は、16 個別のセグメントです。それ以上のものは重複します。
"...最小は16バイトです"これはハードウェアに関しては意味がありません。これは、プログラムのセクション(セグメントとも呼ばれます)を扱うときに当てはまります。 –
@SepRoland、ちょうどその質問に答えようとしています。可能な限り小さいセグメントは16バイトです。これはセグメントレジスタの分解能です。もしデザイナーが重複していない16個のセグメント(別の答えに暗示されているように)を意図していたら、セグメントレジスタには16個ではなく4個のビットしか与えられませんでした。 –
@niloofarlatifianあなたは今質問を変更しました。私たちの足元の砂。最大セグメント数は65536です.8086では「アクティブセグメント」はありません。セグメントレジスタは、1MBのメモリをアドレス指定する方法を提供します。 –
リアルモードでは、セグメントには「サイズ」がありません。メモリはreal mode
のセグメントで区切られません。セグメントは、より大きなエンティティの一部です:segment+offset
- 両方とも実効アドレスの計算に使用されます。これらは、CPUがメモリバイトのアドレスを計算することを可能にするセグメントとオフセットの両方であり、バイトはIntelプラットフォーム上でアドレス可能な最小単位です。 「セグメント+オフセット」については、プログラマは“far pointer”
を含むとも言います。反対に、“near pointer”
は、両方とも同じセグメントを有する、他のポインタと比較する相対ポインタである。したがって、遠いポインタは、16ビットのセグメントセレクタと16ビット(またはモードに応じて32ビット)のオフセットからなるポインタであるため、遠いポインタの合計サイズは16ビットで32ビットでした32ビットモードでは48ビットです。セグメントセレクタは、遠いポインタからメモリにアクセスする前に、特別なセグメントレジスタにロードされる。一度に遠方のポインタをロードする特別な指示があります。 Intel 8086
で最も一般的な命令は、メモリから一対のレジスタ、すなわち1つのセグメントレジスタ(DS
またはES
)と1つの一般(オフセット)レジスタに遠いポインタをロードするLDS
およびLES
でした。 LFS
、LGS
とLSS
FS
ため、GS
それぞれ(Intel 80386
で導入)SS
セグメント・レジスタ:他のレジスタのバージョンもあります。セグメントは、16ビットリアルモードまたは16ビットプロテクトモードの場合、16ビットモードで非常に便利です。 16ビットのリアルモードでは、セグメントレジスタの値に16を掛けた後、オフセットが加算されました。これが実効アドレスの計算方法です。しかし、再び、リアルモードのメモリは「セグメント化されていない」ため、セグメントの最小サイズまたは最大サイズはありませんでした。16ビットリアルモードでは、DSレジスタとSIレジスタの両方にFFFFをロードすると、理論的には(16 * 0xFFFF)+ FFFF = メモリの第1バイトにアクセスできます(実際の制限はA20-line
などのように適用されます) - または約1メガバイト。
32-bit mode
の下では、すべてのセグメントレジスタが本質的に同じ場所を指しているためセグメントレジスタにはほとんど必要がないため、セグメントレジスタをロードする必要はありません。
64-bit modes
の下では、これらの命令は実装されておらず、オペコードによってアクセス違反が発生しました。インテルがVEX
- "ベクトル拡張 - (SSE2
)を実装して以来、インテルはLDS
とLES
のオペコードを使用して、VEX
プレフィックスで使用し始めた。 protected mode
において
、セグメントサイズなどの概念があり、しかし、再び、そこには最小サイズがなく、または最小サイズはアーキテクチャの最小割り当て単位、例えば16バイト16-bit mode
で又はました4キロバイト32-bit mode
保護モードでは、セグメントレジスタは、16ビットのリセットのように16を乗算した値を保持しませんアルモードではなく、セレクタテーブル内のインデックス。インテル80286's protected mode
の導入以来、プロセッサのアドレス空間を約1メガバイトから224バイト(16メガバイト)まで拡張しますが、より大きなオフセットを使用することはできません。代わりに、16ビットのセグメントレジスタは、オフセットが追加される24ビットのベースアドレスを含むセグメント記述子のテーブルへのインデックスを含むようになりました。最大セグメントサイズは64キロバイトでした。 Intel 80386
以降のプロセッサでは、保護モードは80286保護モードのセグメンテーションメカニズムを保持しますが、セグメンテーションユニットと物理バスの間の第2アドレス変換レイヤとしてページングユニットが追加されています。また、アドレスオフセットは(16ビットではなく)32ビットであり、各セグメント記述子のセグメントベースも(24ビットの代わりに)32ビットです。その結果、最大セグメントサイズが理論上の最大値4GBに増加しました。興味深いことに、この考え方とは異なり、32ビットオペレーティングシステムでは4GBという物理的な制限はありません。たとえば、Microsoft Windows Server 2008 32ビットなどの32ビットサーバーオペレーティングシステムでは、最初に導入された物理アドレス拡張(PAE)によって、64 GB(Windows Server 2008 EnterpriseおよびDatacenterエディション)にアクセスできます。 Pentium ProのIntel、AthlonプロセッサのAMDの3つのレベルのページテーブル階層を定義しています。32ビットではなく64ビットのテーブルエントリがあり、これらのCPUは4ギガバイトを超える物理アドレス空間に直接アクセスできます理論的には、32ビットOSは理論的に2^64バイト、つまり17,179,869,184ギガバイトにアクセスできますが、セグメントは 4 GBで制限されています。
- 1. memcachedの最大鍵長と最大サイズはどれくらいですか?
- 2. webRTCデータチャネルメッセージの最大サイズはどれくらいですか?
- 3. SockJSメッセージの最大サイズはどれくらいですか?
- 4. ハッシュテーブルの最大サイズはどのくらいですか?
- 5. 東京キャビネットの最大サイズはどのくらいですか?
- 6. Electron BrowserWindowの最大サイズと最小サイズの設定
- 7. zlibのdeflate()またはinflate()の最小/最大入力サイズはどれくらいですか?
- 8. C++とjavaのマップオブジェクトの最大サイズはいくらですか?
- 9. cassandra cqlsh_historyとcli.historyの最大サイズ/行数はどれくらいですか?
- 10. 優先/最大/最小サイズのテキストラッピングJLabels
- 11. EWSのItemViewの最大サイズはいくらですか?
- 12. Azure VMのMSSQL Server用ディスクの最大サイズはどれくらいですか?
- 13. Google Guavaキャッシュのデフォルトの最大サイズはどれくらいですか?
- 14. iPhone/Androidアプリのログファイルの最大サイズはどれくらいですか?
- 15. 現代GPUのテクスチャメモリの最大サイズはどれくらいですか?
- 16. HSQL DBのテーブル名の最大サイズはどれくらいですか?
- 17. UINavigationBar titleViewの最大サイズはいくらですか?
- 18. Sidekiqジョブペイロードの推奨最大サイズはどれくらいですか?
- 19. ローカルフロート配列の最大許容サイズはどれくらいですか?
- 20. TCL内のテーブルの最小サイズと最大サイズを調整します
- 21. クラスファイルの最適サイズはどれくらいですか?
- 22. Androidアプリの最適サイズはどれくらいですか?
- 23. Androidのレイアウト重量(最小サイズと最大でいくつかといくつかのオブジェクトを混ぜる)
- 24. SQL Serverの最大行サイズとVarchar(最大)サイズ
- 25. memcpy/memsetなどで扱えるバッファの最大サイズはいくらですか?
- 26. サイズ変更可能なパネルを制限する(比率と最小/最大サイズ)
- 27. ExtJSの最小サイズ
- 28. カスタムビュー最小サイズ
- 29. 最大BSSのサイズとデータ
- 30. バブルチャートのバブルの最小サイズと最大サイズを設定する方法はありますか?
この質問の全文を単純にコピーして貼り付けて、[見つけたものを見る](http://www.eazynotes.com/notes/microprocessor/slides/memory-segmentation-of-8086.pdf) Google *へ。それはあなたの質問への正確な答えを含んでいます。 –
良い質問です、私の返事を見てください。私はなぜ人々が質問を落としたのか分かりません。 –