4

Intel 8086 エミュレーターに取り組んでから約 1 か月が経ちました。エミュレーションをより正確にし、PIT と正しく同期させるために、サイクルのカウントを開始することにしました。

各命令に使用されるクロック サイクルは、Intel のユーザー マニュアルに詳しく記載されていますが、それらの計算方法を知りたいです。たとえば、XCHG mem8,reg8命令について次の手順を推測しました。マニュアルによると、正確に 17 クロック サイクルかかります。

  1. 命令の 2 番目のバイトをデコードします。+1 サイクル。
  2. 最初のオペランドをメモリから一時的な場所に転送する: +7 サイクル。
  3. 第 2 オペランドをレジスタからメモリの宛先に転送: +8 サイクル。
  4. 最初のオペランドを一時的な場所からレジスタの宛先に転送します: +1 サイクル。

しかし、私の推論がすべての命令でうまくいくとは限らないので、私はおそらく完全に間違っています。たとえば、命令が 8 クロック サイクルしかかからないのに、PUSH reg命令が 11 クロック サイクルかかる理由がわかりませんPOP reg

それでは、各命令でクロックサイクルがどのように費やされているか、またはそれらの数値がどこから来たのかを理解するための一般的な方法を教えていただけますか?

ありがとうございました。

4

2 に答える 2

4

サイクルがどのように計算され、実際に何が行われるのclockかは、ハードウェア担当者と一緒に作業する機会があり、彼らがどのようなモデルで動作するかを見るまでは、私にとっても謎でした. 答えはハードウェアにあります

CPU並列マシンであり、プログラマーにとっては、その設計は通常、パイプラインやそれを実装するために必要なマイクロ命令などを説明するいくつかの単純化された用語で説明さCPUれますが、並列マシンのままです。

命令が完了するには、多くの小さなbit-size信号が端から端まで流れなければなりません。いくつかの場所では、処理ユニットはすべての入力bitが到着するまで待たなければなりません。この相互に調整された動きは、すべての多くの部分に集中的に送信stageされる によって駆動されます。clock-signalによって叩かれるそのような各動きclock-signalは と呼ばれcycleます。

そのため、作業を完了するために実際に必要な の数を知るには、 がどのように接続されているか、 が通過する必要がある場所、および必要な同期ポイントがどこでいくつcycleあるかを考慮する必要があります。wirebit

ここに画像の説明を入力

回路図が公開されているかどうかは疑問Intel 8086であり、たとえ公開されていたとしても、それが読めるかどうかは疑問です. しかし、唯一の正解はそこにあります。他のすべては単なる単純化であり、ソフトウェアで正確なハードウェアの動作を再現するには、ハードウェアをシミュレート/解釈する必要がありCPUます

以下も参照してください。

于 2015-04-10T15:31:03.807 に答える
2

質問は非常に広いので、ここではPUSH対のPOP質問のみに対処します。

PUSH は基本的に、レジスタからメモリへの MOV (およびレジスタのインクリメント) です。POP は、メモリからレジスタへの MOV (およびレジスタのデクリメント) です。

2-61 ページを見ると、次のことがわかります。

MOV

レジスタ、メモリ 8+EA 1 2-4 MOV BP、STACK_TOP

メモリ、レジスタ 9+EA 1 2-4 MOV COUNT [DI]、CX

このPOP操作では、スタック ポインターが既にレジスターにあるため、実効アドレス (EA) はゼロです。すぐに実行できます。アドレスが不要になったら、読み取り操作の後のクロックサイクルのどこかで、MOV特別な操作が同時にスタックポインターをデクリメントできると想定することしかできません。POP

このPUSH操作では、書き込みを実行するために必要なアドレスを取得する前にスタック ポインターをインクリメントする必要があるため、EA は 2 になります。ここでは同時実行性を利用できないため、MOV に 9 サイクル、さらに実効アドレス計算 (スタック ポインターのインクリメント) に 2 サイクルが使用されます。

于 2015-04-10T11:26:24.650 に答える