ARM 程序计数器 R15

寄存器 R15 为程序计数器(PC),它指向 正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。

ARM9 正常操作时,从 R15 读取的值是处理器 正在取指的地址,即:

R15(PC)= 当前正在执行指令的地址 + 8
1
注:

8 是指 8 个字节,是两条 ARM 指令的长度。
ARM 是 3 级流水线:取指,译码,执行。
由于 ARM7 指令总是以字为单位,所以 R15 寄存器的最低两位总是为 0。
R15 值的改变将引起程序执行顺序的改变。
向 R15 内写入一个值,程序将跳转到以 R15 值为地址的程序执行

下面讲一下上面代码段中的公式怎么推出来的:

ARM7 架构采用了一个 3 段的流水线:

取指:将指令从内存中取出来。
译码:操作码和操作数被译码以决定执行什么功能。
执行:执行已译码的指令。

由上述三级指令流程我们可以很容易得出下面这幅流程图:
从第三列我们可以看出来 PC 指向的正在取指的指令是第三条指令,其地址是 ox00000008,而正在执行的指令是第一条指令,其地址是 0x00000000。很容易看出相差 8。

总结:ARM 状态下,当前 PC 的值位 A,则正在译码的指令地址为 A-4,正在执行指令的地址为 A-8

继续介绍一下 ARM 体系结构的存储器格式

ARM 体系结构将存储器看作是从零地址开始的字节线性组合。从零字节到三字节放置第一个存储的字数据,从第四个字节到第七个字节放置第二个存储的字数据,依次排列。作为 32 位的微处理器,ARM 体系结构所支持的最大寻址空间为 4GB (232 2^{32}2
32
字节)

存储空间:地址线 32 条,4GB (232 2^{32}2
32
存储字节) 。
存储基本单位:字节。
存储组织:字。

解释一下上面这个图。ARM 一个地址保存一个字节。也就是 0x00000000 这个地址保存一个字节的内容。因而 0x00000000-0x00000003 四个地址保存四个字节,即一个字。
————————————————
版权声明:本文为CSDN博主「在到处之间找我」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_41104353/article/details/85732048

发布了29 篇原创文章 · 获赞 1 · 访问量 557

猜你喜欢

转载自blog.csdn.net/qq_45173769/article/details/103479184