インテル・デベロッパー・マニュアルは、プロテクト・モードに切り替えた後、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
なぜ私たちは、このような操作を実行する必要があるでしょうか?そのような短いジャンプは、プリフェッチキュー内の現在のデータを無効にして同じことを再度ロードすることを除いて、フラグまたはセグメントを全く変更しないので、コードはキュー内で同じままではないか?
遠距離ジャンプでなければならず、主な目的は 'CS'を読み込むことです。マニュアルが近いジャンプを使用するのは不思議です。表9-4もそうだ: 'リアルモード命令キューをクリアするために近くにジャンプする ' – Jester
はい遠いジャンプは後で実行される。ただし、プロテクトモードに切り替わった直後は、ジャンプ直前に使用することをお勧めします。 – Amumu
私はそれがプリフェッチキューのプロテクトモードコードをリロードするためだと思います。しかし、なぜ同じコードをリロードする必要があるのか分かりません。 – Amumu