2017-03-01 7 views
2

歴史的な関心事で、アセンブラの8086互換性を実装する場合、どのオペランドがESC命令で有効と考えられますか? 8086から8086 ESC命令のオペコードは何ですか

ESC opcode, source

opcodeは63とsourceの範囲0で即時であることを私は知っているプログラマのマニュアルは、レジスタまたはメモリです。しかし、どのようなレジスタをエンコードすることができますか? reg8reg16またはreg16のみ? sourceがメモリの場合、オペランドサイズ(mem8またはmem16)は関係しますか?基本的には

、上記の両方が本当に(例えば、esc 0x01, chesc 0x01, bpの両方が同じ結果を生成する、など)命令エンコーディングの観点から重要ではありませんが、多分、アセンブラは

そして、最後の制限を強制していました、最低ではなく、ESCオペコードの説明はどこにありますか?

答えて

5

8086には、まとめてESC(コプロセッサへのエスケープ)と指定されたオペコードスペースがあります。範囲はd8からdfまでです。この命令空間内の各命令の後には、modr/mバイトが続き、mod-fieldに応じて、0〜2個の処理バイトが続きます。 8086が2つのレジスタオペランド(すなわち、mod = 11)を有するESC命令に遭遇すると、それはnopを実行する。プロセッサがメモリオペランドを含むESC命令を検出すると、メモリオペランドによって示されるアドレスから読み出しサイクルが実行され、結果が破棄されます。命令が命令ストリームにフックすることをこの機構は、8087で使用される8086

と並行して命令ストリームをデコードすることができ、フェッチからの二つの特別な信号線を用い

は、データを区別することができるコプロセッサは、フェッチ:opcodeバイトの3つの利用可能なビットと、modr/mバイトのregフィールドの3つのビットが6ビットのオペコードを形成します。 modr/mバイトのr/mフィールドは、FPUレジスタスタック上の位置(mod = 11の場合、2つのレジスタオペランドを示す)またはメモリオペランドのいずれかを指定するために使用される。いくつかのオペコードは、r/mフィールドの内容に応じてさまざまな命令をエンコードします。これらのすべての場合において、1つの命令はメモリオペランドのために符号化され、8つの他の命令は各可能なレジスタオペランドのために符号化される。

8087は、命令をフェッチした直後に8086がダミーフェッチを実行してアドレスを覚えているときに登録します。メモリからロードする命令の場合、メモリオペランドの追加ワードをロードし、その機能を実行する。店舗の場合には、フェッチの結果を無視して、浮動小数点をディスパッチしようとしたときに停止される8086 8086に非同期8086

8087の行う操作で示されるアドレスにその値を格納します他の命令が進行中である間、ただし、他の暗黙の同期は存在しません。 8087が動作中にBUSYピン(8086のTESTピンに接続)をアサートすると、プログラマは8087が動作を終了し、結果としてWAITラインを解放するまで、wait命令(9b、コプロセッサプロセッサが待機するのを待つ)を発行できます。これは、通常、8087から8087によって書き込まれたメモリオペランドを読み込もうとする前に実行されます。しかし、8087が特定の命令に対してどれくらいの時間を取るかを手動で計算し、ロードが保証されたときにwaitを省略するのが一般的でした。 FPU動作が終了した後。

+0

"命令をフェッチした直後に8086がダミーフェッチを実行してアドレスを記憶したときに8087が登録されます。"この文を理解するまでには時間がかかりました!私はあなたが動詞を間違いなく意味していた名詞として「8087レジスタ」を読んでいました。 「8087の記録はいつ...」、「8086のマークはいつですか?」とお勧めします。他の人は同じ難易度を持つかもしれないし、まったく気にしないかもしれません。 –

関連する問題