2016-06-15 9 views
1

現代x86プロセッサでブートローダープログラムを実行すると、プロセッサは実アドレスモードで実行されます。命令パイプライニング機能がリアルモードでアクティブになるかどうかリアルモードで実行している場合、現代のx86プロセッサでパイプライニング/ OoOEを利用できますか?

+0

リアルモードでパイプラインが使用可能かどうかについて質問します。システムを起動するとき –

答えて

2

はい、最新のマイクロアーキテクチャのアウトオブオーダーコアは、モードに関係なく基本的に同じ動作をします。違いの大部分はデコーダにあります。最新のCPUが実際に内部的にどのように機能するかについては、Agner Fog's microarch pdfタグ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です。

+1

私はいつも、私がすでに質問の答えを知っていても、あなたの答えを読むことから多くのことを学びます! :)例えば、私はVEXでコード化された命令がリアルモードで利用できないことに気づいていませんでした。 –

+0

@CodyGray:答えが関連する情報にラインから外れなかった場合、SOはかなり退屈な場所になります。私は今、しばらくの間、いくつかの命令がリアルモードで利用できなかった理由の底を知ることを意味していました。命令セットマニュアルは、その事実をいくつかのBMI/BMI2整数命令について文書化するが、「VPBLENDD」のようなAVX2命令については記載しない。私はこの答えを書いている間に最終的に検索するまでわからなかった。私は16ビットオペランドサイズでは使用できないことと何か関係があるのか​​疑問に思っていました。オペランドサイズの接頭辞を無視すると、トランジスタを必要とするものがあります。 –

+1

0xc4 0xc4 0x60(Vmバージョン番号)と0xc4,0xc4,0x58は、NTVDM以前の90年代半ばの16ビットコードではよく使用されていました。彼らは私たちがSoftPCで動いているかどうかを判断しようとしている人たちによってよく使われていました。当時、彼らはBOPコードとしてまばらに文書化されていました。マイクロソフトでは、90年代半ばにNTデバイスドライバキットを使用して半製品化しました。これは、NTVDMがSoftPCをベースにしていたため、驚くことではありませんでした。私は古いNT DDK CDを取り出しました。ファイルはISVBOP.hにあります。 –

関連する問題