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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值