ARM3级流水线的PC值关系

ARM3级流水线的PC值关系在解释PC值关系之前先了解一些概念。 程序计数器(PC寄存器) 程序计数器是用于存放下一条指令所在单元的地方。当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,PC中的地址自动加1,或者由转移指针给出下一条指令的地址。 ARM系统 对于

在解释PC值关系之前先了解一些概念。

  • 程序计数器(PC寄存器)

程序计数器是用于存放下一条指令所在单元的地方。当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,PC中的地址自动加1,或者由转移指针给出下一条指令的地址。

  • ARM系统

对于32位处理器,一条指令占据4字节。

  • 流水线工作

流水线划分为取指,译码,执行。但并不是需3个时钟周期完成一条指令。因为取指,译码,执行,可以在通一个时钟周期中工作,互不影响,这样可以看出虽然一条指令完成需要多个时钟周期,但是总体来说看在每个时钟周期都有一条指令完成。

好,现在我们开始。
由程序计数器的概念我们可以知道,在PC寄存器中存放着各种指令地址,程序运行时PC指向的是正在被取指的指令,不是指向当前正在执行的指令!即:在执行一条指令时,PC指向的是下一条指令指令。由于ARM是三级流水线工作方式,在理想条件下,在取了一条指令后,等该指令到了执行阶段,处理器其实已经预取了往后的第二条指令了。
参考图1的竖着的椭圆(代表着一个流水线),当AND指令在执行时,PC值已经指向ADD的地址。ADD的指令在AND后的第二条指令。
所以有着下列数量关系:
PC→F(ADD的地址)
E(当前AND的执行地址)+8 (因为落后两条指令 2*4=8)= F (ADD的地址)
根据上述流水线的机制,我们的处理器执行的指令是落后于要预取的指令地址,落后两个时钟周期。对于32位处理器而言,也就是:
PC值=当前指令地址(E)+8

ARM3级流水线的PC值关系

 

 图2是对图1中竖着的椭圆的更详细的描述。
PC=F(当前预取的指令地址)
D=PC-4 (译码地址落后预取的地址1个周期)
E=PC-8(执行地址落后预取的地址两个周期)

ARM3级流水线的PC值关系

 

 

正是由于三级流水,使用BL XXX跳转到函数XXX之前,会把PC-4放入LR寄存器中,PC-4是当前执行指令的下一条指令,函数XXX的末尾执行BX LR(MOV PC, LR)就回到下一条指令执行

 

今天的文章ARM3级流水线的PC值关系分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/46301.html

(0)
编程小号编程小号
上一篇 2023-08-24
下一篇 2023-08-24

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注