Intel 8086 エミュレーターに取り組んでから約 1 か月が経ちました。エミュレーションをより正確にし、PIT と正しく同期させるために、サイクルのカウントを開始することにしました。
各命令に使用されるクロック サイクルは、Intel のユーザー マニュアルに詳しく記載されていますが、それらの計算方法を知りたいです。たとえば、XCHG mem8,reg8
命令について次の手順を推測しました。マニュアルによると、正確に 17 クロック サイクルかかります。
- 命令の 2 番目のバイトをデコードします。+1 サイクル。
- 最初のオペランドをメモリから一時的な場所に転送する: +7 サイクル。
- 第 2 オペランドをレジスタからメモリの宛先に転送: +8 サイクル。
- 最初のオペランドを一時的な場所からレジスタの宛先に転送します: +1 サイクル。
しかし、私の推論がすべての命令でうまくいくとは限らないので、私はおそらく完全に間違っています。たとえば、命令が 8 クロック サイクルしかかからないのに、PUSH reg
命令が 11 クロック サイクルかかる理由がわかりませんPOP reg
。
それでは、各命令でクロックサイクルがどのように費やされているか、またはそれらの数値がどこから来たのかを理解するための一般的な方法を教えていただけますか?
ありがとうございました。