2011-07-12 4 views
6

(ほとんどの)RISCアーチとは異なり、x86命令は可変長です。命令の開始/終了は整列させる必要はありません。コンパイラが1つの命令をページマージンに横たわっているに過ぎない場合は、ハードウェアとコンパイラは、実行不可能なページにまたがるx86命令をどのように処理しますか?

命令の最初のバイトが実行可能とマークされたページの最後のバイトにあるとします。命令の残りのバイトは、実行不可能とマークされた第2ページにある。

このような場合、実行がこの命令に達すると、CPUはどうなりますか?

コンパイラはこのようなケースを扱う必要がありますか?

+1

説明を省略した。 – EJP

+0

次のページ*が*実行可能な場合、動作します。フェッチは、整列されたチャンクで行われ、デコーダのキューに供給されます。別のページのバイトを組み合わせると、フェッチ後、TLBチェック後にしばらく時間がかかるので、ページ分割データのロードとは異なります。 –

答えて

5

ハードウェアはGPFを生成します(テストしてはいけません)。

コンパイラは気にしないでください。

+3

プロテクトモードの初期のiapx286チップでは、これに関連するバグを思い出すようです。境界を越える命令でGPFに失敗するか、内部に収まるだけの命令でGPFが誤って実行されるかのいずれかです。現時点では思い出せません... #trivia :-) –

関連する問題