在嵌入式系统arm中R15和pc是什么关系啊?pc的值是当前指令的地址值+8?

2580阅读 0评论2014-03-07 Yiran_Linux
分类:嵌入式

PC是。不属于。它存放的是下一条要取的指令的32位地址(ARM),当取完一个字节以后,PC的值会自动加一,为取在下一条指令做准备。

读指令时,PC将其中的数值作为所取指令的地址输出给R15,然后按此地址输出指令字节,同时PC中的内容自动加1,指向下一条指令在中的地址。

所以R15保存当前指令地址(PC传给它的),PC作为指针指向下一条指令地址

转 http://blog.csdn.net/atower_boy/article/details/6291081

ARM处理器使用流水线来增加处理器指令流的速度,这样可使几个操作同时进行,并使处理与存储器系统之间的操作更加流畅,连续,能提供0.9MIPS/MHZ的指令执行速度。 PC代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行:

1.取指(从存储器装载一条指令);

2.译码(识别将要被执行的指令);

3.执行(处理指令并将结果写回寄存器)。

 

 

而R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位置+8;

 

           周期1              周期2            周期3           周期4            周期5            周期6

PC-8    取指                译码              执行

PC-4                          取指              译码             执行

PC                                                 取指             译码              执行

上一篇:ARM下书写位置无关的代码
下一篇:arm-linux-gcc/ld/objcopy/objdump使用总结