Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ARM程序计数器区别特征_Arm_Intel_Computer Architecture - Fatal编程技术网

ARM程序计数器区别特征

ARM程序计数器区别特征,arm,intel,computer-architecture,Arm,Intel,Computer Architecture,ARM的R15与CPU的普通PC有何不同? 它们都只是程序计数器。区别是什么?ARM的PC更类似于常规寄存器,但有一些限制,而x86的IP更类似于常规寄存器 考虑到通用PC是基于Intel x86的CPU,在x86的情况下,您不能直接操作PC(指令指针),但它会通过提供的控制流指令进行隐式更新 在ARM的情况下,映射为索引15处寄存器(第16寄存器)的程序计数器(PC)可以通过算术指令直接操作。例如,您可以将16添加到PC,这将改变指令流的流,类似于16字节前向跳转指令。ARM PC可能比大多数

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

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

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


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

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

然而,当PC被用作目的地(左值或更新和写入)时,这种行为通常是不标准的。R15/PC的一些特殊情况(对于某些ARM Architecture版本)示例如下:

  • adc
    -将
    SPSR
    复制到
    CPSR
  • 添加
    -将
    SPSR
    复制到
    CPSR
  • ands
    -将
    SPSR
    复制到
    CPSR
  • bics
    -将
    SPSR
    复制到
    CPSR
  • bx r15
    -强烈反对或不支持
  • clz r15
    -不受支持
  • mcr pXX,xx,r15,…
    -不可预测
  • 等等
在大多数情况下,使用
PC
作为指令的目标会有一些特殊情况。特别是,可以使用S(通常用于设置条件代码)从异常返回。当从异常返回或直接返回时,这可以用作某种贴面。在某些情况下,指令的含义可能会完全改变。例如,
ldmsp,{r0-r15}^
ldmsp,{r0-r14}^
使用不同的寄存器组;第一个将根据SPSR中的模式加载寄存器;而第二个将把寄存器加载到用户模式


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

@USC为了补充这个非常好的答案,它简化了指令集(因为跳转只是将
添加到magic 15寄存器,而不是专门用于此目的的指令)。还有两件事使r15变得有趣。它总是比您预期的位置提前2条指令(这是最早的ARM内核的流水线设计的遗产),其底部的两位是特殊的。因为ARM指令自然地与4字节边界对齐,所以底部2位始终为零;因此,
r15
的位0被借用来表示处理器是在Thumb模式还是ARM模式下运行。@Iwillnotexistidoxist您应该添加它作为答案,请这样做:)@Iwillnotexistidoxist Mitch Alsup(一位半退休的专业计算机架构师,曾在罗斯的SPARC、摩托罗拉的88k和AMD的x86上工作)赛义德:历史记录表明GPRs中的PC“过于统一”。其他一些示例包括
bx rN
blx label
,它们明确修改了
R15
寄存器。
LR
(R14)在ARM ISA中也有点特殊;每种模式都有不同的
LR
。Thumb使
SP
(R13)也是固有的。对于纯ARM,任何寄存器都可以是堆栈。