ARM程序计数器区分功能

时间:2014-04-24 06:41:07

标签: arm intel computer-architecture

ARM的R15与CPU的通用PC有何不同? 它们都只是程序计数器。有什么区别?

2 个答案:

答案 0 :(得分:4)

ARM的PC与常规寄存器更相似,但有一些限制,而x86的IP类似于常规寄存器。

考虑到通用PC是基于Intel x86的CPU,在x86的情况下,您无法直接操作PC(指令指针),但它会被提供的控制流指令隐式更新。

在ARM的情况下,历史上程序计数器(PC),映射为索引15(第16个寄存器)的寄存器可以通过算术指令直接操作。例如,您可以向PC添加16,这将改变指令流的流程,类似于16字节的正向跳转指令。

答案 1 :(得分:1)

ARM PC可能比大多数CPU更像通用寄存器,但它仍然非常特殊。在许多情况下,传统的简单算术指令可以使用PC作为输入参数。这里它充当指针或数组基础。它也可以用作这些指令的控制传输输出。作为只读值,它可用于以独立于PC的方式计算返回值。在近旁代码中用作常量表查找也很有用。对于这些情况,PC非常像常规寄存器。这可能在许多RISC CPU上比在CISC ISA上更常见。

但是,当PC用作目标(左值或更新和写入)时,行为通常是非标准的。 R15 / PC的特殊情况(对于某些ARM架构版本)的一些示例是,

  • adcs - 将SPSR复制到CPSR
  • adds - 将SPSR复制到CPSR
  • ands - 将SPSR复制到CPSR
  • bics - 将SPSR复制到CPSR
  • bx r15 - 非常劝阻或不支持。
  • clz r15 - 不受支持。
  • mcr pXX, xx, r15,... - 不可预测的

在大多数情况下,使用PC作为指令的目的地会有一些特殊情况。特别是,使用 S (通常设置条件代码)可以用于从异常中返回。从异常返回或直接返回时,这可能会被用作某种胶合代码。在某些情况下,指令的含义可能会完全改变。例如,ldm sp, {r0-r15}^ldm sp, {r0-r14}^使用不同的寄存器库;第一种是根据SPSR中的模式加载寄存器;而第二个会将寄存器加载到用户模式

对于加载/存储,原子,模式操作,协处理器和复杂算术(64位乘法等)指令,PC通常不受支持或具有不同的含义;不同的含义通常是处理系统级代码异常的机制。