两个指令之间的PC值(程序计数器)

时间:2013-04-18 09:25:41

标签: embedded arm program-counter

试图了解看门狗的原因。汇编程序的片段如下:

fe813cf0:       2820            cmp     r0, #32
fe813cf2:       dbf0            blt.n   fe813cd6 <XYZ+0x10>
fe813cf4:       f04f 30ff       mov.w   r0, #4294967295 ; 0xffffffff
fe813cf8:       bd10            pop     {r4, pc}

来自转储的我的PC值是fe813cf3。这是什么意思?我该如何解读? 如果需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:2)

如果它是一个触发的看门狗,那似乎表明处理器已挂起。在最糟糕的情况下,您捕获的状态可能已损坏。不确定你是如何得到“转储”的,所以很难说。

通常在ARM上,奇数地址表示想要切换到Thumb指令集的跳转。

例如参见this documentation of the BX (branch exchange) instruction

  

BX指令分支到指定寄存器中包含的地址。分支地址的位0的值确定执行是继续处于ARM状态还是Thumb状态。

     

地址的第0位可以这种方式使用,因为:

     
      
  • 所有ARM指令都是字对齐的。这意味着忽略任何ARM指令地址的第0位和第1位,因为这些位指的是地址的半字和字节部分。

  •   
  • 所有Thumb指令都是半字对齐的。这意味着忽略任何Thumb指令地址的第0位,因为它指的是地址的字节部分。

  •   

但是,我很确定上面的含义暗示PC实际上从未设置到奇数地址,而第0位被分支指令清除。