程序计数器和指令寄存器

时间:2013-04-01 07:34:32

标签: cpu-registers cpu-architecture program-counter

程序计数器保存下一个应该执行的指令的地址,而指令寄存器保存要执行的实际指令。他们中的其中一个不够吗?

每个寄存器的长度是多少?

感谢。

2 个答案:

答案 0 :(得分:53)

你总是需要两个。程序计数器(PC)保存下一条要执行的指令的地址,而指令寄存器(IR)保存编码的指令。在获取指令时,程序计数器增加一个“地址值”(到下一个指令的位置)。然后对指令进行解码并适当执行。

你需要两者的原因是因为如果你只有一个程序计数器并将其用于这两个目的,你会得到以下麻烦的系统:

[程序执行开始]

  1. PC包含0x00000000(比如这是内存中程序的起始地址)
  2. 编码指令从内存中取出并放入PC中。
  3. 解码并执行指令。
  4. 现在是时候转到下一条指令了,所以我们回到PC看看下一条指令的地址是什么。但是,我们遇到了问题,因为PC的先前地址被删除了,所以我们不知道下一条指令在哪里。
  5. 因此,我们需要另一个寄存器来保存从内存中取出的实际指令。一旦我们获取了内存,我们就会增加PC,以便我们知道在哪里获取下一条指令。

    P.S。寄存器的宽度取决于架构的字大小。例如,对于32位处理器,字大小为32位。因此,CPU上的寄存器将是32位。指令寄存器的尺寸没有区别。不同之处在于行为和解释。指令以各种形式编码,但是,它们仍然占用32位寄存器。例如,Altera的Nios II处理器包含3种不同的指令类型,每种指令编码方式不同。请参阅ftp://ftp.altera.com/up/pub/Tutorials/DE2/Computer_Organization/tut_nios2_introduction.pdf

    的第6页

    您还可以从上面的链接中了解有关Nios II处理器结构的更多信息。它是一个简单的IP CPU。当然,英特尔有自己的规格/设计,它会有所不同。

答案 1 :(得分:8)

如上所述,Program Counter (PC)保存下一条要执行的指令的地址,Instruction Register (IR)存储要执行的实际指令(但不包括其地址)。

与这些寄存器的长度相关,当前的机器有64位PC。 IR的长度(从逻辑上看)取决于架构:

由于这些机器能够在每个周期获取,解码和执行多个指令,因此IR的物理实现不容易在几行中描述。