【问题标题】:Size of Program Counter程序计数器的大小
【发布时间】:2011-12-28 19:38:07
【问题描述】:

程序计数器的位大小是多少?在所有类型的系统架构中,大小总是固定的吗?

【问题讨论】:

  • 不,当然不是固定的。它通常与其他指针寄存器(即可用于数据间接寻址的寄存器)大小相同。

标签: assembly cpu-architecture cpu-registers


【解决方案1】:

程序计数器是一个特殊用途的寄存器,它保存正在执行的指令或下一条要执行的指令的地址(这似乎取决于架构)。因此它具有机器字的大小,即 32、64 等位。

【讨论】:

  • "word size" / "machine word" 可能有争议且难以确定。例如AVR 是具有 8 位整数寄存器的 8 位 RISC 微控制器架构。指针是成对的寄存器。因此,在更多 ISA 中说 程序计数器寄存器具有指针宽度(即机器的地址大小)可能更准确。 (如果我们将 IP 视为近指针,并将 CS:IP 视为程序计数器的远指针版本,那么在分段 x86 上甚至是这样)。我假设有一些 ISA 不能做到这一点,可能代码与数据指针相比更窄。
【解决方案2】:

程序计数器只是正在执行的指令的位置,因此它会根据处理器架构而改变。也就是说,64 位架构需要 64 位来保存程序计数器,32 位需要 32 位,以此类推。

【讨论】:

  • 一条指令执行过程中PC的值往往是next指令的地址。例如x86-64 RIP-relative 寻址模式编码相对于当前指令的 end 的 rel32 位移(也就是下一条的开始)。分支位移也与当前指令的结尾有关。 MIPS 对相关分支的工作方式相同。 32 位 ARM 稍后会相对于 2 条指令进行分支,从而暴露早期实现的流水线细节。
【解决方案3】:

程序计数器是计算机体系结构和操作系统中使用的寄存器之一。它保存要执行的下一条指令的地址。指令执行后,加一,(PC =PC +1) 并且程序计数器将指向下一条指令。主要用于条件跳转和非条件跳转指令中计算有效地址。

【讨论】:

  • 大多数架构的指令宽度超过 1 个地址单元,有些是可变长度的。所以 PC += 非分支指令的指令长度。 re:“主要用于”分支:这是与它的主要软件交互,但您可以说它主要用于获取下一条指令。
猜你喜欢
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
  • 2010-09-07
  • 2014-02-16
  • 1970-01-01
  • 2010-12-12
  • 2016-04-05
  • 1970-01-01
相关资源
最近更新 更多