現代x86プロセッサでブートローダープログラムを実行すると、プロセッサは実アドレスモードで実行されます。命令パイプライニング機能がリアルモードでアクティブになるかどうかリアルモードで実行している場合、現代のx86プロセッサでパイプライニング/ OoOEを利用できますか?
答えて
はい、最新のマイクロアーキテクチャのアウトオブオーダーコアは、モードに関係なく基本的に同じ動作をします。違いの大部分はデコーダにあります。最新のCPUが実際に内部的にどのように機能するかについては、Agner Fog's microarch pdfとx86タグwikiのその他のリンクを参照してください。
16ビットモードでは、ページングが無効の32ビットモードに非常に似ていますが、デフォルトのアドレスサイズとオペランドサイズが異なるため、余分なシリコンが異なる動作をする可能性があります。
私は、セグメントがゼロでないベースを持つ場合、AMD CPUがわずかに遅いことを読んだことがあります。 (または私は16ビットモードで推測:セグメントが登録したときに16ビットモードでは、それらを直接使用しているので、自分自身は、むしろ記述子のセレクタであるより、ゼロ以外の値に設定されている。)
many common 16bit idioms like loop
are terribleことを覚えておいてください。
また、部分レジスタの減速は、慎重でないと、アウトオブオーダーの実行を容易に妨げる可能性があります。 Intel P6ファミリおよびSnBファミリCPUは部分レジスタの名前を別々に変更するため、AXへの書き込みはEAX/RAXの全内容に間違った依存関係を持ちません。 SnBの前にCPUを後でマージするときにはストールが発生する可能性があります。また、Haswellの前にSnBのマイナーなスローダウンもあります。
他のすべてのマイクロアーキテクチャでは、mov ax, 5
の読取り変更書込みがeax
と扱われているため、従属値チェーンax
が破損することはありません。これは、慎重でないとアウト・オブ・オーダーの実行に大きな問題になる可能性があります。
Agner Fogのマニュアルを読んでください。
16ビットアドレッシングモードがうまく機能しない可能性があります。忘れてしまいます。 32ビットコードは高速である必要はなく、64ビットコードは16ビットアドレスをまったく使用できません。 (64ビットコードのアドレスサイズプレフィックスはアドレスサイズ= 32ビットを意味する。)(BMI2整数命令like pext
含む)
VEX符号化された命令は、リアルモードでは使用できません。 This Intel forum topicは、保護モードへのトラップとしてマシンコードを使用している既存のソフトウェア(NTVDM)が原因である可能性があることを示しています。 (すなわち、VEXが使用するLDS/LESと同じ不正オペランド)。したがって、VEXコード化された命令を生成することは、後方互換性のために重要である。#UD
が重要である。
SSEはまだリアルモードで利用できますが、if you enable it with the right CR settingです。
私はいつも、私がすでに質問の答えを知っていても、あなたの答えを読むことから多くのことを学びます! :)例えば、私はVEXでコード化された命令がリアルモードで利用できないことに気づいていませんでした。 –
@CodyGray:答えが関連する情報にラインから外れなかった場合、SOはかなり退屈な場所になります。私は今、しばらくの間、いくつかの命令がリアルモードで利用できなかった理由の底を知ることを意味していました。命令セットマニュアルは、その事実をいくつかのBMI/BMI2整数命令について文書化するが、「VPBLENDD」のようなAVX2命令については記載しない。私はこの答えを書いている間に最終的に検索するまでわからなかった。私は16ビットオペランドサイズでは使用できないことと何か関係があるのか疑問に思っていました。オペランドサイズの接頭辞を無視すると、トランジスタを必要とするものがあります。 –
0xc4 0xc4 0x60(Vmバージョン番号)と0xc4,0xc4,0x58は、NTVDM以前の90年代半ばの16ビットコードではよく使用されていました。彼らは私たちがSoftPCで動いているかどうかを判断しようとしている人たちによってよく使われていました。当時、彼らはBOPコードとしてまばらに文書化されていました。マイクロソフトでは、90年代半ばにNTデバイスドライバキットを使用して半製品化しました。これは、NTVDMがSoftPCをベースにしていたため、驚くことではありませんでした。私は古いNT DDK CDを取り出しました。ファイルはISVBOP.hにあります。 –
- 1. x86のリアルモードでのUSBコントロール
- 2. SSEをサポートするx86プロセッサで利用できるXMMレジスタの数はいくつですか?
- 3. x86プロセッサ用のgccでコンパイル・バリアの実行時オーバーヘッド
- 4. 異なるプロセッサ(x86アセンブリ)でコードを実行する
- 5. x86リアルモード(アライメント)でスタックポインタアドレスを選択
- 6. Chromeの「現場で」Javascriptコードを実行していますか?
- 7. メソッドが現在のクラスでまだ実行されていない場合は、メソッドを実行しますか?
- 8. 現在のデータベースが利用できない場合、C3POは別のURLに接続できますか?
- 9. Javaスレッドはどのプロセッサで実行されていますか?
- 10. Linuxカーネルは、RAMからコードを実行できないプロセッサ上で実行できますか?
- 11. x32プラットフォームとx64プラットフォームでx86ビットを実行できますか?
- 12. x86リアルモードでグローバル変数にデータを格納する方法ISR?
- 13. コレクションに追加linqでまだ利用できない場合
- 14. は、レールのサーバーで実行することはできません - 実行している場合、 `、Macでは
- 15. SharePointでサービスを利用できない場合のカスタムエラーページ
- 16. プロセッサでx86 CPUIDの戻り値を変更できませんか?
- 17. URLForUbiquityContainerIdentifierはネットワークアクセスが利用できない場合はnilを返しますか?
- 18. Pythonプログラムを実行している場合は、実行中の.pyファイルを編集できますか?
- 19. "Program Files(x86)"から64ビットDIFXAPPを実行できますか?
- 20. 近代的な(パイプライン型/スーパースカラ型)プロセッサのx86リコメンデーションのパフォーマンス
- 21. 32ビットレジスタ/命令をリアルモードで使用できますか?
- 22. プラットフォームターゲットがx86でない場合コンパイラエラーを生成します
- 23. ログファイルが利用できない場合は失敗しない
- 24. アクティビティナビゲーションスプラッシュでインターネットが利用できない場合の防止
- 25. x64モードで実行しているときにx86ハッシュ値を生成できますか?
- 26. インターネットが利用できない場合、Android Queue Serverはリクエストしますか?
- 27. インターネットが利用できない場合、Androidアプリがクラッシュする
- 28. インターネットが利用できない場合、アプリケーションがクラッシュする - Android
- 29. Windowsアプリケーションを実行できない場合のWSLの利点は何ですか?
- 30. R行列の行をNAsを省略した他の行列で利用できる場合
リアルモードでパイプラインが使用可能かどうかについて質問します。システムを起動するとき –