ARM PC寄存器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARM PC寄存器相关的知识,希望对你有一定的参考价值。

ARM 由于采用了流水线技术所以可以多条指令并向执行。假设一个过程,指令1正在执行,那么指令2正在译码,指令3正在取址,而PC寄存器是保存当前正在取值的地址,也就是说PC保存的是指令3的地址,但是用MDK 做单步调试,发现并非如此,PC的值并不是指令3的地址,有谁知道的能解释下么

参考技术A 你看到的是不是正在执行指令的地址呵?(PC的值是指令1的地址)

我的理解是,流水线这个问题是CPU架构的特点,为了使流水线正常的走下去,物理寄存器里真实的值(PC值)应该指向正在取址的指令,所以手动写汇编的时候通过PC获取指令编译的时候需要注意。但在我们看来,汇编程序是一条条单步执行的,所以某些调试器会根据CPU架构的特点(几级流水)对PC的值进行调整,让我们最终看到的应该是正在执行的指令。

类似的中断处理完后,也不是直接将返回地址推入PC,而是应该先对LR的值进行处理(减4 或 减?)。

ARM指令中PC指针取址问题

那位牛人帮忙细致的解释一下,为什么说PC指针寄存器中的值是当前执行指令地址+8,我能这样理解吗:CPU正在执行A指令,这时候PC寄存器正在取A指令地址值+8那个地址处的指令,并且pc的作用就是用来取指令用的,所以R15中存的都是刚去来的指令的地址值!我这样想对吗?各位牛人们,帮忙指正一下,万谢!

ARM是32位的,所有寄存器都占四个字节,每条指令占四个字节,指令执行的过程:取址---->译码------->执行。这三步都是需要消耗时间的。指令在内存中一块连续内存空间中执行,所有指令像流水线一样执行,假如有多条指令按顺序执行。流水线:1.第一条指令进行取址。2.第一条指令译码,为了节约时间,在第一条指令译码的同时,第二条指令取址,地址为第一条指令地址加4. 3.第一条指令执行,同时第二条指令译码,第三条指令取址,地址等于第一条地址加8. 总结:这里的第一条指令等同于你说的A指令,它执行的时候,第三条指令正在取址,地址等于A指令地址加8. 参考技术A 运行--msconfig--启动,把不需要开机自动运行的程序前面的勾去掉---确定。

360安全卫士也可以,高级---启动项状态---把不需要开机自动运行的程序禁用。追问

想知道百度知道中回答问题者中除了广大网友,难道还有机器自动回答?不太智能啊

以上是关于ARM PC寄存器的主要内容,如果未能解决你的问题,请参考以下文章

为啥ARM PC寄存器指向下一条要执行的指令之后?

ARM 架构

ARM 寄存器

ARM pc寄存器并不总是当前指令的地址加4(Thumb状态)

ARM寄存器介绍

大脸猫讲逆向之ARM汇编中PC寄存器详解