私はこれをBarry B. Breyの "INTEL MICROPROCESSORS"という本で見つけました。本当ですか?しかし、なぜ?私は実際の8086マイクロプロセッサのリアルモードでは、32ビットレジスタがないことを知っています。 32ビットレジスタにも同じ制限が課されるはずです。32ビットレジスタを使用してリアルモードのメモリをアドレス指定する場合、レジスタの内容は決して0000FFFFHを超えてはなりません。どうして?
答えて
私は、レジスタの内容は無関係であると言います。実効アドレスが0xFFFFのを超えてはならない。
EBP
が値0xFFFFFFF0を持っており、あなたはアドレスが0x10でメモリにアクセスする命令mov EBX, [EBP+0x20]
を使用している場合。レジスタの値が0xFFFFを超えていても、これは完全に動作するはずです。EBP
の値が0xFFF0で、同じ命令を使用する場合は、0x10010のメモリにアクセスします。レジスタは0xFFFFより小さい値を持っていますが、これは動作しません。
マイケル・ペッシュはすでに彼のコメントに理由のヒントを与えた:
メモリ・セグメントは、リアルモードでのセグメント制限を持っています!
リアルモードでは、セグメントの限界チェックは望ましくありません。 286の開発者は、セグメント・リミット・チェックがリアル・モードでスイッチオフされるように回路を開発することができました。これは、回路をより複雑かつ高価にしていたであろう。そこで、セグメント限界を0xFFFFに単純に初期化して、セグメント限界チェックがオンになっているにもかかわらず、実際にセグメント限界チェックを無効にすることにしました。
Intelでは明らかにこの初期値を0xFFFFから0xFFFFFFFFに変更しませんでした。
386では、Michael Petch'esのコメントに記載されている「非現実的なモード」を使用してこの制限を変更することができます。しかし、私が知る限り、インテルの公式文書では、この方法は「正式に」許されていると言います。つまり、この方法は将来のすべてのインテルCPUで動作するとは言いません。
たとえば、386+の「仮想モード」(このモードは保護モードOSがアクティブな間にリアルモードプログラムを実行するために使用されます)では、制限は0xFFFFに固定されます。
- 1. TM4C123GH6PMボードのI2Cを使用してレジスタ・アドレスを送信していません
- 2. 32ビットレジスタ/命令をリアルモードで使用できますか?
- 3. rebase中の競合は決してなくなりません
- 4. ロングモードで64/32ビットレジスタを使用する場合、罰則がありますか?
- 5. PartialViewの内容はjquery load()を使用してwebgridを更新しません
- 6. moq:Setup()を使用する場合、メソッドパラメータの等価性はどのようにして決まりますか?
- 7. FROMアドレスが指定されていない場合は、「デフォルト」のFROMアドレスを取得します。.NET.Mail
- 8. 指定した回数を超えて返す単純なクエリ
- 9. unordered_mapを使用した場合のメモリ割り当て
- 10. プロセスのメモリ開始アドレスを指定してください
- 11. 遊び場Xcodeは決して走りを止めません。
- 12. mPDF(タイムアウト/メモリの問題?)を使用して20を超えるレコードを印刷できません。
- 13. あいまいな選択肢を超えて決して完了しない
- 14. Codeigniterを使用して、プライベートにメソッドを設定したい場合はどうなりますか?
- 15. gnulib-toolを使用してインポートする内容を決定する方法
- 16. header = Noneの場合、pandasを使用してcsvファイル内のヘッダーを決定してください。
- 17. File.Moveを使用している場合はサポートされていません。
- 18. ファイルの内容をファイルから取り出して、ポインタで指定します。
- 19. Windows XPを使用してRAM内の不良バイトのメモリ割り当てを回避する32
- 20. 内容は解決しません
- 21. アクセスしようとしているバケットは、指定されたエンドポイントを使用してアドレス指定する必要があります。
- 22. simple_skusカラムを使用している場合、catalog_product_super_linkにINSERTはありません
- 23. Qtを使用している場合、特定のOS用にコンパイルするには特定のOSを使用しなければなりませんか?
- 24. ブラウザでJavaScriptを直接使用してビデオをキャッシュする(10mを超える場合があります)
- 25. Rは4GB以上のメモリを使用していません
- 26. なぜ:Cocoapodsを使用している場合、そのようなモジュール 'SCRecorder'はありませんか?
- 27. inputNodeが指定されていません。 YUIライブラリを使用する場合
- 28. プログラムはpy2exeを超えて動作しません
- 29. Windowsのプロセスに2GBを超えるメモリを割り当てるにはどうしたらいいですか?
- 30. ボタンの内容がFrameworkelementfactoryを使用して更新されていません
リアルモードとは何ですか?あなたは知っていますか? – Marichyasana
32ビットプロセッサ(386+)では、32ビットレジスタと32ビットアドレッシングをリアルモードで使用できます。 [unrealモード](https://en.wikipedia.org/wiki/Unreal_mode)の場合、アドレスは0xFFFFを超えることができます。従来のリアルモードでは、制限は0xFFFFに制限されています。 –
これはすでに、この本の中で誤解を招く2番目のものです。 – harold