2016-10-10 2 views
2

インテル・デベロッパー・マニュアルは、プロテクト・モードに切り替えた後、MOV CR0命令が実行フローを変更してプロセッサをシリアライズした直後にJMPまたはCALL命令を直ちに実行することを提案しています。第9章では、コードの例により示唆されるような目的は、プリフェッチ・キューを無効にするためにセクション9.10.2、START.ASM Listing、ライン174から186です:保護モードに入った後、プリフェッチキューを無効にする理由は何ですか?

174 ; enter protected mode 
175 MOV EBX,CR0 
176 OR EBX,PE_BIT 
177 MOV CR0,EBX 
178 
179 ; clear prefetch queue 
180 JMP CLEAR_LABEL 
181 CLEAR_LABEL: 
182 
183 ; make DS and ES address 4G of linear memory 
184 MOV CX,LINEAR_SEL 
185 MOV DS,CX 
186 MOV ES,CX 

なぜ私たちは、このような操作を実行する必要があるでしょうか?そのような短いジャンプは、プリフェッチキュー内の現在のデータを無効にして同じことを再度ロードすることを除いて、フラグまたはセグメントを全く変更しないので、コードはキュー内で同じままではないか?

+1

遠距離ジャンプでなければならず、主な目的は 'CS'を読み込むことです。マニュアルが近いジャンプを使用するのは不思議です。表9-4もそうだ: 'リアルモード命令キューをクリアするために近くにジャンプする ' – Jester

+0

はい遠いジャンプは後で実行される。ただし、プロテクトモードに切り替わった直後は、ジャンプ直前に使用することをお勧めします。 – Amumu

+0

私はそれがプリフェッチキューのプロテクトモードコードをリロードするためだと思います。しかし、なぜ同じコードをリロードする必要があるのか​​分かりません。 – Amumu

答えて

0

だから、私は目的を見つけました:近く

ジャンプが効果的にリアルモード命令キュー

をクリアするには:STARTUP.ASMにメインの初期化手順を説明する表9-5によると、命令待ち行列を再ロードするためだけであり、したがって、以前のリアルモード命令は保護モード命令に置き換えられる。

関連する問題