cpu-registers - 程序计数器和指令寄存器

标签 cpu-registers cpu-architecture program-counter

程序计数器保存着接下来要执行的指令的地址,而指令寄存器保存着实际要执行的指令。难道其中之一还不够吗?

这些寄存器中每一个的长度是多少?

谢谢。

最佳答案

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

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

[程序开始执行]

  1. PC包含0x00000000(假设这是内存中程序的起始地址)
  2. 从内存中取出编码指令并放入 PC。
  3. 指令被解码并执行。
  4. 现在是时候转到下一条指令了,所以我们回到 PC 看看下一条指令的地址是什么。但是,我们遇到了一个问题,因为 PC 之前的地址已被删除,所以我们不知道下一条指令在哪里。

因此,我们需要另一个寄存器来保存从内存中获取的实际指令。一旦我们获取了该内存,我们就会增加 PC,以便我们知道在哪里获取下一条指令。

附注寄存器的宽度根据架构的字大小而变化。例如,对于 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。当然,英特尔有自己的规范/设计,并且会有所不同。

关于cpu-registers - 程序计数器和指令寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15739489/

相关文章:

assembly - 为什么我们在汇编的CALLEE中出现 "PUSH EBP"和 "MOV EBP, ESP"?

x86 - 我们是否也将寄存器 RAX、RBX 等称为 R1、R2 等?

c - 如何在 c x86 AT&T 内联汇编中访问和更改 char 数组

c - 在c中用struct提取位域

assembly - 在 AMR7TDMI 处理器中从 `User` 切换到 `Supervisor` 模式

c++ - 是否可以更快地执行更复杂的循环?

assembly - QWORD 在 64 位机器上的大小是多少?

syntax-error - verilog程序计数器语法错误

delphi - Delphi调试中移动程序计数器

mips - MIPS架构下不使用J-Type指令如何保存程序计数器地址