您的位置 首页 培训

从MOV PC,PC;看ARM的三级流水线进程

乍看这个指令好像是NOP;实际上远远不是,他实现的功能是跳转到当前指令下面第二条指令处执行:原因是PC寄存器中存储的是当前指令的地址+8

乍看这个指令好像是NOP;实践上远远不是,他完结的功用是跳转到当时指令下面第二条指令处碑文:

原因是PC寄存器中存储的是当时指令的地址+8,当人为改动PC寄存器的值之后,程序会跳转碑文,这样,这条指令之后,假定这条指令的地址为X,那么PC在碑文这条指令之后为X+8,

之后周期开端fetch X+8,

下一个周期开端decode X+8一起fetch X+12,

再一个周期开端excute X+8,一起decode X+12,一起fetch X+16,

这时分PC的值现已变成X+16, 也便是正在碑文的X+8再加上8,如此持续。。。

完结相同意图的还有 ADD PC,PC,#0;当然B PC也能够,可是没有前者来的快速。

请高手看看这样了解是否正确?

+======以下为转载==========

看到汇编中许多关于程序回来与中止回来时处理地址都很特别,细心想想原来是流水线作用的作用。所以,决议总结学习下ARM流水线。

ARM7处理器选用3级流水线来添加处理器指令流的速度,能供给0.9MIPS/MHz的指令处理速度。

PS:

MIPS(Million Instruction Per Second)一共每秒多少百万条指令。比方0.9MIPS,一共每秒九十万条指令。

MIPS/MHz一共CPU在每MHz的运转速度下能够碑文多少个MIPS,如0.9MIPS/MHz则一共假如CPU运转在1MHz的频率下,每秒可碑文90万条指令。

假如CPU在20MHz的频率下,每秒可运转1800万条指令。MIPS/MHz能够很好的反映CPU的速度。

3级流水线如上图所示(PC为程序计数器),流水线运用3个阶段,因而指令分3个阶段碑文。

⑴ 取指从存储器装载一条指令

⑵ 译码辨认酿制被碑文的指令

⑶ 碑文处理指令并将成果写会寄存器

曾经学过的51单片机,由于比较简单,所以它的处理器只能完结一条指令的读取和碑文后,才会碑文下一条指令。这样,PC一直指向的正在“碑文”的指令。

而关于ARM7来说由于是3级流水线,所以把指令的处理分为了上面所述的3个阶段。

所以处理时实践是这样的:ARM正在碑文第1条指令的一起对第2条指令进行译码,并将第3条指令从存储器中取出。

所以,ARM7流水线只要在取第4条指令时,第1条指令才算完结碑文。

下图生动形象的阐明晰3级流水线的处理机制

下面一句话很要害:不管处理器处于何种状况,程序计数器R15(PC)总是指向“正在取指”的指令,而不是指向“正在碑文”的指令或许正在“译码”的指令。

人们一般会习惯性的将正在碑文的指令作为参考点,即当时第1条指令。

所以,PC总是指向第3条指令,

或许说PC总是指向当时正在碑文的指令地址再加2条指令的地址。

处理器处于ARM状况时,每条指令为4个字节,所以PC值为正在碑文的指令地址加8字节,便是:

PC值 = 当时程序碑文方位 + 8字节

处理器处于Thumb状况时,每条指令为2字节,所以PC值为正在碑文的指令地址加4字节,便是:

PC值 = 当时程序碑文方位 + 4字节

下面一个比如就很好的阐明晰这个问题。

[plain] view plaincopyprint?
  1. 0x4000 ADDPC,PC,#4 ;正在被碑文的指令,将地址值PC+4写入PC
  2. 0x4004 …;正在被译码的指令
  3. 0x4008 …;正在被取指的指令,PC=0x4008
  4. 0x400C …;PC+4=0x400C

别的弥补阐明便是依据以上描绘,流水线只要被指令填满时才干发挥最大效能,即每时钟周期完结一条指令的碑文(仅单周期指令)。

假如程序产生跳转,流水线会被清空,这将需求几个时钟才干使流水线被再次填满。因而,尽量地少运用跳转指令能够进步程序的碑文功率

这样你就知道了,假如回来的时分回来PC,那么中心就有一个指令没有碑文,所以用SUB pclr-irq #4。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/263455.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部