为啥是“PC = PC + 8”;

“PC = PC + 8”其实这样写容易让人蒙了。“PC = PC + 8”真正含义应该是:

执行处代码地址 = PC - 8;

也就是说,”PC指向的地址“领先“执行处代码地址”8个字节;

也就是说“PC = PC + 8”中的第二个PC,其实表示是“执行处代码地址”

然后,理解为啥是8?

首先,arm的地址宽度是4个字节,所以每执行一条指令,PC就会自加4.

而一条指令要完全被arm吸收,需要多个步骤,拿arm7举例它采用了3级流水线技术。

流水线,对于我们这种玩FPGA的再熟悉不过了,以3级流水线来说,就是把一件事情分成3个步骤,每个步骤同时处理,

前两个周期为潜伏期,无法出结果,之后结果会源源不断的输出。

想象一下,一条条指令,就像一个个等待加工的产品,奔跑在传送带上,而“FETCH”,“DECODE”,“EXECUTE”,就是3道加工工序。

1、在第一个周期,PC指向第一条程序指令,进行取值(FETCH),DECODE,和EXECUTE步骤“扑空”

2、在第二个周期,接着PC + 4,PC指向第二条程序指令进行取值(FETCH),DECODE处理了在一个周期,FETCH到的指令,EXECUTE再次扑空。

3、在第三个周期,依然PC + 4,PC指向第三条程序指令进行取值(FETCH),DECODE处理了在二个周期,FETCH到的指令,

EXECUTE这时,处理在一个周期FETCH到的指令,这个指令同时也就是在第二个周期DECODE的指令。

4、之后每个时钟周期,EXECUTE都能处理到经过两次加工的code,不过PC始终领先于它,也就是:执行处代码地址 = PC - 8;

而ARM9通过增加流水线级数,简化了流水线的各级逻辑,进一步提高了处理器的性能。采用5级流水线技术,但是同样是“PC = PC + 8”,

这是为什么呢?我们来看看图:

我们发现EXECUTE仍然在第三个步骤,及符合:执行处代码地址 = PC - 8;只要理解这一点阅读代码也就够了。

——宋桓公

2015-05-11

ARM你必须知道的事儿——为啥“PC = PC + 8”?的更多相关文章

  1. ARM获得PC指针为何PC=PC+8

    http://blog.csdn.net/sddzycnqjn/article/details/7691534 R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指 ...

  2. 从MOV PC,PC;(或者ADDPC,PC,#4 )看ARM的三级流水线过程

    3级流水线如上图所示(PC为程序计数器),流水线使用3个阶段,因此指令分3个阶段执行. ⑴ 取指从存储器装载一条指令 ⑵ 译码识别将要被执行的指令 ⑶ 执行处理指令并将结果写会寄存器 以前学过的51单 ...

  3. ARM 开发板嵌入式linux系统与主机PC通过串口传输文件

    本文转载自http://useless20.blog.163.com/blog/static/237409982010227127576/ 嵌入式linux系统与主机通过串口传输文件 我想如果要从PC ...

  4. 移动端转PC --> PC跳转移动端

    <script type=”text/javascript”>try {var urlhash = window.location.hash;if (!urlhash.match(“fro ...

  5. web前端工程师在移动互联网时代里的地位问题 为啥C/S系统在PC端没有流行起来,却在移动互联网下流行了起来 为啥移动端的浏览器在很多应用里都是靠边站,人们更加倾向于先麻烦自己一下,下载安装个客户端APP

    web前端工程师在移动互联网时代里的地位问题 支付宝十周年推出了一个新产品:支付宝的十年账单,我也赶个时髦查看了一下我的支付宝十年账单,哎,感慨自己真是太屌丝了,不过这只是说明我使用淘宝少了,当我大规 ...

  6. 关于ARM的PC指针(什么时候PC+8,PC+4,PC-4,PC-8)转

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.                                                 ...

  7. ARM处理器的寄存器

    在ARM体系中通常有以下3种方式控制程序的执行流程: **在正常执行过程中,每执行一条ARM指令,程序计数器(PC)的值加4个字节:每执行一条Thumb指令,程序计数器寄存器(PC)加2个字节.整个过 ...

  8. ARM 汇编的一些规范

    A.5.1  文件格式        ARM 源程序文件(即源文件)为文件格式,可以使用任一文本编辑器编写程序代码.         在一个项目中,至少要有一个汇编源文件或C 程序文件,可以有多个汇编 ...

  9. ARM指令集(上)

    ADuC702x可以用两套指令集:ARM指令集和Thumb指令集.本小节介绍ARM指令集.在介绍ARM指令集之前,先介绍指令的格式. A.2.1  指令格式         (1)基本格式       ...

随机推荐

  1. 怎样利用App打造自明星实现自盈利

    怎样利用App打造自明星实现自盈利 1.了解各个概念       为了大家都能看懂这篇文章,先说明几个概念.        App(Application):能够在移动设备上使用,满足人们咨询.购物. ...

  2. 编辑器TP

    http://www.itshipin.com/blog/archives/category/php/thinkphp

  3. 和iPhone有关的视图控制器:UIViewController、UITabBarController、UINavigationController及其混合用法

    iPhone中的view视图是应用程序对于数据最直观.最直接的呈现方式,如下是我在学习了iPhone中的视图控制器以及由其衍生的特殊子类的总结,希望对那些初学者有所帮助: UIViewControll ...

  4. 使用 satis 搭建一个私有的 Composer 包仓库

    在我们的日常php开发中可能需要使用大量的composer包,大部份都可以直接使用,但在公司内部总有一小部份包是不能公开的,这时候我们就需要搭建一个公司内部使用的composer仓库,好在compos ...

  5. nginx的监控配置

    最近在弄性能,在性能过程中需要监控nginx的一些配置,这里简单的搭建了环境 //下载nginx  根据自己的版本 wget http://nginx.org/download/nginx-1.6.0 ...

  6. iOS (UIButton封装)仿糯米首页缩放“按钮”效果

    前言 过年期间,少不了各种聚会,当下聚会大多数情况下自然是团购,然后就是用各种APP...使用度娘糯米时(不是广告,不是广告,不是广告!),偶然注意到了它的首页中一个有意思的效果,就是那些“按钮”点击 ...

  7. CSS 之 内层div填充margin,外层div的背景色不会覆盖该margin

    外层元素(如div)中只有一个非空子元素,此时margin是被折叠了.两者之间取最大的margin值,表现在外层父元素上,而不是内层子元素. 注意: (1)只有垂直方向上才会出现此现象,水平方向不会出 ...

  8. 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第2版)

             目录:                 第1版:http://blog.csdn.net/vipbooks/article/details/51912143              ...

  9. SQL中VARCHAR与NVARCHAR存储区别

    DATALENGTH 与LEN的查询区别 插入结果 总结:DATALENGTH计算字节长度,LEN计算字符串长度 VARCHAR(2)是指允许存取字节长度小于或等于2的字符串          NVA ...

  10. 如何成为apple开发者???

    苹果开发者帐号申请流程如下 http://www.360doc.com/content/13/1029/12/11029609_325024387.shtml 苹果开发者账号分为 个人(individ ...