web-dev-qa-db-ja.com

プログラムカウンタと命令レジスタ

プログラムカウンタは次に実行される命令のアドレスを保持し、命令レジスタは実行される実際の命令を保持します。それらの1つでは十分ではないでしょうか?

そして、これらのレジスタのそれぞれの長さは何ですか?

ありがとう。

41
Benyamin Noori

常に両方が必要です。プログラムカウンタ(PC)は、次に実行される命令のアドレスを保持し、命令レジスタ(IR)はエンコードされた命令を保持します。命令をフェッチすると、プログラムカウンターは1つの「アドレス値」だけインクリメントされます(次の命令の位置まで)。その後、命令がデコードされ、適切に実行されます。

両方が必要な理由は、プログラムカウンターのみを使用して両方の目的に使用すると、次の面倒なシステムが発生するためです。

[プログラム実行の開始]

  1. PCには0x00000000が含まれています(これはメモリ内のプログラムの開始アドレスです)
  2. エンコードされた命令がメモリからフェッチされ、PCに配置されます。
  3. 命令がデコードされ、実行されます。
  4. 次の命令に移るときが来たので、PCに戻って次の命令のアドレスを確認します。ただし、PCの以前のアドレスが削除されたため問題があり、次の命令がどこにあるのかわかりません。

したがって、メモリからフェッチされた実際の命令を保持する別のレジスタが必要です。そのメモリをフェッチしたら、次の命令をフェッチする場所がわかるようにPCを増やします。

追伸レジスタの幅は、アーキテクチャのワードサイズによって異なります。たとえば、32ビットプロセッサの場合、Wordサイズは32ビットです。したがって、CPUのレジスタは32ビットになります。命令レジスタは次元に違いはありません。違いは動作と解釈にあります。命令はさまざまな形式でエンコードされますが、それでも32ビットのレジスタを占有します。たとえば、アルテラのNios IIプロセッサには、それぞれ異なる方法でエンコードされた3つの異なる命令タイプが含まれています。 ftp://ftp.altera.com/up/pub/Tutorials/DE2/Computer_Organization/tut_nios2_introduction.pdf の6ページを参照してください

Nios IIプロセッサの構造の詳細については、上記のリンクからも学習できます。シンプルなIP CPUです。もちろん、Intelには独自の仕様/設計があり、さまざまです。

53
Haleeq Usman

前述のとおり、 プログラムカウンター(PC) は実行する次の命令のアドレスを保持し、 命令レジスタ(IR) は実行する実際の命令を格納します(ただし、そのアドレスではありません)。

これらのレジスタの長さに関連して、現在のマシンには64ビットPCがあります。 IRの長さ(論理的な観点から)は、アーキテクチャによって異なります。

これらのマシンはサイクルごとに複数の命令をフェッチ、デコード、実行できるため、IRの物理的な実装を数行で説明するのは簡単ではありません。

9
chus